【问题标题】:CRM 2011 Open a new window after saveCRM 2011 保存后打开一个新窗口
【发布时间】:2015-04-23 13:02:37
【问题描述】:

基本上我需要的是在保存记录后运行一些 JavaScript。这将从已由插件填充的字段中获取 guid。我的代码看起来像;

    Xrm.Page.data.entity.save();

    var newguid = Xrm.Page.getAttribute("new_copyguid").getValue();
    Xrm.Utility.openEntityForm("new_myentity", newguid);

问题是代码在调用 save() 之后运行,并在插件填充“new_copyguid”字段之前继续执行。有没有办法在继续使用javascript之前等待插件完成?我试过 AddOnSave() 没有成功。任何 javascript 回调似乎也在插件完成之前执行。插件设置为同步运行。

我正在通过表单上的按钮执行此 javascript。该按钮设置一个字段值,然后保存记录,触发插件。该按钮是创建克隆的“复制实体”按钮。我需要在浏览器中打开这条新记录。

我已经读到这也不起作用,因为它发生在保存之前;

    Xrm.Page.data.refresh(save).then(successCallback, errorCallback);

任何指针都会很棒!

【问题讨论】:

  • 你的插件是否在同步模式下运行??
  • 是的,它正在同步运行。

标签: javascript dynamics-crm-2011 dynamics-crm


【解决方案1】:

我认为您必须在 OnLoad 部分运行您的逻辑。保存应强制刷新,您的加载逻辑将再次运行。您需要检查修改日期是否在特定时间范围内。

其他选项是您通过 rest 调用或 Soap 调用手动执行更新,然后您可以在另一个调用中从插件中读取值。

【讨论】:

  • 我已经走了检查修改日期的路线。实际上,我为“已复制”添加了另一个字段,并将其打扮成附加功能:-)
【解决方案2】:

您可以通过输入此代码等待几秒钟。

function YourFunction()
{
    Xrm.Page.data.entity.save();
    OpenForm();
}

这是一个新功能。

function OpenForm()
{
  setTimeout(function () {
    var newguid = Xrm.Page.getAttribute("new_copyguid").getValue();
    Xrm.Utility.openEntityForm("new_myentity", newguid);
  }, 3000);
}

【讨论】:

    【解决方案3】:

    试试这个:

    function onPageLoad() {
        var formType = Xrm.Page.ui.getFormType();
        if (formType == 0 || formType == 1) { // 0 = Undefined, 1 = Create
            // If form is in Create Mode then
            if (Xrm.Page.data != null && Xrm.Page.data.entity != null) {
                Xrm.Page.data.entity.addOnSave(onSaveDoThis);
            }
        }
    }
    
    function onSaveDoThis() {
        setTimeout(onFormSaveSuccess, 300);
    }
    
    function onFormSaveSuccess() {
    
        var newguid = Xrm.Page.getAttribute("new_copyguid").getValue();
        if (newguid == "") {
            onSaveDoThis();
        } else {
            // Don't need to trigger the function onSaveDoThis anymore
            Xrm.Page.data.entity.removeOnSave(onSaveDoThis);
            Xrm.Utility.openEntityForm("new_myentity", newguid);
        }
    }
    

    【讨论】:

      【解决方案4】:

      试试这个:

      function OpenForm()
      {
        setTimeout(function () {
          var newguid = Xrm.Page.getAttribute("new_copyguid").getValue();
          Xrm.Utility.openEntityForm("new_myentity", newguid);
        }, 3000);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-02
        • 2020-03-19
        • 2013-05-10
        • 1970-01-01
        相关资源
        最近更新 更多