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