金蝶基础类(kfo)及其应用

上传人:xzh****18 文档编号:56707664 上传时间:2018-10-15 格式:PPT 页数:35 大小:325KB
返回 下载 相关 举报
金蝶基础类(kfo)及其应用_第1页
第1页 / 共35页
金蝶基础类(kfo)及其应用_第2页
第2页 / 共35页
金蝶基础类(kfo)及其应用_第3页
第3页 / 共35页
金蝶基础类(kfo)及其应用_第4页
第4页 / 共35页
金蝶基础类(kfo)及其应用_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《金蝶基础类(kfo)及其应用》由会员分享,可在线阅读,更多相关《金蝶基础类(kfo)及其应用(35页珍藏版)》请在金锄头文库上搜索。

1、KFO及其应用,应用集成部,提纲,KFO的对象模型 数据打包对象 注册表对象 全局对象 其他对象,提纲,KFO的对象模型,KFO的对象模型 数据打包对象 注册表对象 全局对象 其他对象,提纲,数据打包对象,Dictionary对象 DictWord对象 Vector对象 LinkedList对象 Node对象 IDMap对象 MapWord对象 ISortHelper接口,Dictionary对象特点,Dictionary对象是一个数据字典 字典里可以存放不同的变量,它可以是任一个单值变量,也可以是一个对象。 在Dictionary对象中主要通过变量名称来进行索引的。 Dictionary对象

2、可以进行跨进程调度,跨进程调度可以采用值拷贝调度和引用调度 Dictionary对象支持系列化和持久化,Dictionary对象的属性,属性 Property Value(Name As String) Property Name(Index As Long) As String Property Count As Long Property Modified As Boolean Property MarshalOptions As MarshalOptionsEnum Property Repeated As Boolean ByRefMarshal,Dictionary对象的方法,方法

3、Function Clone() As Dictionary Function GetValue(Name As String, Default) As Variant Function Lookup(Name As String, Value) As Boolean Sub Remove(Name As String) Sub RemoveAll() Sub ResetModified() Sub Append(pDict As Dictionary,ByVal bCloneObject As Boolean) Sub InitMaxCount(nMaxCount As Long) Func

4、tion CloneAll() As Dictionary Function Load(Source) As Boolean Function Save(Dest) As Boolean,Vector对象的特点,Vector对象相当于一个不定长的向量数组 每一个元素可以是任一个单值变量,也可以是一个对象 在Vector对象中主要通过索引来进行数据访问的 Vector对象可以进行跨进程调度,跨进程调度可以采用值拷贝调度和引用调度 Vector对象支持系列化和持久化,Vector对象的属性,属性 Property Item(Index As Long) As Variant Property Si

5、ze As Long Property Array As Variant Property LBound As Long Property UBound As Long Property GrowBy As Long Property ByRefMarshal As Boolean,Vector对象的方法,方法 Function Add(Item) As Long Sub Insert(Index As Long, Item) Sub Append(NewVector As Vector) Sub Remove(Index As Long, nCount As Long = 1) Sub Re

6、moveAll() Function Clone() As Vector Sub FreeExtra() Function BSearch(ItemToSearch, Index As Long, SortHelper As ISortHelper) As Boolean Function Search(ItemToSearch, Index As Long, SortHelper As ISortHelper) As Boolean Sub Sort(First, Last, SortHelper As ISortHelper) Function CloneAll() As Vector F

7、unction Load(Source) As Boolean Function Save(Dest) As Boolean,LinkedList对象的特点,LinkedList对象相当于一个单线链表 每一个节点可以是任一个单值变量,也可以是一个对象 在LinkedList对象中主要通过索引或节点前后关系来进行数据访问的 LinkedList对象可以进行跨进程调度,跨进程调度可以采用值拷贝调度和引用调度 LinkedList对象支持系列化和持久化,LinkedList对象的属性,属性 Property Item(Index As Long) As Node Property Count As

8、Long Property Head As Node Property Tail As Node Property ByRefMarshal As Boolean,LinkedList对象的方法,方法 Function AddHead(Value) As Node Function AddTail(Value) As Node Sub AppendHead(List As LinkedList) Sub AppendTail(List As LinkedList) Function RemoveHead() As Variant Function RemoveTail () As Varian

9、t Sub RemoveAll() Function Clone() As LinkedList Function Search(ItemToSearch, SortHelper As ISortHelper) As Node Function CloneAll() As LinkedList Function Load(Source) As Boolean Function Save(Dest) As Boolean,Node对象的属性和方法,属性 Property Container As LinkedList Property Previous As Node Property Next

