功能间(两个form)数据交互的编程方法
功能间数据交互的编程方法
现在框架具有在两个打开的功能之间进行通讯的机制。通讯是指,一个功能调用另外一个功能的方法,或者传递一些数据,并得到返回结果。比如处置单打开结算单,结算单保存后,将结算单号反填到处置单上去。该机制通过委托实现两个功能之间方法的调用来通讯,支持同步和异步两种方式。框架隐藏了委托以及委托异步调用实现的复杂度。
一、实现机制示意图
两种调用方式:同步和异步。以下是两种调用的示意图。A为调用方,B为被调用方。也就是A功能调用B功能。
1,异步调用
2, 同步调用
二、编程
1,接收方(功能A),数据接收方,如处置单窗口
(1) 实现消息管道方法
从实现上讲,消息管道是接收方或者发送方类的一个方法。
消息管道方法实现数据的接收,包括
- 发送方主动发送过来的数据,或者
- 接收方对自己发送数据的处理结果的反馈数据。(异步模式下)
在消息管道方法里,对接收发送方发送过来的数据,进行处理,并返回处理结果。
管道方法的声明:
Object 方法名称( object sender, string messageId, object message )
Sender:一般是发送方的窗口对象。
messageId:消息唯一标识。正常发送的数据,消息标识为null。如果是接收方返回的数据,则是发送时的消息标识。发送方可以根据该消息标识做特定的处理。
message:发送过来的数据。
(2) 注册消息管道方法到EAFC
注册消息管道,返回管道ID:
Xsoft.UI.MessageChannelDelegete revDelegate = null;
revDelegate = new MessageChannelDelegete(this.MessageChannel); string myChannelID = Xsoft.UI.EafcApp.RegistMessageChannelDelegate(revDelegate, this); |
注册myChannelID要传给功能B,在打开功能B的时候要用到。
注意:在窗口退出的时候,要记得取消注册:
Xsoft.UI.EafcApp.UnregistMessageChannelDelegate(myChannelID );
(3) 打开数据发送方(功能B)
Xsoft.UI.FunctionMgr.FunctionCall("9981", null, this.Handle, FormOpenMode.RESPONSE, myChannelID);
注意:如果用FormOpenMode.RESPONSE(对话框)打开的话,被打开的功能依然显示在一个标签页中,但是只有被打开的功能(9981功能)关闭后,打开9981功能的窗口才可以关闭。并且使用这种打开方式时,一定要传当前窗口的句柄:this.Handle。
2,发送方(功能B),数据发送方,如结算单窗口
(1) 注册消息管道方法到EAFC,并实现之。
在异步调用模式下,管道方法也用来接收数据接收方返回的数据。
注意:发送方的消息管道方法不是必须的,如果使用同步调用,或者虽然使用异步模式但不需要接收数据接收方的返回数据时,不需要注册管道方法。
(2) 获得数据接收方的接收管道ID:RecChannelID。
接收管道ID在发送时要使用。
数据接收方的接收管道ID是由接收方在调用(打开)发送方时,传递给数据发送方的。
在Load方法中:
XmlDocument doc = new XmlDocument();
doc.LoadXml("<arg>" + this.Tag.ToString() + "</arg>"); XmlNode root = doc.DocumentElement; XmlNode arg = doc.DocumentElement.FirstChild; while (arg != null) { switch (arg.Name) { case "MessageReceiver": RecChannelID= arg.InnerXml; break; default: break; } arg = arg.NextSibling; } |
(3) 发送数据到数据接收方:功能A
同步发送
this.textBox1.Text = EafcApp.TransferMessage(RecChannelID, this, this.textBox1.Text) as string;
异步发送
string msgId = Guid.NewGuid().ToString();
EafcApp.AsyncTransferMessage(RecChannelID, myChannelID, this, msgId, data);
MsgId:数据发送时的消息ID,在异步方式下返回信息时,也会传回来,通过它,将回应消息与发送信息进行匹配。
功能间(两个form)数据交互的编程方法的更多相关文章
- android实现两个activity数据交互
android如何实现两个Activity数据交互?主要是根据Intent的携带功能,intent可以携带很多信息,比如Bundle,URI甚至对象(此时要序列化,并且对象里面的成员变量如果是对象,也 ...
- vue仓库、组件间通信、前后台数据交互、前端储存数据大汇总
目录 路由重定向 仓库介绍 vuex插件:可以完成任意组件间信息交互(移动端) 前端存储数据大汇总 前后台交互方式(重点) 前后台数据交互 axios插件:完成前后台ajax交互的 同源策略 - 前后 ...
- 前后端数据交互(八)——请求方法 GET 和 POST 区别
WEB 开发同学一看 get 和 post 请求方法的区别,第一感觉都是 So easy! 学习ajax.fetch.axios时,发送网络请求携带参数时,都需要分别处理get和post的参数.所以我 ...
- ASP.NET - 自定义控件处理页面事件(控件与页面数据交互)的方法
//用委托的方法实现 //控件代码 public delegate void DelegateFunction( string sPageTitle ); private DelegateFuncti ...
- 如何安全的在不同工程间安全地迁移asset数据?三种方法
答:1.将Assets和Library一起迁移2.导出包package3.用unity自带的assets Server功能
- Android进阶之Fragment与Activity之间的数据交互
1 为什么 因为Fragment和Activity一样是具有生命周期,不是一般的bean通过构造函数传值,会造成异常. 2 Activity把值传递给Fragment 2.1 第一种方式,也是最常用的 ...
- 用C++实现网络编程---抓取网络数据包的实现方法
一般都熟悉sniffer这个工具,它可以捕捉流经本地网卡的所有数据包.抓取网络数据包进行分析有很多用处,如分析网络是否有网络病毒等异常数据,通信协议的分析(数据链路层协议.IP.UDP.TCP.甚至各 ...
- Windows窗体间的数据交互
轻松掌握Windows窗体间的数据交互 作者:郑佐 2004-04-05 Windows 窗体是用于 Microsoft Win ...
- 两种方法实现asp.net方案的前后端数据交互(aspx文件、html+ashx+ajax)
一个HTML页面只能显示HTML代码信息,不能与数据库进行数据的交互.asp.net方案提供了网页与数据库交互的方法,这里举出两种:①aspx文件 ②ashx文件+ajax技术 一.创建数据库 这里以 ...
随机推荐
- 柯里化函数之Javascript
柯里化函数之Javascript 定义 依据定义来说,柯里化就是将一个接收"多个"參数的函数拆分成一个或者很多个接收"单一"參数的函数.定义看起来是比較抽象的. ...
- android项目 之 记事本(6)----- 加入手写
想必大家都用过QQ的白板功能,里面主要有两项,一个是涂鸦功能,事实上类似于上节的画板功能,而还有一个就是手写,那记事本怎么能没有这个功能呢,今天就来为我们的记事本加入手写功能. 先上图,看看效果: 看 ...
- javaweb学习路之一--web项目搭建
概述: 工作闲暇时间想要自己搭建一个web项目玩玩,没想到大半天才弄了一个springMVC+mybatis的网站,简直菜的不行,以下记录所有的步骤加深印象 使用环境 1.jdk1.8 2.maven ...
- UILabel显示html文本
NSString * htmlString = @"<html><body> Some html string \n <font size=\"13\ ...
- WebSphere优化
优化WebSphere WebSphere里的profile刚配完,一般默认的heapsize即Xms与Xmx值只有256mb,而IBM WAS是几个J2EE服务器中最吃内存的机器,在布署一些EAR应 ...
- Java安全机制之泛型(JDK1.5)
泛型,类型安全机制. 好处: 1.将运行时期出现问题ClassCastException转移到了编译时期,方便解决问题,减少运行时期的问题,有利于程序的健壮性. 2.避免了强制转换的麻烦 泛型格式: ...
- Oracle 11g New 热补丁
热补丁:概览 对于Oracle 实例上的bug 修复或诊断补丁程序,热补丁 可以执行以下操作: • 安装 • 启用 • 禁用 热补丁:概览 使用热补丁可以安装.启用和禁用 正在运行的 活动Oracle ...
- 用Xamarin 实现园友的 :Android浮动小球与开机自启动
原文:用Xamarin 实现园友的 :Android浮动小球与开机自启动 前两天看园子里有筒子写了个 Android浮动小球与开机自启动 , 感觉这种被 360 玩烂的功能原来是如此的简单啊... ...
- python中的有趣用法
本文给除了python中几个有趣的用法,可以给我们不一样的启发 1: Python中模拟使用C++ 中的 cout << import sys class ostream: def ...
- 数据结构大型实验的记录(done)
用平衡二叉树的知识实现用户登录系统模拟 基本思路: 类:AVLnode (树的节点类) AVLtree (树的基本操作类 包括insert remove search 平衡树的4种旋转) UserIn ...