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

Dynamics 365:报价表单定时刷新后重复检测状态控制进度指示器

Dynamics 365报价表单进度指示器循环检测实现

现有代码问题分析

  1. 语法错误:setTimeout的闭合括号位置错误,导致代码无法正常执行
  2. 无循环检测逻辑:仅执行一次刷新,刷新后未重新触发状态检测,无法持续监控状态变化
  3. 未清理定时器:状态变更后仍可能继续触发刷新,造成不必要的性能消耗

修正后的实现代码

function showIndicator(executionContext) {
    var formContext = executionContext.getFormContext();
    var message = 'Quote is being processing';
    // 定义定时器变量,用于后续清除
    let refreshTimer;

    // 状态检测逻辑
    function checkStatus() {
        var currentStatus = formContext.getAttribute('statuscode').getValue();
        if (currentStatus == 493430001) {
            // 显示进度指示器(重复调用不会创建多个实例)
            Xrm.Utility.showProgressIndicator(message);
            // 3秒后刷新表单并重新检测状态
            refreshTimer = setTimeout(function () {
                formContext.data.refresh(false).then(function () {
                    // 刷新完成后重新执行状态检测
                    checkStatus();
                });
            }, 3000);
        } else {
            // 关闭进度指示器
            Xrm.Utility.closeProgressIndicator();
            // 清除定时器,停止循环刷新
            if (refreshTimer) clearTimeout(refreshTimer);
        }
    }

    // 首次执行状态检测
    checkStatus();
}

关键优化点说明

  • 递归循环检测:通过内部函数checkStatus实现持续监控,表单刷新完成后(借助refresh的Promise回调)重新执行状态判断,确保基于最新数据
  • 定时器生命周期管理:状态变更为非处理状态时立即清除定时器,避免无效的重复刷新
  • 异步刷新处理:利用表单刷新的异步回调,避免读取未更新的旧状态数据
  • 重复显示防护:Xrm.Utility.showProgressIndicator重复调用不会生成多个指示器,无需额外判断显示状态

内容的提问来源于stack exchange,提问作者Kostas Karagiannis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 06:05:05