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

Dynamics CRM 2016本地部署:openDialog无法等待返回值求助

Dynamics CRM 2016 弹窗返回值问题解决

问题核心

Xrm.Internal.openDialog是异步方法,调用后不会阻塞后续代码执行,所以你看到的debugger直接运行是正常行为。返回值的处理必须放在它的回调函数中,而非方法调用之后的代码里。同时需确认弹窗页面的返回值传递逻辑是否符合CRM 2016的标准规范。

修正步骤

1. 调整主页面(第一个页面)代码

将需要等待返回值后执行的逻辑(比如debugger)移到回调函数内,确保只有弹窗关闭后才会触发:

function Click() {
  var Entity = "calendar";
  var Select = "?$select=name";
  var Filter = "&$filter=type eq 1";
  var addParams;
  window.parent.Xrm.WebApi.retrieveMultipleRecords(Entity, Select + Filter).then(
    function success(result) {
      if (result != null && result.entities != null) {
        for (var i = 0; i < result.entities.length; i++) {
          if (i == 0)
            addParams= "Param="+result.entities[i].name;
          else
            addParams+= "&Param="+result.entities[i].name;
        }
        var DialogOption = new window.parent.Xrm.DialogOptions;
        DialogOption.width = 400; DialogOption.height = 400;
        var webresourceurl = "/WebResources/calendarPage?Data=" + encodeURIComponent(addParams);

        window.parent.Xrm.Internal.openDialog(
          webresourceurl, 
          DialogOption, 
          null, 
          null, 
          function (returnValue) { 
            alert(returnValue); 
            debugger; // 移到回调内,弹窗关闭后才执行调试
          }
        );
        // 这里的代码会在弹窗打开后立即执行,不会等待弹窗关闭
      }
    },
    function (error) {
      alert("error" + error.message);
    }
  );
}

2. 修正弹窗页面(第二个页面)的返回值传递逻辑

在CRM 2016中,弹窗关闭并传递返回值需使用官方内置方法,替换自定义的closeWindow:

function getValue() {
  var ele = document.getElementsByTagName('input');
  var returnValue;
  for (var i = 0; i < ele.length; i++) { // 声明局部变量i,避免全局污染
    if (ele[i].type == 'radio' && ele[i].checked) {
      alert(' Valore: ' + ele[i].value);
      sessionStorage.setItem('name', ele[i].value);
      returnValue = ele[i].value;
      break; // 找到选中项后跳出循环,提升效率
    }
  }
  // 先设置返回值,再关闭弹窗
  window.parent.Mscrm.Utilities.setReturnValue(returnValue);
  window.parent.Mscrm.Utilities.closeDialog();
}

额外注意事项

  • 确保弹窗页面的Web资源已在CRM中正确发布,路径/WebResources/calendarPage无误。
  • 本地部署环境下,window.parent上下文默认有效,无需额外处理跨域问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:17:26