我正在编写javascript代码,根据每个表单上字段的值更改Dynamics CRM中实体的形式。
要更改表单,用户必须更改字段的值。 然后在onChange事件期间,我的js进入,触发保存,必须等待结果,然后更改表单。 (如果您同时保存和更改,仍会显示一个窗口,要求用户确认保留未保存的更改)
现在应该有办法做到这一点:
Xrm.Page.data.save(saveOptions).then(successCallback, errorCallback)
在msdn上描述:
使用选项异步保存记录,以设置保存操作完成后要执行的回调函数。
我正在使用它:
var campaignType = Xrm.Page.getAttribute('typecode').getValue();
if (xxx.Forms.hasOwnProperty(campaignType)) {
Xrm.Page.data.save().then(function () { xxx.redirectToForm(xxx.Forms[campaignType]); }, null);
但是在保存期间,表单更改仍会立即触发。
我做错了什么?
答案 0 :(得分:1)
我在尝试更新流程栏时遇到了类似的问题。
Xrm.Page.data.save().then
(function () {
window.location.reload(true);
},
function () {
windows.alert("broken");
}
);
我强烈建议你尝试在vanilla CRM上应用逻辑,对我来说,破坏逻辑的是一个名为N52 Rules的第三方组件,他们的代码干扰了在保存之前强制刷新页面的回调事件。你的代码似乎是正确的。
答案 1 :(得分:0)
嘿,保存和刷新调用是异步的!这就是它立即击中成功处理程序的原因。
您可以尝试使用SDK的SDK.REST.js文件
function updateFunction(entityId) {
var campaignType = Xrm.Page.getAttribute('typecode').getValue();
if (xxx.Forms.hasOwnProperty(campaignType)) {
var entity= {};
entity.typecode= campaignType;
SDK.REST.updateRecord(
entityId,
entity,
entityName, //"Account"
function () {
writeMessage("The record changes were saved");
xxx.redirectToForm(xxx.Forms[campaignType]);
},
null
);
}
}
https://msdn.microsoft.com/en-us/library/gg334427(v=crm.7).aspx
您可以在此处拨打上面updateFunction
的{{1}},然后在onChange
处理程序中,您可以尝试拨打您要拨打的表单。我没有按照你想要的方式尝试过,但请告诉我它是否有效。
也可以查看此链接
https://msdn.microsoft.com/en-us/library/gg334720.aspx#BKMK_entityOnSave