Dynamics crm 在Dynamics CRM统一界面中,OnSave事件不会';行不通

Dynamics crm 在Dynamics CRM统一界面中,OnSave事件不会';行不通,dynamics-crm,dynamics-crm-365,dynamics-crm-uci,Dynamics Crm,Dynamics Crm 365,Dynamics Crm Uci,我有一个用于OnSave窗体事件的事件处理程序,如下所示: function saveEntityForm(executionContext) { executionContext.getFormContext().data.save().then(); } function saveEntityForm(executionContext) { // waiting few seconds to process the form setTimeout(() => {

我有一个用于OnSave窗体事件的事件处理程序,如下所示:

function saveEntityForm(executionContext) {
   executionContext.getFormContext().data.save().then();
}
function saveEntityForm(executionContext) {
   // waiting few seconds to process the form
   setTimeout(() => {
      processForm(executionContext);
   }, 3000);
}
当我点击表单上的“保存”按钮时,会弹出以下文本:

在建储蓄

保存完成时请稍候错误代码:0x83215603

我使用的是统一接口


发生此问题的原因是什么?如何解决此问题?

我通过为自定义代码添加setTimeout而不是使用显式保存方法来解决此问题,如下所示:

function saveEntityForm(executionContext) {
   executionContext.getFormContext().data.save().then();
}
function saveEntityForm(executionContext) {
   // waiting few seconds to process the form
   setTimeout(() => {
      processForm(executionContext);
   }, 3000);
}
“保存完成时请稍候”仅当您在表单已保存时尝试保存时才会出现-表单不允许同时进行两次保存。这就是调用setTimeout有效的原因——它将延迟调用save,到那时,原始保存将完成

但是,请注意,这会影响性能,如果在慢速网络上,甚至可能不起作用,因为表单在XXX秒后可能无法保存

如果此代码在onsave事件处理程序中执行,则应首先调用preventDefault()停止默认保存,然后调用executionContext.getFormContext().data.save()将按预期工作(请参阅)

如果此代码在特定控件的onchange处理程序中执行,则可以尝试调用isDefaultPrevented或getSaveMode来确定是否保存表单,如果是,则调用save()

您是否删除了代码的任何部分?为什么要显式保存?嗨,阿伦,我想在成功事件上执行一些自定义代码,这就是我尝试实现显式保存的原因。您是否在阻止默认保存?是否有可能发生循环保存事件??可能是相关的-嗨,阿伦,谢谢你的回复。无论是否有自定义逻辑,弹出窗口都会出现。我也使用了预防方法,但同样的事情正在发生。我可以看到,每当我调用save()方法时,它都会弹出错误。我会试试你建议的线程。嗨,阿伦,你给的线程不起作用。但我用不同的方式解决了这个问题。刚刚使用settimeout来执行我的自定义代码。