BOS扩展业务服务说明手册复习课程.docx

上传人:b****4 文档编号:5063066 上传时间:2022-12-12 格式:DOCX 页数:15 大小:134.54KB
下载 相关 举报
BOS扩展业务服务说明手册复习课程.docx_第1页
第1页 / 共15页
BOS扩展业务服务说明手册复习课程.docx_第2页
第2页 / 共15页
BOS扩展业务服务说明手册复习课程.docx_第3页
第3页 / 共15页
BOS扩展业务服务说明手册复习课程.docx_第4页
第4页 / 共15页
BOS扩展业务服务说明手册复习课程.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

BOS扩展业务服务说明手册复习课程.docx

《BOS扩展业务服务说明手册复习课程.docx》由会员分享,可在线阅读,更多相关《BOS扩展业务服务说明手册复习课程.docx(15页珍藏版)》请在冰豆网上搜索。

BOS扩展业务服务说明手册复习课程.docx

BOS扩展业务服务说明手册复习课程

 

Kingdee

K/3BOS开发指导手册

BOS扩展服务说明手册

金蝶软件(中国)有限公司研发中心K/3BOS系统开发部

BOS扩展业务服务说明手册

©金蝶软件(中国)有限公司

研发中心K/3BOS系统开发部

RaymondYao2006.02.12

1扩展业务服务(扩展Action)

1.1名词解释

扩展业务服务:

独立、通用的业务处理函数,其参数、返回数据独立于单据、基础资料;为了把业务处理函数和特定的单据绑定,必须在函数的配置界面进行参数配置。

因此,一个完整的扩展业务服务包括参数配置组件和解析运行组件;扩展业务服务实现的功能等同于BOS原有的Action函数,只是允许用户自行扩展。

后文中扩展业务服务又称为扩展Action;

1.2简介

K/3BOS除了内置的一些业务服务函数(Action)外,还支持用户开发自有的Action:

用户可以将自有的业务逻辑封装在这种Action中,并在需要的时候配置到单据的字段(加载更新事件、值更新事件、保存规则)事件、操作事件和单据事件中,以实现自定义的过程。

K/3BOS目前支持的Action,按照运行领域可以分为:

✧客户端Action:

包含适用于单据的Action和序时簿的Action

✧中间层Action

按照触发条件可以分为:

✧字段相关的Action

✧操作相关的Action

✧单据事件相关的Action

同时还有一种特殊的Action:

简单业务Action。

1.2.1字段相关的Action

字段相关的Action,是指当单据字段的值发生改变时会触发的Action。

字段相关的Action包含了所有BOS内置的Action,如:

TakeBaseData、Calculate、UnitExchange、LockByItemTrack、SetDecimal、SetEquation、ShowHideField、LockField、Vertify、LockUsed、LockMenu、VerifyUniquely、TrigAction,关于这些Action的使用,请参考相关手册。

字段相关的Action,需要在字段的加载更新事件、值更新事件、保存规则中进行定义。

目前,字段相关的Action,都是客户端单据运行的Action。

1.2.2操作相关的Action

操作相关的Action,是指当BOS单据的指定操作被用户触发后会执行的Action。

操作相关的Action,需要在BOS单据的操作管理中定义。

目前操作相关的Action,又包含:

✧单据操作前置Action:

在插件BOSBarClick事件发生之后触发

✧单据操作Action:

在单据操作前置Action之后、BOS内置处理过程(如果有的话)之前触发

✧单据操作后置Action:

在BOS内置处理过程(如果有的话)完成之后触发

✧序时簿操作前置Action:

在插件BOSBarClick事件发生之后触发

✧序时簿操作Action:

在序时簿操作前置Action之后、BOS内置处理过程(如果有的话)之前触发

✧序时簿操作后置Action:

在BOS内置处理过程(如果有的话)完成之后触发

操作相关的Action,可以在客户端运行,也可以在中间层运行。

1.2.3单据事件相关的Action

单据事件相关Action,是指BOS单据在执行某些特定事件时触发的Action。

单据事件相关的Action,需要在BOS单据的保存前事件、保存后事件、删除前事件、删除后事件属性中定义。

目前包含:

✧单据保存前:

