【问题标题】:In Dynamics CRM Unified Interface OnSave Event Doesn't Work在 Dynamics CRM 统一接口 OnSave 事件不起作用
【发布时间】:2019-12-17 11:55:38
【问题描述】:

我有一个 OnSave 表单事件的事件处理程序如下:

function saveEntityForm(executionContext) {
   executionContext.getFormContext().data.save().then();
}

当我点击表单上的保存按钮时,会弹出以下文本:

正在保存

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

我正在使用统一接口。

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

【问题讨论】:

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

标签: dynamics-crm dynamics-crm-365 dynamics-crm-uci


【解决方案1】:

只有当您在表单已保存时尝试保存时,“请稍候,保存完成”才会出现 - 表单不允许同时进行两次保存。这就是调用 setTimeout 有效的原因 - 它会延迟调用 save 并且到那时,原始保存将完成。

但是,请注意,这会影响性能,如果在慢速网络上,甚至可能无法正常工作,因为在 XXX 秒后可能无法完成保存表单!

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

如果此代码在特定控件的 onchange 处理程序中执行,您可以尝试调用 isDefaultPrevented 或 getSaveMode 来确定是否正在保存表单,如果是,则调用 save() https://docs.microsoft.com/en-us/powerapps/developer/model-driven-apps/clientapi/reference/save-event-arguments/isdefaultprevented

【讨论】:

    【解决方案2】:

    我已经通过自己为我的自定义代码添加 setTimeout 而不是使用如下显式保存方法解决了这个问题:

    function saveEntityForm(executionContext) {
       // waiting few seconds to process the form
       setTimeout(() => {
          processForm(executionContext);
       }, 3000);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      相关资源
      最近更新 更多