CRM 2015 中自定义实体窗体上的 OnSave 事件进入递归触发器

OnSave event on a custom entity form in CRM 2015 enters in a recursive trigger

我在 crm 2015 本地组织上以自定义实体的形式在 onSave 上注册了一个事件,它似乎进入了递归调用。在我点击保存后,事件一直调用它自己,直到我通过任务管理器终止 IE 或 IE 崩溃并内存堆栈已满。我已经检查过了,它似乎与我在函数中的内容无关,这意味着我不会以任何方式再次触发保存事件。

功能代码如下:

function contract_OnSave(context) {

    var eventArgs = context.getEventArgs();
    if (eventArgs.getSaveMode() == 1) {

        if (Xrm.Page.getAttribute("new_field").getValue() != null) {
            var mort = Xrm.Page.getAttribute("new_field").getValue();

            if (mort == true) {


                Xrm.Utility.confirmDialog("Would you like to open a new window for a Case?",
                    saveFormOnOpenCase,
                    callback)
            }
        }
    }
}
function saveFormOnOpenCase()
{
    Xrm.Page.data.save();
    var parameters = {};
    parameters["new_subjectnew"] = 100000002;
    // Open the window.
    var windowOptions = {
        openInNewWindow: true
    };
    Xrm.Utility.openEntityForm("incident", null, parameters, windowOptions);
}
function callback() {

}

在我看来这是 CRM 2015 中的一个错误,之后我检查了 CRM 的版本,发现它是 RTM 版本。我建议将 CRM 升级到 Update 1,这似乎是最合乎逻辑的步骤。但即使升级后,问题仍然存在。

我尝试在字段上的 OnChange 事件上注册相同的函数,它工作正常,除了 openEntityForm 函数的 openInNewWindow 选项,它不会打开新的 window,但这是一个不同的问题。

我正在使用 IE 11。

有人可以确认这是否也发生在另一个 CRM 2015 环境中,或者我是否遗漏了什么?

在 OnSave 事件中你要求用户确认:

Xrm.Utility.confirmDialog("Would you like to open a new window for a Case?",
                saveFormOnOpenCase,
                callback)

当用户选择“确定”时,此对话框将执行功能 saveFormOnOpenCase。该函数执行的第一条指令是:

Xrm.Page.data.save();

...再次触发保存事件

使OnSave函数进入递归调用的实际问题如下:

var windowOptions = {
    openInNewWindow: true
};    
Xrm.Utility.openEntityForm("incident", null, parameters, windowOptions);

如link

中所述

https://msdn.microsoft.com/en-us/library/jj602956.aspx

openEntityForm 中的 windowOptions 参数应该在新 window 中打开新表单,但由于某些原因它没有打开,尽管 CRM 已使用 CRM 2015 的更新 1 进行了更新。因为表单不会在新的 window 中打开,当离开当前表单时,会触发自动保存事件,导致表单进入递归并启动 OnSave 事件。

我通过使用纯 javascript 函数(不使用 CRM SDK)在新 window 中打开表单解决了这个问题,它不会启动 OnSave 事件。