SuccessCallback立即在Xrm.Page.data.save中触发

时间:2015-04-01 13:11:29

标签: javascript dynamics-crm dynamics-crm-2013

我正在编写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);

但是在保存期间,表单更改仍会立即触发。

我做错了什么?

2 个答案:

答案 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