如果输入的“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.");
}
问题是,当保存()方法触发时,它也会再次触发这个函数,所以我陷入了一个循环。有什么办法能解决这个问题吗?
2条答案
按热度按时间vuktfyat1#
让我向您推荐最佳实践。
1.避免像表单保存中的
Xrm.WebApi.retrieveMultipleRecords
这样的异步调用,以获得更好的用户体验。Read moreformContext.data.entity.save()
已弃用,请使用formContext.data.save()
。Reference1.最好将业务逻辑验证转移到服务器端插件或Power自动化流程
bnlyeluc2#
你可以尝试这一行来防止保存一个表格在d365.