0

我使用以下代码在我的 crm 表单上禁用了自动保存功能。但是它仍然会触发我的 html webresource 中的保存功能。

//Javascript on the Form onsave

let eventArgs = context.getEventArgs();

if (eventArgs.getSaveMode() == 70)
{
    eventArgs.preventDefault();
}

我使用 Vue.js 作为 html webresource 的后端。下面是我写的代码:

//Javascript File behind the html

async created: function () 
{
    window.parent.Xrm.Page.data.entity.addOnSave(async () => { await saveData(this) });
}
    

saveData : function()
{
    let results = await window.parent.Xrm.WebApi.online.executeMultiple(modifiedrecords);

    for (let resultsub in results) 
    {
        const result = results[resultsub];

        if (result.ok) {}
    }
}

任何帮助,将不胜感激。

4

1 回答 1

0

您正在使用该window.parent.Xrm.Page构造访问 Web 资源的父表单。这确实有效,但不受支持且不可靠。(此外,在 Dynamics CRM 2016 中无法再访问父页面。)

实体表单是非常复杂的对象,在调用表单 onload 之前需要进行一些繁重的处理。相反,集成在 iFrame 中的实体表单上的 HTML Web 资源通常是轻量级的,因此加载速度很快。因此,您的 Web 资源会在表单能够执行此操作之前将其自身附加到 onSave 处理程序。但是,这可能会有所不同,具体取决于浏览器的缓存行为和其他因素。无论如何,当 web 资源在表单之前附加自身时,它不受preventDefault()事件管道向下的影响。

您可以通过让实体表单上的 onLoad 函数主动加载和/或初始化 Web 资源来解决此问题。

于 2021-09-28T22:03:56.450 回答