本文摘要
介绍泛微 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;