在插件的BeforeSave事件后发生

✧单据保存后:

在插件的AfterSave事件后发生

✧单据删除前:

在插件的BeforeDel事件后发生

✧单据删除后:

在插件的AfterDel事件后发生

操作相关的Action,目前都是在中间层运行。

1.2.4简单业务Action

所谓简单业务Action,是指符合BOS简单业务规则定义的扩展Action。

这种Action,可能是字段相关的,也可能是操作相关的Action;可以在客户端运行,也可以在中间层运行。

这种Action和其他扩展Action的区别在于:

Action的定义界面是由BOS提供的。

1.3扩展Action的基本属性

所有的扩展Action,应该具有以下属性:

1.3.1运行时组件

所有的扩展Action,都需要有一个运行时组件,在实现特定接口后完成Action的具体操作过程。

这个组件是一个标准的ActiveDll组件。

1.3.2配置时组件

如果扩展Action希望在用户配置时,由用户设定一些选项,并完成定义公式的校验,就需要提供定义时组件。

这个组件是一个标准的ActiveXControl组件。

对于简单业务Action,不需要提供这样的组件,但必须按照指定的参数编写公式,这样,配置界面将由BOS按照公式提供。

1.3.3接口

所有的扩展Action,都必须实现下列接口:

定义组件接口:

函数/属性

类型

详细说明

Action

属性

可读/写,String类型,用来设置/返回用户配置的Action表达式

m_dctTableInfo

属性

只写,KFO.Dictionary类型。

接受单据字段模板包

m_Field

属性

只写,KFO.Dictionary类型。

接受Action对应的当前字段模板

m_vctClassTypeEntry

属性

只写,KFO.Vector类型。

接受单据分录模板包

m_dctClassType

属性

只写,KFO.Dictionary类型。

接受单据属性数据包

GetAction

函数

String类型,返回用户设置的Action表达式

Initial

方法

提供接口给调用者,由其触发配置界面初始化

FormulaCheck

函数

Boolean,检查最终用户设置的表达式是否合法,合法则返回真,BOS会接受用户的设置;不合法则应该返回假,BOS不会接受用户的设置

下面是代码模版:

Privatem_sActionAsString

PublicPropertyGetAction()AsString

Action=m_sAction

EndProperty

PublicPropertyLetAction(ByValNew_ActionAsString)

m_sAction=New_Action

EndProperty

PublicPropertySetm_dctTableInfo(ByRefNew_TableInfoAsObject)

EndProperty

PublicPropertySetm_Field(ByRefNew_FieldAsObject)

EndProperty

PublicPropertySetm_vctClassTypeEntry(ByRefNew_vctClassTypeEntryAsObject)

EndProperty

PublicPropertySetm_dctClassType(ByRefNew_dctClassTypeAsObject)

EndProperty

PublicFunctionGetAction()AsString

EndFunction

PublicSubInitial()

'在这里添加Action界面的初始化代码

EndSub

PublicFunctionFormulaCheck()AsBoolean

'在这里添加Action函数表达式语法检查。

如果检查通过,返回True;否则返回False

EndFunction

请注意:

1、如果是客户端适用的Action,其定义时组件和运行时组件,都应该安装在客户端;

2、如果是中间层适用的Action,其定义时组件仍应该安装在客户端,而运行时组件应安装在中间层;

3、如果同时适用于客户端和中间层的Action,其定义时组件仍应该安装在客户端,而运行时组件应同时安装在客户端和中间层;

运行组件接口(客户端适用Action):

函数/属性

类型

详细说明

SetInterface

方法

接受插件代理组件,单据的模板和数据包都可以从中获取

TransAction

函数

翻译Action表达式.暂保留为用

DataSrv

属性

DoAction

函数

解析、执行Action的入口函数

下面是代码模版:

客户端扩展Action模版

PrivateWithEventsm_objBillInterfaceAsK3ClassEvents.BillEvent

PrivateWithEventsm_objBaseInterfaceAsK3ClassEvents.BaseClassEvent

PrivateWithEventsm_objListInterfaceAsK3ClassEvents.ListEvents

PublicSubSetInterface(ByRefobjInterfaceAsObject)

'设置/传入插件代理组件

