金蝶K3插件编程

发布者:admin 发布时间:2019-10-29 13:28 浏览次数:

  金蝶K3插件编程_计算机软件及应用_IT/计算机_专业资料。金蝶K3插件编程 6.1 插件编程概述 K/3运行平台为K/3 BOS开发的业务单据提供了稳定、标准的运行环境,但为 了实现客户更加个性化的需求和保持K/3 BOS架构的开放性,还为客户化开发提供了插

  金蝶K3插件编程 6.1 插件编程概述 K/3运行平台为K/3 BOS开发的业务单据提供了稳定、标准的运行环境,但为 了实现客户更加个性化的需求和保持K/3 BOS架构的开放性,还为客户化开发提供了插件编程机制,通过 K/3 BOS业务单据和序时簿事件代理组件,把业务单据处理的关键事件接口抛出,客户可以接收这个事件 代理组件,并对组件的抛出事件编程,从而实现个性化的事件处理方法,对K/3 BOS运行平台进行有效的 扩充和扩展。 6.2 插件编程原理 6.2.1 什么是插件 ? ?插件(Plug-Ins)是一种专门为某一软件设计、用于功能扩充的程序。 ? ?通过插件可以实现客户个性化的定制。 ? ?插件不只是被动的接受宿主程序调用,更可以控制宿主程序以完成一些特定功能。 6.2.2 插件原理 插件原理静态图如下所示: 结合上图,可以对插件原理简单描述如下: ? ?以事件驱动为基础: ? ?插件(Plug-Ins)响应主程序发出的事件, ? ?在事件处理过程中完成功能。 ? ?捕获事件: 通过应用程序代理对象(ApplicationProxy) ? ?应用程序代理对象:就是对应用程序(宿主程序)本身的包装 ? ?包含很多事件,在应用程序(Application),也就是宿主程序中激发事件,在插件引用这个 对象就可以响应这些事件。 ? ?相当于架在应用程序和插件之间的桥梁。 ? ?本身不包含任何业务功能,仅仅用来发出事件和传递数据。 结合宿主程序(Application)、程序代理(ApplicationProxy)和插件(Plug-Ins)之间的关系,可 以画出如下的插件原理动态图: 6.2.3 应用程序代理对象(ApplicationProxy) 在插件编程的机制中,最关键的还是应用程 序代理对象(ApplicationProxy),因为这个对象相当于宿主程序和插件之间的桥梁,宿主程序的代言人, 本身并不包括任何业务功能仅仅用来发出事件和传递数据。它发出的事件越多,则插件可以扩展的功能点 越多,对宿主程序的控制则越灵活; 为何不直接引用应用程序本身,而要代理搭桥? ? ?首先,一个应用程序由多个组件(包)组成,如果插件要直接引用它们来捕获事件也可以的。但是这 样的话就不得不引用很多个组件(包),不得不定义很多个接口来传入对象。这会给Plug-Ins开发者一种 支离破碎的感觉。 ? ?更重要的,不把所有的组件及核心算法都暴露给插件的开发者。仅有选择地公布部分组件。 ? ?还有,在VB6.0中,插件将没有机会引用标准Exe的对象库 6.2.4 对插件支持的开发步骤 1. 建立一个应用程序代理(模型)类 class ApplicationProxy { public: event1(); //事件 event2(Parameter,…); //事件 Protect: RaiseEvent1 //发出事件 RaiseEvent2(Parameter,…); //发出事件 … }; 也可提供一些属性:DB连接对象,当前用户… 2. 在应用程序的”关键点”抛出事件。 如(伪码):ApplicationProxy.RaiseEvent 3. 发出事件的方法在应用程序里面里调用 它对于插件的开发者应该是不可见,(不过在VB6.0里面不太容易实现,VB6.0中RaiseEvent必须是 Public,所以会有一种被偷窥的感觉)。 4. 插件捕获到这些事件,这就是插件的核心! 什么是”关键点”这完全取决于你。 很明显”关键点”越多,Plug-Ins能完成的功能就愈多 事件所带的参数完全由你来决定,当然,参数应该和事件的上下文有关。 6.3 客户端插件编程 K/3 BOS为客户端插件的编写,特别封装了一个K/3 BOS运行平台事件代理组件包K3ClassEvents.dll,这 个组件包括了三个接口组件,分别是BaseClassEvent, BillEvent和ListEvents。本节将着重说明如何在 K/3 BOS客户端插件中如何才能接收单据和序时簿事件,并列出单据和序时簿代理组件包含的方法、属性、 事件,以及提供给插件开发者使用的数据包结构。 6.3.1 插件公共入口方法 按如下步骤,客户可以在自己的插件中接收到K/3 BOS抛出的事件和数据包,编写自己的个性化需求代码。 1. 2. 3. 4. 在VB 6.0新建一个ActiveX dll类型的工程,工程的名称可以自由定义。 把工程中默认添加的类名改为一个更贴切的名称。 向工程中引用组件:K3ClassEvents 在类中添加一个BillEvent类型(单据事件代理)的内部变量定义: Private WithEvents m_BillInterface As BillEvent 这样的定义可以让程序员对BillEvent类型的变量中的事件进行编程。 5. 实现K/3 BOS对插件要求的标准入口方法Show()和组件销毁方法: 插件的入口方法,K/3 BOS在检测到有插件时,生成插件实例后,首先就会调用本方法,把单据事件 代理组件BillEvent实例对象按地址传给插件,使插件可以接收代理组件抛出的事件 Public Sub Show(ByVal oBillInterface As Object) Set m_BillInterface = oBillInterface End Sub 在插件被销毁时,确保会同时销毁对代理组件的引用 Private Sub Class_Terminate() Set m_BillInterface = Nothing End Sub 6. 至此,就可以对事件代理组件的事件编程,响应K/3 BOS抛出的单据处理事件(以上的步骤是针对单据 事件代理组件BillEvent编写的,对于序时簿事件代理组件ListEvents,原理一样)。如下的代码, 则是响应抛出的单据处理事件AfterLoadBill: Private Sub m_BillInterface_AfterLoadBill() MsgBox 接收、响应的是单据事件AfterLoadBill, ,金蝶提示 End Sub 综上所述,为了接收K/3 BOS运行平台抛出的事件,并对事件进行编程,必须定义一个类型为事件代 理组件的对象变量,实现公共插件入口方法Show,并且用前面定义的对象变量接收方法Show传入的参数。 6.3.2 单据事件代理组件BillEvent BillEvent接口用来抛出业务单据运行时刻事件和业务单据模板信息 (属性TableInfo, 类型为KFO.Dictionary) 以及业务单据的数据信息(属性Data,类型为KFO.Dictionary)。 本节将详细介绍单据事件代理组件提供给插件开发者使用的数据包,方法、属性以及抛出的事件,对于事 件, 还会列出事件发生的次序。 模板信息和数据信息在ListEvents接口中也会提供给插件开发者, 结构相同, 在这里对TableInfo和Data属性介绍后,在ListEvents一节就不再介绍。


上一篇:D16 Group 发布功能强大的 Godfazer 调制效果器插件    下一篇:什么是插件?