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

pjngdqdw  于 12个月前  发布在  Java
关注(0)|答案(2)|浏览(106)

如果输入的“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.");
}

问题是,当保存()方法触发时,它也会再次触发这个函数,所以我陷入了一个循环。有什么办法能解决这个问题吗?

vuktfyat

vuktfyat1#

让我向您推荐最佳实践。
1.避免像表单保存中的Xrm.WebApi.retrieveMultipleRecords这样的异步调用,以获得更好的用户体验。Read more

  1. formContext.data.entity.save()已弃用,请使用formContext.data.save()Reference
    1.最好将业务逻辑验证转移到服务器端插件或Power自动化流程
bnlyeluc

bnlyeluc2#

你可以尝试这一行来防止保存一个表格在d365.

executionContext.getEventArgs().preventDefault();

相关问题