[英]CRM and iframe aspx page form submission
場景:
我有aspx
頁面,需要在CRM's
商機”表單上進行Iframe
設置。 該aspx
頁具有將數據提交到另一個數據庫的形式。
要求:我想當用戶單擊CRM機會表單上的“保存”按鈕時,aspx頁應將數據存儲在外部數據庫中,而機會表單也應將所有更改保存在CRM
表單上。
我的努力:
到目前為止,我已經在CRM
表單上添加了iframe的aspx頁面。我還使用OnSave事件提交了表單。 但是唯一的問題是表單已提交,但是在執行完整代碼時CRM表單已刷新。 最終結果是, aspx
頁面上的數據未存儲在外部數據庫中。
實現此功能的其他可能方法是什么?
感謝您抽出寶貴的時間閱讀。 先感謝您。
選項1:更好的解決方案是從機會發布事件插件中執行此操作。 這樣可以確保CRM和外部數據之間的數據一致性(如果需要)。 您也可以使用WCF或Web服務將數據傳輸到外部DB。
選項2:如果您必須使用javascript,則可以(1)綁定到商機表單OnSave,(2)阻止表單提交,(3)提交iframe,(4)等到它回來,然后(5)再做一次保存以完成操作。 但是,如果機會保存失敗,這可能會導致CRM和外部數據庫之間的不一致。
這是一個偽代碼示例
function OpportunityOnLoad() {
IFRAME.OnReadyStateChange = function() {
// (4) Check success if possible
// (5) unbind save event and complete the opportunity save
Form.RemoveOnSave(OpportunityOnSave)
Form.Save();
}
//OnLoad
Form.AddOnSave (OpportunityOnSave);
}
function OpportunityOnSave(context) {
//(1) Save clicked
//(2) Stop save
context.PreventDefault();
//(3) Submit iframe form
IFRAME.Submit();
}
編輯:關於Q1:不幸的不是。 關於第二季度:
這是以上概念到Javascript和CRM客戶端API的粗略翻譯。 我沒有測試它,但是它應該使您走上正確的道路。
更改參數以匹配iframe id,url等。另外,由於您使用的是aspx,因此您可能會遇到跨域問題,如果您在瀏覽IE時可以輕松解決該問題,而例如在使用CROME時則不太容易解決。
var IFRAME, SaveMode;
var FORM = Xrm.Page.data.entity;
var UI = Xrm.Page.ui;
var SaveModes = {
1 : "save",
2 : "saveandclose",
59: "saveandnew"
}
var Params = {
IframeBaseUrl : "",
IframeId : "IFRAME_test",
IframeFormId : "form1"
}
function OpportunityOnLoad() {
var sUrlparams = "?"; //add required params after ?
var IframeUrl = Params.IframeBaseUrl + sUrlParams;
IFRAME = UI.controls.get(Params.IframeId);
IFRAME.setSrc(IframeUrl);
IFRAME.Dom = document.getElementById(Params.IframeId);
IFRAME.add_readyStateComplete(OnAfterIfameSave);
FORM.addOnSave(OpportunityOnSave);
}
function OnAfterIfameSave() {
//SubmitSuccess indicates that the form has reloaded after a
//successful submit. You'll need to set this variable inside your iframe.
if (IFRAME.contentWindow.SubmitSuccess) {
FORM.removeOnSave(OpportunityOnSave);
FORM.save(SaveModes[SaveMode]);
}
}
function OpportunityOnSave(execObj) {
var evArgs = execObj.getEventArgs();
evArgs.preventDefault();
SaveMode = evArgs.getSaveMode();
IFRAME.contentWindow.document
.getElementById(Params.IframeFormId)
.Submit();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.