2015-04-01 58 views
2

我正在编写JavaScript代码,以便根据每个表单上字段的值更改Dynamics CRM中实体的形式。SuccessCallback立即在Xrm.Page.data.save中触发

要更改表单,用户必须更改该字段的值。 然后在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

我使用CRM 2013,遗憾的MSDN链接被指向错误的URL,固定它 – buddybubble 2015-04-01 13:18:31

+0

您可以设置字段的setSubmitedMode永远,所以如果更改,如果不要求保存更改。但是,您不会更新此字段,因此您可以在保存表单之前使用请求更新此字段。 – Sxntk 2015-04-06 19:57:25

回答

1

我在尝试更新进程栏时遇到了类似的问题。

Xrm.Page.data.save().then 
     (function() { 
       window.location.reload(true); 
      }, 
      function() { 
       windows.alert("broken"); 
      }  
     ); 

我强烈建议你尝试应用在香草CRM的逻辑,我什么破逻辑被称为N52规则第三方组件,其代码与回调强制的刷新干扰保存事件之前的页面。你的代码看起来正确。

0

嘿保存和刷新调用是异步的!这就是为什么它立即击中成功处理程序。

什么,你可以尝试使用SDK.REST.js文件进行CRM

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给出onChange并在onSuccess处理程序,你可以尝试给你打电话的形式想打电话。我没有按照你想要的方式尝试它,但是让我知道它是否有效。

检查这个环节出以及

https://msdn.microsoft.com/en-us/library/gg334720.aspx#BKMK_entityOnSave