10、 As Node Property Value As Variant 方法 Function InsertBefore(Value) As Node Function InsertAfter(Value) As Node Sub Remove(),IDMap对象的特点,IDMap对象是一个数据字典 字典里可以存放不同的变量,它可以是任一个单值变量,也可以是一个对象 在IDMap对象中主要通过一个整数值来进行数据访问的 IDMap对象可以进行跨进程调度,跨进程调度可以采用值拷贝调度和引用调度 IDMap对象支持系列化和持久化 与Dictionary对象的区别就在于Dictionary用名称访问变

11、量,而IDMap实用一个整数值访问元素变量的,IDMap对象的属性和方法,属性 Property Value(ID As Long) As Variant Property IDs(Index As Long) As Long Property Count As Long ByRefMarshal 方法 Function Clone() As IDMap Function GetValue(ID As Long, Default) As Variant Function Lookup(ID As Long, Value) As Boolean Sub Remove(ID As Long) Su

12、b RemoveAll() Function CloneAll() As IDMap Function Load(Source) As Boolean Function Save(Dest) As Boolean,ISortHelper接口,ISortHelper接口是一个辅助的接口,需要开发人员自己实现 ISortHelper接口对象应用于Vector对象的Sort、BSearch、Search以及LinkedList对象的Search方法 对于Vector对象的Sort、BSearch、Search以及LinkedList对象的Search方法,如果调用过程中没有制定具体的ISortHel

13、per实现,则采用系统默认的单值比较大小关系,但是我们建议采用自己实现的ISortHelper,实现自己真正意义上的大小比较 仅有一个方法需要实现: Function Compare(Item1, Item2) As Long 当Item1 “大于” Item2时返回大于0的数,如1 当Item1 “等于” Item2时返回等于0的数,如0 当Item1 “小于” Item2时返回小于0的数,如-1 示例一,Dictionary对象打包数据的性能问题,以前的性能问题:Dictionary对象在打包数据在20000个以内时,人的感觉是能够接受的,但超过20000个时,明显的感觉很慢,数据越大,所

14、需要的时间,特别是在记录集转化成指数函数的方式迅速递增为KFO的Dictionary对象时 解决的办法:应用InitMaxCount方法和Repeated属性 InitMaxCount方法:如果需要打包的数据个数超过20000个,最好先调用InitMaxCount方法,预先一次性分配内存,以提高内存分配的速度。在结合应用Repeated属性,大包的数据速度成几十上百乃上千的倍数提高具体倍数与打包的数据量有关,数据量越大,倍数越大。 Repeated属性:指明关键字是否允许重复,True表示允许重复,False表示不允许,默认值为False。如果将Repeated设置为True,调用者需自己处理

15、关键字不重复的问题 示例二,进程间调度问题,属性ByRefMarshal :在当前进程内是否允许该对象采用引用调度方式到其他进程,True表示允许,调度到另外进程后不会生成原对象的副本,False表示不允许,调度到另外进程后会生成原对象的副本。默认值为False。 采用引用调度的场景: 对于进程内的调用,无论ByRefMarshal 为True或是False,此属性值被忽略,不做任何处理。 在进行跨进程调度的过程中如果对调度后的对象进行修改并希望反映到原对象时,才有将原对象的属性ByRefMarshal设置为True,否则应该尽量设置为False,以减少调度的频次和数据流量。 常用于插件调试过

16、程中 示例三,系列化处理,以前在用金蝶核心对象KFO进行编程过程中,碰到以下两个现象: 当用KFO.Vector、KFO.Dictionary及KFO.LinkedList对象进行数据打包时,在VB及.NET中的变量查看中均无法看到内部的数据及其结构,只能看到最上一级的对象所包含的元素个数,给调试带来不方便性 在用MSMQ消息对象MSMQMessage、VB的PropertyBag对象时,直接使用KFO.Vector、KFO.Dictionary及KFO.LinkedList对象进行处理时提示错误 主要是因为原有KFO的Vector、Dictionary、LinkedList以及IDMap对象没有支持系列化。从K/3 V10.2已经支持 示例四,克隆复制,Clone与CloneAll Clone方法,只对本身一级内数据进行复制,对Vector、Dictionary、LinkedList以及IDMap对象以及其他的可系列化对象的多层次嵌套时,只对Vector、Dictionary、LinkedList以及IDMap对象以及其他的可系列化对象进行简单引用,不是完全意义上的数据复制克隆。 完全意义上的克隆复制,包含内嵌的其他可系列化队象,形成一个全新真正副本。但如果包含的对象不是一个持久化的对象,还是保留其原有的引用关系。 示例五,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 多媒体应用

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号