BOS扩展业务服务说明手册复习课程Word格式文档下载.docx
《BOS扩展业务服务说明手册复习课程Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《BOS扩展业务服务说明手册复习课程Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
字段相关的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:
✧序时簿操作Action:
在序时簿操作前置Action之后、BOS内置处理过程(如果有的话)之前触发
✧序时簿操作后置Action:
操作相关的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
接受Action对应的当前字段模板
m_vctClassTypeEntry
只写,KFO.Vector类型。
接受单据分录模板包
m_dctClassType
接受单据属性数据包
GetAction
函数
String类型,返回用户设置的Action表达式
Initial
方法
提供接口给调用者,由其触发配置界面初始化
FormulaCheck
Boolean,检查最终用户设置的表达式是否合法,合法则返回真,BOS会接受用户的设置;
不合法则应该返回假,BOS不会接受用户的设置
下面是代码模版:
Privatem_sActionAsString
PublicPropertyGetAction()AsString
Action=m_sAction
EndProperty
PublicPropertyLetAction(ByValNew_ActionAsString)
m_sAction=New_Action
PublicPropertySetm_dctTableInfo(ByRefNew_TableInfoAsObject)
PublicPropertySetm_Field(ByRefNew_FieldAsObject)
PublicPropertySetm_vctClassTypeEntry(ByRefNew_vctClassTypeEntryAsObject)
PublicPropertySetm_dctClassType(ByRefNew_dctClassTypeAsObject)
PublicFunctionGetAction()AsString
EndFunction
PublicSubInitial()
'
在这里添加Action界面的初始化代码
EndSub
PublicFunctionFormulaCheck()AsBoolean
在这里添加Action函数表达式语法检查。
如果检查通过,返回True;
否则返回False
请注意:
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
BASECLASSEVENT"
Setm_objBaseInterface=objInterface
LISTEVENTS"
Setm_objListInterface=objInterface
CaseElse
EndSelect
EndIf
Catch:
PublicPropertySetDataSrv(ByRefNew_DataSrvAsObject)
PublicFunctionTransAction(_
ByRefstrActionAsString,_
ByRefstrDescriptionAsString,_
OptionalByValstrLanguageAsString="
CHS"
_
OptionalByValblnTransToDescAsBoolean=True)AsLong
翻译Action
PublicFunctionDoAction(ByValstrFunctionAsString,_
ByValdctParamentersAsKFO.Dictionary,_
ByRefdctActionReturnAsKFO.Dictionary)AsLong
执行Action
DimlRetAsLong
ExitFunction
lRet=Err.Number
dctActionReturn("
ErrorDescription"
)=Err.Description
DoAction=lRet
运行组件接口(中间层适用Action):
中间层扩展Action模版
Privatem_dctParaAsKFO.Dictionary
Privatem_dctReturnAsKFO.Dictionary
ByvalcnAsADODB.Connection,_
ExitFunction
1.3.4配置时组件的Licenses
如果扩展Action定义时组件,采用了一些具有Licenses许可要求的控件,则当用户运行时,会出现下面的情况:
如果出现这种情况,需要在组件(控件)的初始化过程中添加Licenses许可。
具体方法参考如下:
PrivateSubUserControl_Initialize()
Licenses.AddProgId,LicenseKey
1.4扩展Action的注册
创建的Action如果需要在BOS中起到预期的作用,必须向BOS进行注册,即向表格ICClassAction中添加数据。
该表关键字段描述:
字段名
长度
为空
FID
int
4
No
编码,唯一,自定义的Action请指定大于100000的编码,避免和BOS内置的FID冲突
FName
varchar
20
名称,系统通过FName和具体的Action关联,必须唯一,且无歧义
FDesc
50
描述
FSyntax
100
语法
FParameter
7000
参数
FType
smallint
2
FSetComponent
Varchar
64
配置Action的控件名,可以为’’
FRunComponent
运行Action的组件名,如果为扩展Action,必须填写
需要注意的是,一个扩展Action,只能支持1个运行组件和1个定义组件。
1.5FType的意义
ICClassAction表中的FType字段,表示了这个Action所具有的属性。
其含义参考下面的值:
值
含义
说明
-1
无效的Action
有效的Action
1
客户端的Action
中间层的Action
有配置界面的Action
8
加载更新的Action
16
值更新的Action
32
保存更新的Action
连续触发的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值域
CancelSeries
布尔值。
默认为False
表示是否需要取消整个Action序列的执行。
如果是一组中间层Action,则会产生事务回滚;
如果是客户端Action,则后续Action将不会被执行
ErrorDescription
字符串。
默认为空。
错误描述。
如果Action执行中出现错误,则此值域包含错误描述。
3
ActionSeriesSharePool
KFO.Dictionary
Action之间共享变量的存储缓冲区
ActionSeriesSharePoolDef
Action之间共享变量的存储缓冲区变量定义
5
Consts
常量定义和值
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
OperationActionExpressions
OperationActionType
OperationObject
引发Action的操作对象数据包
4中间层扩展Action
制作中间层的扩展Action,DoAction接口的dctParamenters参数包包含以下内容:
MiddleAction
MiddleActionExpressions
MiddleActionType
如果Action序列是操作相关的,则包含此值域,否则不包含。
如果Action序列是字段相关的,则包含此值域,否则不包含。
5单据事件相关Action
5.1保存前、保存后事件
DoAction接口的dctParamenters参数包包含以下内容:
ActionKey
FBeforeSaveAction或FAfterSaveAction
5.2删除前、删除后事件
FBeforeDeleteAction或FAfterDeleteAction
ClassTypeID
单据模版号
InterID
单据内码