OnErrorGoToCatch

IfNot(objInterfaceIsNothing)Then

SelectCaseVBA.UCase$(TypeName(objInterface))

Case"BILLEVENT"

Setm_objBillInterface=objInterface

Case"BASECLASSEVENT"

Setm_objBaseInterface=objInterface

Case"LISTEVENTS"

Setm_objListInterface=objInterface

CaseElse

EndSelect

EndIf

Catch:

EndSub

PublicPropertySetDataSrv(ByRefNew_DataSrvAsObject)

EndProperty

PublicFunctionTransAction(_

ByRefstrActionAsString,_

ByRefstrDescriptionAsString,_

OptionalByValstrLanguageAsString="CHS",_

OptionalByValblnTransToDescAsBoolean=True)AsLong

'翻译Action

EndFunction

PublicFunctionDoAction(ByValstrFunctionAsString,_

ByValdctParamentersAsKFO.Dictionary,_

ByRefdctActionReturnAsKFO.Dictionary)AsLong

'执行Action

OnErrorGoToCatch

DimlRetAsLong

ExitFunction

Catch:

lRet=Err.Number

dctActionReturn("ErrorDescription")=Err.Description

DoAction=lRet

EndFunction

运行组件接口(中间层适用Action):

函数/属性

类型

详细说明

DoAction

函数

解析、执行Action的入口函数

下面是代码模版:

中间层扩展Action模版

Privatem_dctParaAsKFO.Dictionary

Privatem_dctReturnAsKFO.Dictionary

PublicFunctionDoAction(ByValstrFunctionAsString,_

ByvalcnAsADODB.Connection,_

ByValdctParamentersAsKFO.Dictionary,_

ByRefdctActionReturnAsKFO.Dictionary)AsLong

'执行Action

OnErrorGoToCatch

DimlRetAsLong

ExitFunction

Catch:

lRet=Err.Number

dctActionReturn("ErrorDescription")=Err.Description

DoAction=lRet

EndFunction

1.3.4配置时组件的Licenses

如果扩展Action定义时组件,采用了一些具有Licenses许可要求的控件,则当用户运行时,会出现下面的情况:

如果出现这种情况,需要在组件(控件)的初始化过程中添加Licenses许可。

具体方法参考如下:

PrivateSubUserControl_Initialize()

Licenses.AddProgId,LicenseKey

EndSub

1.4扩展Action的注册

创建的Action如果需要在BOS中起到预期的作用,必须向BOS进行注册,即向表格ICClassAction中添加数据。

该表关键字段描述:

字段名

类型

长度

为空

详细说明

FID

int

4

No

编码,唯一,自定义的Action请指定大于100000的编码,避免和BOS内置的FID冲突

FName

varchar

20

No

名称,系统通过FName和具体的Action关联,必须唯一,且无歧义

FDesc

varchar

50

No

描述

FSyntax

varchar

100

No

语法

FParameter

varchar

7000

No

参数

FType

smallint

2

No

类型

FSetComponent

Varchar

64

No

配置Action的控件名,可以为’’

FRunComponent

Varchar

64

No

运行Action的组件名,如果为扩展Action,必须填写

需要注意的是,一个扩展Action,只能支持1个运行组件和1个定义组件。

1.5FType的意义

ICClassAction表中的FType字段,表示了这个Action所具有的属性。

其含义参考下面的值:

含义

说明

-1

无效的Action

0

有效的Action

1

客户端的Action

2

中间层的Action

4

有配置界面的Action

8

加载更新的Action

16

值更新的Action

32

保存更新的Action

64

连续触发的Action

128

有返回值的Action

256

操作类的Action

512

系统内置Action

系统内置Action不允许修改

1024

扩展Action

2048

简单业务Action

4096

字段相关的Action

只能是客户端的Action

8192

事件相关的Action

只能是中间层的Action

需要注意的是:

一个Action可以具有多个属性。

举例:

Action:

TakeBaseDataFType=0+1+4+8+16

1.6Action的执行控制

在BOS中,允许对同一个字段或操作,同时定义多个Action。

这是,我们称之为字段或操作具有“Action序列”。

Action序列中的每个Action,按照定义时的先后次序依次执行。

