簡體   English   中英

CRM和iframe aspx頁面表單提交

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM