【问题标题】:How can I prevent a form from saving in Dynamics 365如何防止表单在 Dynamics 365 中保存
【发布时间】:2021-04-26 13:05:17
【问题描述】:

如果输入的“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


【解决方案1】:

让我向您推荐最佳做法。

  1. 避免像Xrm.WebApi.retrieveMultipleRecords 这样的异步调用形式保存以获得更好的用户体验。 Read more
  2. formContext.data.entity.save() 已弃用,请改用 formContext.data.save()Reference
  3. 最好将业务逻辑验证移到插件或流中

【讨论】:

  • 会听从您的建议,感谢您提供的见解!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-14
  • 2017-08-17
  • 1970-01-01
  • 2018-04-06
  • 1970-01-01
  • 2018-03-23
  • 1970-01-01
相关资源
最近更新 更多