通过扩展Action接口中的dctActionReturn参数,我们可以控制Action的运行。

dctActionReturn参数包含以下内容:

序号

dctActionReturn值域

说明

1

CancelSeries

布尔值。

默认为False

表示是否需要取消整个Action序列的执行。

如果是一组中间层Action,则会产生事务回滚;如果是客户端Action,则后续Action将不会被执行

2

ErrorDescription

字符串。

默认为空。

错误描述。

如果Action执行中出现错误,则此值域包含错误描述。

3

ActionSeriesSharePool

KFO.Dictionary

Action之间共享变量的存储缓冲区

4

ActionSeriesSharePoolDef

KFO.Dictionary

Action之间共享变量的存储缓冲区变量定义

5

Consts

KFO.Dictionary

常量定义和值

6

其它

Action的交换交换数据空间。

我们也可以通过在这个数据包中增加传递不同的值,来达到Action间的数据传递。

注意:

请不要在Action中将这个数据包上述的几个值域清除,或将整个数据包清空。

否则会产生运行时错误。

2客户端字段相关扩展Action

制作客户端字段相关的扩展Action,DoAction接口的dctParamenters参数包包含以下内容:

值域

说明

FieldAction

当前ActionName

FieldActionExpressions

当前Action的定义表达式

FieldActionType

当前Action的类型

Paramenters

当前Action的参数

Trigger

是否连续执行

SeriesTotal

Action序列的Action总数

ActionSeriesSource

Action序列的触发来源

ActionSeriesType

Action序列的类型

ClassType

ClassTypeEntry

TableInfo

Data

BOSFieldTpl

引发Action的字段的模版数据包

BOSFieldValue

引发Action的字段的值数据包

ItemObj

核算项目对象

3客户端操作相关扩展Action

制作客户端操作相关的扩展Action,DoAction接口的dctParamenters参数包包含以下内容:

值域

说明

OperationAction

当前ActionName

OperationActionExpressions

当前Action的定义表达式

OperationActionType

当前Action的类型

Paramenters

当前Action的参数

Trigger

是否连续执行

SeriesTotal

Action序列的Action总数

ActionSeriesSource

Action序列的触发来源

ActionSeriesType

Action序列的类型

ClassType

ClassTypeEntry

TableInfo

Data

OperationObject

引发Action的操作对象数据包

4中间层扩展Action

制作中间层的扩展Action,DoAction接口的dctParamenters参数包包含以下内容:

值域

说明

MiddleAction

当前ActionName

MiddleActionExpressions

当前Action的定义表达式

MiddleActionType

当前Action的类型

Paramenters

当前Action的参数

SeriesTotal

Action序列的Action总数

ActionSeriesSource

Action序列的触发来源

ActionSeriesType

Action序列的类型

ClassType

ClassTypeEntry

TableInfo

Data

OperationObject

如果Action序列是操作相关的,则包含此值域,否则不包含。

引发Action的操作对象数据包

BOSFieldTpl

如果Action序列是字段相关的,则包含此值域,否则不包含。

引发Action的字段的模版数据包

BOSFieldValue

如果Action序列是字段相关的,则包含此值域,否则不包含。

引发Action的字段的值数据包

ItemObj

如果Action序列是字段相关的,则包含此值域,否则不包含。

核算项目对象

5单据事件相关Action

5.1保存前、保存后事件

DoAction接口的dctParamenters参数包包含以下内容:

值域

说明

MiddleAction

当前ActionName

SeriesTotal

Action序列的Action总数

ActionSeriesSource

Action序列的触发来源

ActionSeriesType

Action序列的类型

ActionKey

FBeforeSaveAction或FAfterSaveAction

ClassType

ClassTypeEntry

TableInfo

Data

5.2删除前、删除后事件

DoAction接口的dctParamenters参数包包含以下内容:

值域

说明

MiddleAction

当前ActionName

SeriesTotal

Action序列的Action总数

ActionSeriesSource

Action序列的触发来源

ActionSeriesType

Action序列的类型

ActionKey

FBeforeDeleteAction或FAfterDeleteAction

ClassTypeID

单据模版号

InterID

单据内码

ClassType

ClassTypeEntry

TableInfo

Data

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1