如何将依赖form.runFormulas()的2sxc V1公式迁移至V2?
2sxc V2 公式迁移:替换弃用的 runFormulas() 实现字段联动
2sxc v20 已弃用 form.runFormulas() 方法,官方计划2024年底停止支持该方法。V2公式通过返回Promise实现异步逻辑,完成后会自动触发表单更新,无需手动调用刷新方法。以下是将原V1公式转换为V2版本的实现,完全保留原业务逻辑:
v2(data, context) { // 空值处理,直接返回空字符串 if (data.Intervention == null || data.Intervention === "") return ""; // 当Intervention值变更时,重置缓存 if (data.Intervention !== context.cache.Intervention) { context.cache.Intervention = data.Intervention; delete context.cache.data; context.cache.alreadyRun = false; } // 缓存已有数据,直接返回 if (context.cache.data) return context.cache.data; // 已发起过请求但还没返回,返回当前字段值避免重复请求 if (context.cache.alreadyRun) return data.value; // 标记已发起请求,防止重复调用 context.cache.alreadyRun = true; // 返回Promise,V2公式引擎会自动在请求完成后更新表单 return context.sxc.webApi.fetchJson(`app/auto/api/ReturnIntSpecs/IntProcedure?Intervention=${data.Intervention}`) .then(response => { context.cache.data = response; return response; // 返回最终要填充到目标字段的值 }); }
核心变化说明
- 移除手动刷新调用:不再需要
context.form.runFormulas(),V2公式引擎会自动监听返回的Promise,请求完成后自动更新表单字段 - 异步逻辑返回Promise:将异步请求的Promise直接返回给公式引擎,由系统处理后续的字段更新
- 保持原缓存逻辑:完全保留原有的缓存判断逻辑,避免重复发起API请求,确保性能和原业务行为一致
内容的提问来源于stack exchange,提问作者João Gomes
相关产品推荐
相关产品推荐

