我在Dynamics CRM中有一个Web资源,我正在尝试添加逻辑以在保存时执行。我使用addOnSave()
方法将我的逻辑附加到保存。当我在保存逻辑中使用Promise时,Save&保存完成之前,关闭退出页面。如何在Web资源关闭之前让我的保存逻辑完全执行?
Xrm.Event.addOnSave(function () {
// Code makes it here
Promise.all([promises]).then(function(){
// Code never makes it here
secondPromise.then(function(){
showAlert();
setTimeout(function(){
closeAlert();
}, 5000);
});
});
});
答案 0 :(得分:2)
您想要取消保存,然后重新发出,如下所示:
Xrm.Page.data.entity.addOnSave(function (context) {
var eventArgs = context.getEventArgs();
eventArgs.preventDefault(); // cancels the save (but other save handlers will still run)
Promise.all([promises]).then(function(){
// Code never makes it here
secondPromise.then(function(){
showAlert();
setTimeout(function(){
closeAlert();
// reissue the save
Xrm.Page.data.entity.save('saveandclose');
}, 5000);
});
});
});
回应你对preventDefault没有正确停止Save and Close事件的错误的评论:使用XrmToolbox中的Ribbon Workbench覆盖Save and Close按钮指向一个自定义函数,它可能看起来像某个东西像这样:
function customSaveAndClose() {
if (customSaveIsNeeded) {
// execute your custom code
} else {
Xrm.Page.data.entity.save('saveandclose');
}
}
您可以确定覆盖应用程序功能区级别的S& C按钮,该按钮会覆盖所有实体,但我相信您也可以一次只覆盖一个实体。
如果您不想编辑功能区(如果您以前从未这样做过,那会有点吓人),如果您对不受支持的自定义设置没有严格的要求,您还可以采用更简单的方法简单地覆盖Mscrm.RibbonActions.saveAndCloseForm函数,这是本机S& C按钮调用的函数。这看起来像这样:
// defined in /_static/_common/scripts/RibbonActions.js
Mscrm.RibbonActions.saveAndCloseForm = function() {
// your code here
}
有关此方法的一些注意事项:
top.Mscrm
,而不仅仅是Mscrm
。