如何防止表单保存在 Dynamics 365 中

问题描述 投票:0回答:2

如果输入的“dni”值已被另一个“人”注册,我想阻止表单保存,我尝试阻止表单在其 onSave 事件中保存,然后如果我的条件匹配,我会制作然后保存表格。所以我编写了以下代码:

function saveDni(executionContext) {
  try {
    const formContext = executionContext.getFormContext();
    const currentDni = formContext.getAttribute("cr6ff_dni").getValue();
    
    executionContext.getEventArgs().preventDefault();

    var fetchXml = [
      "<fetch top='1'>",
      "  <entity name= 'cr6ff_person'>",
      "    <filter>",
      "      <condition attribute='cr6ff_dni' operator='eq' value='", currentDni, "'/>",
      "    </filter>",
      "  </entity>",
      "</fetch>",
    ].join("");

    fetchXml = "?fetchXml=" + encodeURIComponent(fetchXml);

    Xrm.WebApi.retrieveMultipleRecords("cr6ff_person", fetchXml).then(
      (result) => {
        if (result.entities.length == 0) {
          formContext.data.entity.save();
        }
     }
   ) 
}
catch(error) {
  console.log("An error has occurred while validating the user's data.");
}

问题是,当 save() 方法触发时,它也会再次触发该函数,所以我陷入了循环。关于如何解决这个问题有什么想法吗?

javascript forms event-handling dynamics-crm microsoft-dynamics
2个回答
0
投票

让我向您推荐最佳实践。

  1. 避免在表单保存中像
    Xrm.WebApi.retrieveMultipleRecords
    这样的异步调用,以获得更好的用户体验。 了解更多
  2. formContext.data.entity.save()
    已弃用,请使用
    formContext.data.save()
    代替。 参考
  3. 最好将业务逻辑验证转移到插件或流程中

0
投票

您可以尝试此行来防止在 d365 中保存表单。

executionContext.getEventArgs().preventDefault();

© www.soinside.com 2019 - 2024. All rights reserved.