第4章 业务逻辑
1.1 概述
业务逻辑模块主要用于编写业务逻辑,一般包含三个子模块:action(定义action和procedure)、code(业务逻辑的实现,一般使用java实现,有src,dsrc,lib)、fn(函数定义)。
1.2 Action定义
- 语法:
<action name=" n" global="true" log-enabled="true" procedure=" "> <参数访问权限 name=" " type=" "/> …… </action>
- 说明:
name:action的名称。
global:标识当前action是否是全局的。
log-enabled:标识当前action是否需要记录日志。
procedure:关联的procedure名称。
参数节点:声明参数。参数访问权限包括:private,私有,表示只能在action声明时赋值;protected,保护的,表示可以在process中has-action时赋值;public,公共的,可以接受前台传入的值;permission,权限参数,只能从组织机构上传权限的值
参数节点上的属性:name属性:参数名;type属性:参数类型;value属性:参数的默认值;required属性:标识参数是否必须的;class属性:当type是Object时,可以指定具体的Java类为参数类型。
- 示例:
<action name="startProcessAction" global="true" log-enabled="true" procedure="startProcessProcedure"> <public name="process" type="String"/> <public name="attributes" type="Map"/> <public name="control" type="Object"/> <private name="tokens" type="List"/> </action>
1.3 Procedure定义
- 语法:
<procedure name="" code-model="" code=""> <parameter name="" type=""/> …… </procedure>
- 说明
name:名字。
code:对应的Java,必须指向某个类的静态方法。
code-model:Java代码所在的模块,如果没有指定,默认指向当前模块。
parameter标签:表示一个参数,name属性表示参数名,type属性表示参数类型。parameter节点的个数必须与相应的Java静态方法中的参数个数一致,且Java静态方法中的参数按顺序进行绑定。
- 示例:
<procedure name="bizCreateProcedure" code-model="/system/logic/code" code="BizProcedure.create"> <parameter name="table" type="Table"/> <parameter name="concept" type="String"/> <parameter name="defaultValues" type="Map"/> <parameter name="fnModel" type="String"/> </procedure>
1.4 Fn定义
- 语法:
<fn name="" category="" code-model="" code="" type=""> <label language="zh_CN"></label> <parameter name="" type=""/> …… </fn>
- 说明:
name:fn的名称。
category:分类,用于studio显示。
code-model:Java代码所在的模块,如果没有指定,默认指向当前模块。
code:对应的Java,必须指向某个类的静态方法。
type:返回数据的类型。
parameter标签:参数,name属性表示参数名,type属性表示参数类型。
- 实例
<fn name="toString" category="通用函数" code-model="/system/logic/code" code="CommonFn.toString" type="String"> <label language="zh_CN">转换为字符串</label> <parameter name="obj" type="Object"/> </fn>
1.5 Java代码
Java代码是业务逻辑的实现技术,它主要存放在code模块下,code模块下一般包括以下几个子模块:src、dsrc、classes、dclasses、lib和slib。
src模块:定义静态Java,此模块下的Java必须经过编译才能使用。
dsrc模块:定义动态Java,此模块的Java不需要编译,运行时会自动编译,运行时允许修改;此模块的Java不允许有包名。
lib模块:定义jar文件。
slib模块:定义加密的jar文件。
classes模块:src编译的结果。
dclasses模块:dsrc编译的结果。
在Java代码中,引用别的code模块中的Java类时(同一code模块下的代码可以直接使用),除了必须使用Java的import语法之外,当前code模块必须引用(use或include)对应的code模块,例如:“/demo/logic/code”模块下的某个Java类(无论是src、dsrc、lib或slib子模块中的)需要引用“/demo/common/code”模块下的类“com.justep.demo.CommonUtils”时,必须在“/demo/logic/code”模块中引用“/demo/common/code”模块,即在model.config.xml文件中包括以下的语句:
<use>/demo/common/code</use>