文档详情

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

ji****72
实名认证
店铺
PPT
325KB
约35页
文档ID:48617056
金蝶基础类(KFO)及其应用_第1页
1/35

KFOKFO及其应用及其应用应用集成部21.KFO的对象模型 2.数据打包对象 3.注册表对象 4.全局对象 5.其他对象提纲提纲31.KFO的对象模型 2.数据打包对象 3.注册表对象 4.全局对象 5.其他对象提纲提纲4KFO的对象模型51.KFO的对象模型 2.数据打包对象 3.注册表对象 4.全局对象 5.其他对象提纲提纲6数据打包对象•Dictionary对象 –DictWord对象 •Vector对象 •LinkedList对象 –Node对象 •IDMap对象 –MapWord对象 •ISortHelper接口7Dictionary对象特点•Dictionary对象是一个数据字典 •字典里可以存放不同的变量,它可以是任一 个单值变量,也可以是一个对象 •在Dictionary对象中主要通过变量名称来进 行索引的 •Dictionary对象可以进行跨进程调度,跨进 程调度可以采用值拷贝调度和引用调度 •Dictionary对象支持系列化和持久化8Dictionary对象的属性•属性 –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 –ByRefMarshal9Dictionary对象的方法•方法 –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) –Function CloneAll() As Dictionary –Function Load(Source) As Boolean –Function Save(Dest) As Boolean10Vector对象的特点•Vector对象相当于一个不定长的向量数组•每一个元素可以是任一个单值变量,也可以是 一个对象 •在Vector对象中主要通过索引来进行数据访 问的 •Vector对象可以进行跨进程调度,跨进程调 度可以采用值拷贝调度和引用调度 •Vector对象支持系列化和持久化11Vector对象的属性•属性 –Property Item(Index As Long) As Variant –Property Size As Long –Property Array As Variant –Property LBound As Long –Property UBound As Long –Property GrowBy As Long –Property ByRefMarshal As Boolean12Vector对象的方法•方法 –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 RemoveAll() –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 –Function Load(Source) As Boolean –Function Save(Dest) As Boolean 13LinkedList对象的特点•LinkedList对象相当于一个单线链表 •每一个节点可以是任一个单值变量,也可以是 一个对象 •在LinkedList对象中主要通过索引或节点前 后关系来进行数据访问的 •LinkedList对象可以进行跨进程调度,跨进 程调度可以采用值拷贝调度和引用调度 •LinkedList对象支持系列化和持久化14LinkedList对象的属性•属性 –Property Item(Index As Long) As Node –Property Count As Long –Property Head As Node –Property Tail As Node –Property ByRefMarshal As Boolean15LinkedList对象的方法•方法 –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 Variant –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 Boolean16Node对象的属性和方法•属性 –Property Container As LinkedList –Property Previous As Node –Property Next As Node –Property Value As Variant •方法 –Function InsertBefore(Value) As Node –Function InsertAfter(Value) As Node –Sub Remove()17IDMap对象的特点•IDMap对象是一个数据字典 •字典里可以存放不同的变量,它可以是任一个单值变 量,也可以是一个对象 •在IDMap对象中主要通过一个整数值来进行数据访问 的 •IDMap对象可以进行跨进程调度,跨进程调度可以采 用值拷贝调度和引用调度 •IDMap对象支持系列化和持久化•与Dictionary对象的区别就在于Dictionary用名称访 问变量,而IDMap实用一个整数值访问元素变量的18IDMap对象的属性和方法•属性 –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) –Sub RemoveAll() –Function CloneAll() As IDMap –Function Load(Source) As Boolean –Function Save(Dest) As Boolean19ISortHelper接口•ISortHelper接口是一个辅助的接口,需要开发人员 自己实现 •ISortHelper接口对象应用于Vector对象的Sort、 BSearch、Search以及LinkedList对象的Search方法 •对于Vector对象的Sort、BSearch、Search以及 LinkedList对象的Search方法,如果调用过程中没有 制定具体的ISortHelper实现,则采用系统默认的单值 比较大小关系,但是我们建议采用自己实现的 ISortHelper,实现自己真正意义上的大小比较•仅有一个方法需要实现: –Function Compare(Item1, Item2) As Long •当Item1 “大于” Item2时返回大于0的数,如1 •当Item1 “等于” Item2时返回等于0的数,如0 •当Item1 “小于” Item2时返回小于0的数,如-1 •示例一20Dictionary对象打包数据的性能问题•以前的性能问题:Dictionary对象在打包数据在20000个以内时 ,人的感觉是能够接受的,但超过20000个时,明显的感觉很慢 ,数据越大,所需要的时间,特别是在记录集转化成指数函数的 方式迅速递增为KFO的Dictionary对象时 •解决的办法:应用InitMaxCount方法和Repeated属性 •InitMaxCount方法:如果需要打包的数据个数超过20000个,最 好先调用InitMaxCount方法,预先一次性分配内存,以提高内存 分配的速度。

在结合应用Repeated属性,大包的数据速度成几十 上百乃上千的倍数提高具体倍数与打包的数据量有关,数据量越 大,倍数越大 •Repeated属性:指明关键字是否允许重复,True表示允许重复 ,False表示不允许,默认值为False如果将Repeated设置为 True,调用者需自己处理关键字不重复的问题•示例二21进程间调度问题•属性ByRefMarshal :在当前进程内是否允许该对象 采用引用调度方式到其他进程,True表示允许,调度 到另外进程后不会生成原对象的副本,False表示不允 许,调度到另外进程后会生成原对象的副本默认值 为False•采用引用调度的场景: –对于进程内的调用,无论ByRefMarshal 为True或是False,此属性 值被忽略,不做任何处理 –在进行跨进程调度的过程中如果对调度后的对象进行修改并希望反 映到原对象时,才有将原对象的属性ByRefMarshal设置为True,否 则应该尽量设置为False,以减少调度的频次和数据流量–常用于插件调试过程中 –…… •示例三22系列化处理•以前在用金蝶核心对象KFO进行编程过程中,碰到 以下两个现象: –当用KFO.Vector、KFO.Dictionary及KFO.LinkedList对象进 行数据打包时,在VB及.NET中的变量查看中均无法看到内 部的数据及其结构,只能看到最上一级的对象所包含的元素 个数,给调试带来不方便性 –在用MSMQ消息对象MSMQMessage、VB的PropertyBag对 象时,直接使用KFO.Vector、KFO.Dictionary及 KFO.。

下载提示
相似文档
正为您匹配相似的精品文档