You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将依赖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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:52:41