金蝶云星空系统与嵌套网页进行交互实现详解
金蝶云星空系统与嵌套网页进行交互实现详解
一、应用场景:
嵌套网页与金蝶云星空进行数据交互,例如:在被嵌套网页中,点击一个按钮,需要把数据发送到金蝶云星空系统当中,并且,星空系统接收发过来的数据,同时会触发表单插件事件。
二、实现场景的前准备
1、嵌套的网页需利用星空系统的嵌套原理实现方法,进行表单开发并且成功嵌套网页,详细请参照文章:https://vip.kingdee.com/article/13073,该原理是利用kdwebborwser控件在表单中实现嵌套网页,才能进行成功触发当前表单插件
2、如嵌套网页初始打开时,需要星空系统的一些数据,可以在第一点中介绍的表单插件中设置source时,将数据通过url地址参数进行传入(简单实现即可),如嵌套打开网址:http://......../...../?pageid=xxxx&formid=xxxx...
三、实现嵌套网页发送数据至星空系统表单样例
嵌套网页中实现脚本:
1、嵌套网页中需实现定义当前浏览器的postmessage机制(可查资料),简单实现脚本实例:
<script>
(function () {
var _formatOrigin = (function () {
var _reg = /^([\w]+?:\/\/.*?(?=\/|$))/i;
return function (_origin) {
_origin = _origin || '';
if (_reg.test(_origin)) {
return RegExp.$1;
}
return '*';
};
})();
var _$postMessage = function (r, data) {
var e = window.name || "_parent",
t = { _top: window.top, _self: window, _parent: window.parent };
r = t[r];
if (!r)
return;
var a = { data: null, origin: "*", source: r };
r.postMessage(JSON.stringify(data), _formatOrigin("*"));
};
window._$postMessage = _$postMessage;
})();
</script>
2、如:页面绑定一个按钮点击事件:
<script>
$(document).ready(function () {
$("#Button1").bind('click', function () {
var n = {};
n.pageid = "1222232323"; //pageid必须要携带数据,用于星空识别触发单据的表单插件,来源可参考2.2
n.putdata = {};//自定义数据对象
n.putdata.title = "测试";
n.putdata.openurl = "TempfilePath/testsendurl.html";
window._$postmessageargs = JSON.stringify(n);
window._$postMessage("_top", n);
});
});
</script>
3、上面2个实例即可实现嵌套网页将数据传入星空系统并且星空触发表单插件,如:表单接受嵌套post过来的数据,打开某个一个表单
public override void CustomEvents(Core.DynamicForm.PlugIn.Args.CustomEventsArgs e)
{
if (e.Key.EqualsIgnoreCase("$$MessageCustomerEvent") && e.EventName.EqualsIgnoreCase("$$MessageCustomerEvent"))
{
JSONObject data = JSONObject.Parse(e.EventArgs);
DynamicFormShowParameter ShowPara = new DynamicFormShowParameter()
{
FormId = "BOS_YunZhiJiaClub",
//PageId = System.Guid.NewGuid().ToString(),
PageId = Guid.NewGuid().ToString(),
ParentPageId = this.View.Context.ConsolePageId
};
ShowPara.OpenStyle.ShowType = ShowType.MainNewTabPage;
ShowPara.OpenStyle.TagetKey = "FMainTab";
ShowPara.CustomParams.Add("openurl", data.GetValue<string>("openurl", ""));
ShowPara.Caption = data.GetValue<string>("title", "");
this.View.ShowForm(ShowPara);
}
}
4、以上可在Html5端和Silverlight均可实现,但是WPF客户端嵌套网页时,无浏览器Postmessage机制,所以要在客户端中实现,
1)、在星空表单插件的AfterBindData事件中开启客户端时的获取嵌套网页脚本数据机制
if (this.View.Context.ClientType == ClientType.WPF) { this.View.GetControl("FPanelWebBrowse").InvokeControlMethod("StartTime", 500);
}
2)、嵌套网页脚本中需实现2个方法:
<script>
function getpostmessageargs() {
if (window._$postmessageargs)
return window._$postmessageargs;//一定是字符串类型而不是object或者fuc类型,仔细看3.2中的代码
return "";
}
function clearpostmessageargs(param) {
if (window._$postmessageargs) {
window._$postmessageargs = "";
}
}
</script>
四、扩展,星空插件调用嵌套网页中的方法,(目前只实现Html5端,如三端均支持,将继续更新文章)
参考文章:https://vip.kingdee.com/article/182092
金蝶云星空系统与嵌套网页进行交互实现详解
本文2024-09-23 03:47:50发表“云星空知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-k3cloud-161162.html