繁体   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