2015-04-01 85 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