MENU

[泛微Ecology10] 获取当前表单所有字段值的方法

• 2025 年 11 月 14 日 • 阅读: 18 • OA

小白丸子一开始的做法(点击展开)

/**
 * 获取表单内所有字段值
 * @returns {Object} 包含主表字段和明细表数据的对象
 */
const getAllFieldValues = () => {
    const formSdk = window.WeFormSDK.getWeFormInstance();
    const fieldInfos = formSdk.listFieldInfo();

    // 复用现有格式化逻辑
    const formatFields = (fieldInfos) => {
        const result = { mainFields: [], detailTables: {} };

        fieldInfos.forEach(field => {
            if (field.componentKey === 'DataTable') {
                result.detailTables[field.subFormId] = [];
            } else if (field.fieldId && /^\d+$/.test(field.fieldId)) {
                const target = field.subFormId && result.detailTables[field.subFormId]
                    ? result.detailTables[field.subFormId]
                    : result.mainFields;
                target.push(field.fieldId);
            }
        });

        return result;
    };

    // 复用现有数据获取逻辑
    const getFormData = (fields) => {
        const result = { mainFields: {}, detailTables: {} };

        fields.mainFields.forEach(fieldId => {
            try {
                result.mainFields[fieldId] = formSdk.getFieldObj(fieldId);
            } catch (error) {
                console.warn(`获取字段 ${fieldId} 失败:`, error);
                result.mainFields[fieldId] = null;
            }
        });

        Object.keys(fields.detailTables).forEach(tableId => {
            try {
                result.detailTables[tableId] = formSdk.getDetailData(tableId) || [];
            } catch (error) {
                console.warn(`获取明细表 ${tableId} 失败:`, error);
                result.detailTables[tableId] = [];
            }
        });

        return result;
    };

    const fields = formatFields(fieldInfos);
    return getFormData(fields);
};

现在的做法

formSdk.weFormApi.formStore.getFormData().dataDetails;