本文摘要
介绍泛微 Ecology10 表单前端二次开发中获取当前表单全部字段值的做法演变:早期需要先遍历字段信息,再分别读取主表字段与明细表数据,如今只需调用表单数据仓库提供的方法,即可一次性取出包含主表与明细在内的全部数据。适合需要批量取值的开发场景,新写法明显更简洁。
小白丸子一开始的做法(点击展开)
/**
* 获取表单内所有字段值
* @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;