EMOSS2流程引擎开发指南
中博信息技术研究院有限公司
版本历史 版本号 V1.0 更改描述 建立文档 更改日期 2012-7-30 修订人 余志淼 是否基线版本(Y/N) Y 评审记录# 评审通过日期 目 录
1.
概述 ...................................................................... 5
流程引擎说明 ............................................................ 5
流程引擎架构 ............................................................ 5
1.1.
1.2. 2.
开发前准备 ................................................................. 6
建立组织架构视图 ........................................................ 6
公司(CORE_COMPANY) .................................................. 6 部门(CORE_DEPARTMENT) ............................................... 6 员工(CORE_EMPLOYEE) ................................................. 6 用户(CORE_USER) ..................................................... 7 角色(CORE_ROLE) ..................................................... 7 用户流程角色表(CORE_USER_ROLES) ..................................... 8 建立流程数据表 .......................................................... 8 安装流程设计工具 ........................................................ 8 安装JDK ............................................................... 8 安装流程设计工具 ...................................................... 9 将流程编程接口加入到项目代码中 .......................................... 9
2.1.
2.1.1. 2.1.2. 2.1.3. 2.1.4. 2.1.5. 2.1.6. 2.2. 2.3. 2.3.1. 2.3.2. 2.4. 3.
开发指南 .................................................................. 9
3.1. 流程设计工具使用 ........................................................ 9 3.1.1. 新增流程 ............................................................. 10 3.1.2. 设计流程图 ........................................................... 10 3.1.2.1. 流程属性设置 ....................................................... 12 A. 流程属性说明 ............................................................. 12 B. 流程变量定义 ............................................................. 13 C. 流程数据属性 ............................................................. 14 D. 高级属性 ................................................................. 14 3.1.2.2. 流程节点属性设置 ................................................... 15 A. 属性说明 ................................................................. 16 B. 按钮信息 ................................................................. 17 C. 审批用户范围设置 ......................................................... 18 D. 转办用户范围设置 ......................................................... 21 E. 传阅用户范围设置 ......................................................... 22 3.1.2.3. 连接属性设置 ....................................................... 23 3.1.3. 保存流程图 ........................................................... 25 3.1.4. 设置流程图 ........................................................... 25 3.1.5. 删除流程图 ........................................................... 25 3.1.6. 导出流程图 ........................................................... 25 3.1.7. 导入流程图 ........................................................... 26 3.2. 流程编程接口使用 ....................................................... 26 3.2.1. 流程引擎数据源初始化 ................................................. 26 3.2.1.1. 不使用连接池方式: ................................................. 26 3.2.1.2. 使用C3P0连接池方式 ................................................. 26 3.2.2. 流程配置的加载 ....................................................... 27 3.2.3. 用户登录的改造(可选) ............................................... 27 3.2.4. 流程处理 ............................................................. 28 3.2.4.1. 点击发起流程按钮: ................................................. 28 3.2.4.2. 点击审批通过按钮: ................................................. 29 3.2.4.3. 服务端实现业务处理 ................................................. 29
3.2.5. 常用JAVA类说明 ....................................................... 30 3.2.5.1. COM.ZBITI.CORE.CONFIG.WF.WORKFLOWCOMPONENT ................................ 30 3.2.5.2. COM.ZBITI.CORE.CONFIG.WF.WORKFLOWCONFIGPROVIDER ............................ 30 3.2.5.3. COM.ZBITI.CORE.CONFIG.WF.WORKFLOWOBJECT .................................. 31 3.2.5.4. COM.ZBITI.CORE.CONFIG.WF.WFIMAGE ........................................ 31 3.2.5.5. COM.ZBITI.CORE.VO.PARAMETEROBJECT ....................................... 31 3.2.5.6. COM.ZBITI.CORE.CONFIG.WF.WORKFLOWPROXY ................................... 31 3.2.5.7. COM.ZBITI.CORE.COMPONENTS.USERCOMPONENT ................................... 32 3.2.5.8. COM.ZBITI.CORE.RESOURCEPOOL ............................................ 32 3.2.5.9. COM.ZBITI.CORE.CONSTS.TABLES ............................................ 32 3.2.5.10. COM.ZBITI.CORE.CONSTS.SEQUENCES ......................................... 32 4.
附件 ..................................................................... 33
1. 概述
1.1. 流程引擎说明
EMOSS2流程引擎是EMOSS2开发平台的一部分,主要完成流程发起,审批,监控等功能,是较轻量级的流程引擎,但完全可以满足企业的业务流程需求。流程引擎目前支持的数据库有:oracle、mysql、sybase。主要的组成部分有:
1,
组织架构视图:流程引擎需要基于组织架构才能实现审批人的选择、工作项的生成、流转条件的判断等。
2, 3,
流程数据表:用于保存流程图、流程实例、工作项等流程相关的数据。 流程设计工具:用于设计流程图,分配不同的版本给不同的公司。JDK要求必须是1.6及以上。
4,
流程编程接口:提供流程的发起、审批、参与者计算等接口给外部程序调用。主要是jar包形式,JDK的版本必须是1.5及以上。
1.2. 流程引擎架构
外部Jsp、java程序 组织架构视图 流程设计工具 流程编程接口 流程数据表:流程图 流程数据表:流程实例、工作项... 2. 开发前准备
2.1. 建立组织架构视图
根据字段列表建立各个视图。字段列表只列出必要字段,也可以根据需要扩展其他字段。
2.1.1. 公司(CORE_COMPANY)
字段 COMPANY_ID COMPANY_CID COMPANY_CODE P_COMPANY_ID COMPANY_NAME SORT_ID IS_LAST STATE
字段名称 公司ID 公司变更序号 公司编码 上级公司ID 公司名称 排序号 是否最新记录 是否有效 类型 NUMBER(16) NUMBER(16) VARCHAR2(50) NUMBER(16) VARCHAR2(200) NUMBER(16) NUMBER(1) NUMBER(1) 说明 公司的唯一标识 固定值:1 可空 固定值:1 固定值:1 2.1.2. 部门(CORE_DEPARTMENT)
字段 DEP_ID DEP_CID COMPANY_ID COMPANY_CID DEP_CODE P_DEP_ID DEP_NAME SORT_ID IS_LAST STATE
字段名称 部门ID 部门变更序号 所属公司ID 所属公司变更序号 部门编码 上级部门ID 部门名称 排序号 是否最新记录 是否有效 类型 NUMBER(16) NUMBER(16) NUMBER(16) NUMBER(16) VARCHAR2(50) NUMBER(16) VARCHAR2(200) NUMBER(16) NUMBER(1) NUMBER(1) 说明 部门的唯一标识 固定值:1 关联到CORE_COMPANY 固定值:1 可空 固定值:1 固定值:1 2.1.3. 员工(CORE_EMPLOYEE)
字段 EMP_ID EMP_CID DEP_ID 字段名称 员工ID 员工变更序号 所属部门ID 类型 NUMBER(16) NUMBER(16) NUMBER(16) 说明 员工的唯一标识 固定值:1 关联到CORE_DEPARTMENT DEP_CID COMPANY_ID COMPANY_CID EMP_CODE EMP_NAME SORT_ID IS_LAST STATE 所属部门变更序号 所属公司ID 所属公司变更序号 员工编码 姓名 排序号 是否最新记录 是否有效 NUMBER(16) NUMBER(16) NUMBER(16) VARCHAR2(50) VARCHAR2(50) NUMBER(16) NUMBER(1) NUMBER(1) 固定值:1 关联到CORE_COMPANY 固定值:1 可空 固定值:1 固定值:1 2.1.4. 用户(CORE_USER)
字段 USER_ID DEP_ID COMPANY_ID EMP_ID MAIN_ROLE_CODE LOGIN_ID USER_NAME SORT_ID STATE
字段名称 用户ID 所属部门ID 所属公司ID 所属员工ID 主要角色编码 登录账号 用户姓名 排序号 是否有效 类型 NUMBER(16) NUMBER(16) NUMBER(16) NUMBER(16) VARCHAR2(30) VARCHAR2(50) VARCHAR2(50) NUMBER(16) NUMBER(1) 说明 用户的唯一标识 关联到CORE_DEPARTMENT 关联到CORE_COMPANY 关联到CORE_EMPLOYEE 该用户的主要角色(权限角色) 该用户登录到系统的账号 可以与员工姓名一致 可空 固定值:1 2.1.5. 角色(CORE_ROLE)
字段 ROLE_CODE ROLE_NAME COMPANY_ID 字段名称 角色编码 角色名称 所属公司ID 类型 VARCHAR2(30) VARCHAR2(50) NUMBER(16) 关联到CORE_COMPANY。空表示全部公司可使用的角色。 0:权限角色;1:流程角色;2:权限流程角色。默认为:2。 可空 可空 1:是,0:否 说明 角色的唯一标识 ROLE_TYPE 角色类型 CAHR(1) SORT_ID PARENT_CODE IS_LEAF 排序号 父角色编码 是否末级 NUMBER(16) VARCHAR2(30) CAHR(1) IS_INNER
是否内置 CAHR(1) 1:是,0:否。默认为:0。 2.1.6. 用户流程角色表(CORE_USER_ROLES)
字段 ROLE_CODE USER_ID
字段名称 角色编码 用户ID 类型 VARCHAR2(30) NUMBER(16) 说明 角色的唯一标识 用户的唯一标识 2.2. 建立流程数据表
根据《流程数据表.pdm》建立各个流程数据表。各数据表说明如下:
1) CORE_WF_CONFIG:流程配置表。用于保存设计工具设计出来的流程图。 2) CORE_WF_INSTANCE:流程实例表。用于保存系统中发起的流程实例。
3) CORE_WF_INSTANCE_VARIABLE:流程实例变量表。用于保存每个流程实例的变量。 4) CORE_WF_WORKITEM:流程工作项表。用于保存用户发起一个流程或审批完一个待办后,
产生出的待办工作项。
5) CORE_WF_WORKITEM_RELATION:工作项的转移关系表。用于保存每个工作项的来源工作
项。
6) CORE_WF_REASSIGN_RELATION:流程委托关系表。用于保存用户委托其他用户处理自己
的流程待办。
7) CORE_SYSTEM_BIG_DATA:系统专用大数据表。用于保存流程图的XML源代码。 8) 序列:SEQ_COMMON_BASE,长度为16。用于设置CORE_WF_INSTANCE、CORE_SYSTEM_BIG_DATA
等表的主键值。如果数据库不支持序列,则要创建平台的序列表(CORE_SEQUENCE): 字段 SEQ 字段名称 序列名 类型 VARCHAR2(30) 说明 序列唯一标识,流程引擎使用:SEQ_COMMON_BASE 初始值为:1 MAX_ID
当前值 NUMBER(16) 2.3. 安装流程设计工具
2.3.1. 安装JDK
流程设计工具需要JDK1.6或以上版本才能运行。安装完之后要指定JAVA_HOME,确认当前使用的JDK是1.6版本。
2.3.2. 安装流程设计工具
1),将“流程设计工具”目录拷贝到一个无空格的路径中,。 2),运行“imp_run32.bat”(32位操作系统使用)或“imp_run64.bat”(64位操作系统使用)。 点击主界面上的“设置”按钮,设置数据库连接(流程数据表所在的数据库),如下图所示:
点击“确认”即完成了流程设计工具的设置。
2.4. 将流程编程接口加入到项目代码中
将“流程编程接口”目录下的文件拷贝到项目中即可。文件目录已经是安装web工程的要求建立,如有特殊目录要求请自行修改。流程编程接口需要JDK1.5或以上版本才能运行。
3. 开发指南
3.1. 流程设计工具使用
运行流程设计工具“imp_run32.bat”或“imp_run64.bat”。点击菜单“流程-流程自定义”即可进入流程设计界面。如下图所示:
界面上部是工具条。左侧的上面一个列表是系统中已存在的流程图,下面一个列表是每个流程图的明细版本(每个流程图可以有多个版本,每个版本的流程代码都相同)。界面的右侧是流程图的设计区域。
3.1.1. 新增流程
点击界面工具条的“新增”按钮,弹出“新增流程”对话框:
输入新流程代码(流程图的标识)和新流程名称,点击“确定”即可创建一个新流程图(新创建的流程版本为1,只有“开始”、“结束”2个节点)。 在界面的流程列表中可以查询到刚创建的流程。
3.1.2. 设计流程图
选择左侧的流程图列表中的一个流程图,在下面的“版本明细”列表就会显示该流程图的所有版本。选择需要设计的一个版本,在右侧的流程设计区域即可显示该版本的流程图。如图所示:
流程设计区域的上部是流程图设计的工具条。左侧是流程图中的节点列表以及连接(节点之间的连接线)列表。 操作说明:
1) 点击工具条的“开始”按钮,再点击流程图指定地方,可以在指定地方增加一个“开始
节点”。一个流程图只能有一个“开始节点”。
2) 点击工具条的“中间”按钮,再点击流程图指定地方,可以在指定地方增加一个“中间
节点”。连续点击流程图,可以连续增加“中间节点”。点击右键可以返回到“选择”状态。
3) 点击工具条的“结束”按钮,再点击流程图指定地方,可以在指定地方增加一个“结束
节点”。
4) 点击工具条的“连接”按钮,再点击流程图指定的一个节点,鼠标左键不放,将连线连
接到另外一个节点,放开左键,即可在两个节点中增加一个连接线。连续的操作可以连续增加连接线。点击右键可以返回到“选择”状态。 5) 点击工具条的“选择”按钮,可以使鼠标返回到“选择”状态(可以选择节点或连接线)。 6) 选中流程图中的节点或连接线(可以使用鼠标选择一个区域中的节点或连接线),再点
击工具条的“删除”按钮,可以删除选中的节点或连接线。
7) 点击工具条的“刷新”按钮,可以刷新当前流程图(有时候由于画布没有重画,会导致
流程图显示不全)。
8) 点击工具条的“查看XML”按钮,弹出当前流程图的XML内容窗口:
在XML源代码窗口中文本框显示的是当前流程图的XML内容。
可以修改XML或拷贝其他版本流程图的XML,然后点击“设置XML”按钮来改变当前流程图。设置的XML中的流程代码值必须与当前流程图的代码值一致,并且版本不能低于当前流程图的版本。
3.1.2.1. 流程属性设置
在流程图的空白地方双击或者点击工具条的“属性”按钮,弹出当前流程图的属性设置窗口:
A. 流程属性说明
流程编码:即当前流程图的代码,不可修改。
版本号:即当前流程图的版本号,不可修改。每次保存版本号自动递增(也可以使
用覆盖保存,不增加版本号)。
流程名称:当前流程的名称,每个版本的流程图名称可以不一样。 有效天数:流程引擎只记录该属性,尚未未使用。
待办URL:显示一个流程待办工作项时,使用的页面URL。
待办查询URL:查询该流程的待办工作项时,使用的页面URL。 已办URL:显示一个流程已办流程实例时,使用的页面URL。 已办查询URL:查询该流程的已办流程实例时,使用的页面URL。
我的申请查询URL:查询该流程的“我的申请”流程实例(登录人发起的流程实例)时,使用的页面URL。
已办界面数据权限:可以是:none-不控制权限,login-使用当前登录用户的权限,
starter-使用发起人的权限。该属性只在EMOSS2平台使用。 流程结束方式:可以设置有几个人(或者百分之几的人)审批通过达到结束节点时,
流程算是正式结束,剩下未审批的工作项不再需要审批。 说明:记录流程图的说明信息。
B. 流程变量定义
在“流程变量”选项卡,可以定义流程变量(流程发起的时候可以设置流程变量的值,供业务操作或流程图使用)。流程变量定义如下图:
可以在列表中直接修改已有的变量。点击“增加”按钮,可以在变量列表中增加一个流程变量。选择列表中的某个流程变量,再点击“删除”按钮,可以删除该变量。注:datetime类型的变量暂不支持。
C. 流程数据属性
在“流程数据”选项卡,可以定义流程的数据相关属性。如下图所示:
1) 流程主题SQL:是发起流程或审批待办工作项时流程引擎调用的SQL,用来更新流程
实例表的主题字段(CORE_WF_INSTANCE.SUBJECT)。
2) 流程金额SQL:是发起流程或审批待办工作项时流程引擎调用的SQL,用来更新流程
实例表的金额字段(CORE_WF_INSTANCE.MONEY)。
3) 流程数据表:是EMOSS2平台使用的。在JAVA代码中使用DDProxy类增删改查数据时,
会自动设置PROCESS_ID(流程实例ID)和AUDIT_STATUS(审批状态)字段。
D. 高级属性
在“高级”选项卡,可以设置流程的一些高级属性。如下图所示:
1) 流程结束/否决时发送消息的设置:可以在流程结束或被否决时向流程相关的用户发
送消息(通知某个流程已经结束/被否决)。该设置在EMOSS2平台才使用。 2) 常用审批意见:可以设置审批该流程时使用的常用审批意见有哪些。该设置在EMOSS2
平台才使用。
3) 流程业务组件:用来设置一个JAVA类,重写父类
(com.zbiti.core.config.wf.WorkFlowComponent)的某些方法,可以将流程的状态变化与业务操作的联系起来。如:审批通过后要做某些业务处理,可以重写父类的afterApprove方法实现。流程结束后要做某些业务处理,可以重写父类的
instanceEnded方法实现...等。具体的父类说明可以参见“JAVA_DOCS”目录下的javaDoc。
3.1.2.2. 流程节点属性设置
双击流程图中的节点或选择节点列表中的某个节点,点击工具条的“属性”按钮,弹出选中节点的属性设置窗口:
A. 属性说明
节点ID:节点在当前流程图中的唯一标识,创建节点时会自动生成。 节点名称:该节点的显示名称。
X坐标:流程节点在流程图的X坐标值。 Y坐标:流程节点在流程图的Y坐标值。 长度:流程节点在流程图中显示的长度。 宽度:流程节点在流程图中显示的宽度。
有效天数:流程引擎只记录该属性,尚未未使用。
待办URL:显示该节点的一个流程待办工作项时,使用的页面URL。如果未设置,则使用流程的“待办URL”属性。
数据权限:可以是:none-不控制权限,login-使用当前登录用户的权限,starter-使
用发起人的权限。该属性只在EMOSS2平台使用。
审批方式:可以设置有几个人(或者百分之几的人)审批通过(负数表示回退,如人数
设置-1表示有一个人退回,百分比设置-33表示有33%的人退回)时,该节点算是审批通过(被退回),剩下未审批的工作项不再需要审批。
可以取回:该节点的工作项审批通过后是否可以被取回。
可以自动提交:该节点的工作项与前一节点的工作项属于同一个人的时候,如果前一节
点的工作项被审批通过了,该节点的工作项是否可以自动设置为审批通过。 审批后是否提示打印:该节点的工作项被审批通过后是否会提示打印流程。该属性只在
EMOSS2平台使用。 常用审批意见:可以设置审批该节点的工作项时使用的常用审批意见有哪些,审批时的
常用审批意见也包含流程属性的“常用审批意见”。该设置在EMOSS2平台才使用。 说明:记录流程节点的说明信息。
B. 按钮信息
在“按钮信息”选项卡,可以定义该节点的审批界面有哪些审批按钮。如下图:
“驳回”、“退回发起人”、“否决”、“废弃”按钮每个界面只能有一个,其中“废弃”按钮只能设置在“发起节点”。
“批量审批使用的按钮”用于指定一个审批通过的按钮,当使用批量审批时,相当于点击该按钮。
“批量驳回使用的按钮”用于指定一个驳回的按钮,当使用批量驳回时,相当于点击该按钮。 点击“添加”按钮,弹出添加按钮对话框:
在窗口上填写必要的信息:按钮ID、标题、显示顺序、是否可见后点击“确认”即可添加一个审批按钮。注:按钮ID在一个节点中不能重复。
双击按钮列表中的某个按钮或者点击“编辑”按钮,弹出该按钮的编辑窗口。与添加窗口一样。
点击“删除”按钮,可以删除按钮列表中选中的按钮。
C. 审批用户范围设置
在“审批用户范围”选项卡,可以定义该节点的审批用户有哪些。如下图:
待办人员选择方式:指提交给该节点时,选择人员是单选还是多选。“自动全选”是指
选择全部指定范围的用户,“自动选择第一个”是指在指定范围的用户中选择第一个用户(用户是根据CORE_SUER的SORT_ID字段排序的)。 SQL说明:
C(XXX)表示公司编码为XXX的公司,流程引擎会转换为SQL条件:
C.COMPANY_CODE=’XXX’(C是CORE_COMPANY的别名); D(XXX)表示部门编码为XXX的部门,流程引擎会转换为SQL条件:D.DEP_CODE=’XXX’ (C
是CORE_DEPARTMENT的别名);
U(XXX)表示用户登录账号为XXX的用户,流程引擎会转换为SQL条件:
U.LOGIN_ID=’XXX’(U为CORE_USER的别名); R(XXX)表示角色编码为XXX的角色,流程引擎会转换为SQL条件:UR.ROLE_CODE=’XXX’
(UR为CORE_USER_ROLES的别名);
{starter:XXX}或{currentUser:XXX}表示取发起人或当期用户的XXX属性的值。XXX可
以是DepartmentCode、ParentDepartmentCode、CompanyCode、ParentCompanyCode、MainRoleCode、loginId之一,也可以是company_YYY、department_YYY表示公司或部门的某个字段(YYY字段)的属性值。 {XXX}表示取流程变量XXX的值。
SQL示例:
C({starter:CompanyCode}) AND D({starter:DepartmentCode}) AND R(BMFZR)将转换为(设发起人公司编码为A1001,发起人部门编码为A1001_01):
C.COMPANY_CODE=’A1001’ AND D.DEP_CODE=’A1001_01’ AND UR.ROLE_CODE=’BMFZR’
点击“公司”按钮将弹出公司编码的选择窗口,如下图所示:
点击“部门”按钮将弹出部门编码的选择窗口,如下图所示:
点击“用户”按钮将弹出用户账号的选择窗口,如下图所示:
点击“角色”按钮将弹出角色编码的选择窗口,如下图所示:
点击弹出窗口的“确定”按钮,即可以在SQL文本框中光标位置插入相应的SQL。
D. 转办用户范围设置
在“转办用户范围”选项卡,可以定义该节点的工作项可以转交给哪些用户处理。如下图:
SQL的设置参照“审批用户范围设置”。
E. 传阅用户范围设置
在“传阅用户范围”选项卡,可以定义该节点的工作项可以传阅给哪些用户查看。如下图:
SQL的设置参照“审批用户范围设置”。
3.1.2.3. 连接属性设置
双击流程图中的连接或选择连接列表中的某个连接,点击工具条的“属性”按钮,弹出选中连接的属性设置窗口:
设置该连接的“转移条件”,即满足这个条件时,流程会从该连接的“源节点”提交到“目标节点”。
点击“添加”参数,弹出“流程参数”选择窗口:
可以选择流程中定义的流程变量作为参数,也可以选择发起人\\当前提交人的某个属性作为参数,也可以使用当前审批界面的按钮(源节点定义的按钮,批量审批或批量退回时的按钮使用节点“按钮信息”的“批量审批时使用的按钮”或“批量驳回时使用的按钮”)作为参数。
{XXX}表示一个string型的参数,{n:XXX}表示一个number型的参数,{b:XXX}表示一个bool型的参数。
3.1.3. 保存流程图
点击工具条上的“保存”按钮可以保存当前流程图,并且自动将当前流程图的版本递增
(所有同一编码的流程版本最大值加1),即会生成一个新版本的流程图(如果当前流程版本没有被使用则把当前流程图删除)。
点击工具条上的“覆盖保存”按钮可以保存当前流程图,并且流程版本不变。 流程图保存到CORE_WF_CONFIG表中,实际的XML代码保存在CORE_SYSTEM_BIG_DATA表中,
通过CORE_WF_CONFIG的DATA_ID与CORE_SYSTEM_BIG_DATA的DATA_ID关联。
3.1.4. 设置流程图
双击流程版本明细列表中的某个版本或点击工具条上的“设置”按钮,弹出流程设置窗口:
在窗口上可以设置该版本启用时间(有效开始时间)、所属公司(如果是父子公司,可以只设置父公司,子公司将使用父公司的流程图)和状态。 要发起某个编码XXX的流程时,流程引擎检查当前CORE_WF_CONFIG的WF_CODE=’XXX’并且未停用的所有版本,按照有效开始时间倒序,取得当前登录人所在公司能使用(流程图的所属公司为本公司或上级公司或为空的)的最新(有效开始时间小于当前时间)流程图版本,使用该版本发起流程。
3.1.5. 删除流程图
选择流程版本明细中的某个流程版本,点击工具条的“删除”按钮,即可删除该流程版本。
3.1.6. 导出流程图
选择流程列表中的某几个流程图或流程版本明细列表中的某几个版本,点击工具条的“导出”按钮,即可将选中的流程图或版本导出成zip文件。
3.1.7. 导入流程图
点击工具条的“导入”按钮,选择导出流程的zip文件,即可将文件中的所有流程导入到当前数据库。注:导入的流程启用时间(有效开始时间)为当前时间。
3.2. 流程编程接口使用
要使用流程编程接口,必须将“流程编程接口”目录下的代码加入到项目代码中,文件的目录结构可以根据实际需要修改。
3.2.1. 流程引擎数据源初始化
要使用流程引擎首先要初始化一个专用的数据源,该数据源为流程配置加载、组织架构信息获取、流程图片生成等功能使用。数据源的初始化示例代码如下:
3.2.1.1. 不使用连接池方式:
...
import com.zbiti.core.util.db.DataSource; import com.zbiti.core.util.db.DirectFactory; ...
DirectFactory f = new DirectFactory();
Properties properties = new Properties();
properties.setProperty(\"jdbc.driver\“oracle.jdbc.driver.OracleDriver”); properties.setProperty(\"jdbc.url\“jdbc:oracle:thin:@192.168.1.1:1521:orcl”); properties.setProperty(\"jdbc.username\“test”); properties.setProperty(\"jdbc.password\“1”); f.init(properties, DataSource.CORE_DATASOURCE);
DataSource.addDBConnectionFactory(DataSource.CORE_DATASOURCE, f); ...
3.2.1.2. 使用C3P0连接池方式
...
import com.zbiti.core.util.db.DataSource; import com.zbiti.core.util.db.C3P0Factory; ...
C3P0Factory f = new C3P0Factory();
Properties properties = new Properties();
properties.setProperty(\"jdbc.driver\oracle.jdbc.driver.OracleDriver”); properties.setProperty(\"jdbc.url\1.1:1521:orcl”); properties.setProperty(\"jdbc.usernameest”); properties.setProperty(\"jdbc.password\1”); properties.setProperty(\"maxPoolSize\10”); properties.setProperty(\"initPoolSize\1”); properties.setProperty(\"waitTimeout\10000”); properties.setProperty(\"maxIdleTime\1000000”); f.init(properties, DataSource.CORE_DATASOURCE);
DataSource.addDBConnectionFactory(DataSource.CORE_DATASOURCE, f); ...
3.2.2. 流程配置的加载
流程配置保存在CORE_WF_CONFIG表中,在系统启动时或流程图被修改后,必须重新加载流程配置。需要执行的代码如下: ...
com.zbiti.core.config.wf.WorkFlowConfigProvider.load(); ...
3.2.3. 用户登录的改造(可选)
流程引擎使用com.zbiti.core.components.User保存登录用户信息,可以在用户登录的时候创建com.zbiti.core.components.User实例保存在session中,这样不需要每次与流程引擎交互时都创建一次com.zbiti.core.components.User。登录时执行的示例代码如下:
import com.zbiti.core.components.User;
import com.zbiti.core.components.UserComponent; ...
User u = UserComponent.getUser(\"123456\");//123456为CORE_USER的USER_ID u.setLogined(true);
request.getSession().setAttribute(\"KEY_USER_BIND_SESSION\...
3.2.4. 流程处理
EMOSS2流程引擎提供了流程处理的封装源代码(WFInvoker.js,WFInvoker.jsp,WFSelectUsers.jsp,WFInvoker.java...),各项目可以根据自己的需要做一定的修改。 流程处理的一次典型过程如下: 5:选择审批人或转办人 (该步骤可能是自动完成) 客户端(js、jsp) 1:调用doXXX方法 发起或审批流程 SelectUsers.jsp或 SelectUsers2.jsp WFInvoker.js 6:AJAX提交(已选 2:AJAX提交 择审批人或转别人) 8:返回JSON格式的WFInvoker.jsp 4:返回JSON格式的 正式处理结果 预处理结果 WFInvoker.java 7:正式处理:保存 3:预处理:计算流流程变量、发起流下一结点及 程变量、程、生成新待办... 审批参与人... 流程业务组件 XXX.java
以下给出了发起和审批通过的示例代码:
3.2.4.1. 点击发起流程按钮:
...
//发起test1流程
var datas = zbiti.WFInvoker.doStart(“test1”,”form1”); if(datas) {
alert(“发起成功,流程ID为:”+datas.instanceId); }
3.2.4.2. 点击审批通过按钮:
...
//审批通过工作项ID为111
var datas = zbiti.WFInvoker.doApprove(“111”,”form1”); if(datas) {
alert(“审批成功!”); }
3.2.4.3. 服务端实现业务处理
... /**
*test1流程的业务组件 */
public class Test1WFComponent extends WorkFlowComponent {
public Test1WFComponent(DBConnection dbc, ParameterObject po, WorkFlowObject wfo, String instanceId, String workItemId, String nodeId) {
super(dbc, po, wfo, instanceId, workItemId, nodeId); } /**
* 计算流程的变量 */
public Map Map /** * 流程发起 */ public void afterStart(List } /** * 流程被否决 */ public void instanceTerminated() throws Exception { super.instanceTerminated(); //TODO something... } /** * 流程审批结束 */ public void instanceEnded() throws Exception { super.instanceEnded(); //TODO something... } /** * 审批通过后 */ public void afterApprove(List if(\"CWSH\".equals(this.currentNodeId)){ //TODO something... } } 3.2.5. 常用JAVA类说明 3.2.5.1. com.zbiti.core.config.wf.WorkFlowComponent 该类是流程业务组件的父类,所有的流程业务组件必须继承该类,重写该类的方法,实现流程状态变动与业务操作的联动。 3.2.5.2. com.zbiti.core.config.wf.WorkFlowConfigProvider 流程配置提供类。可以加载CORE_WF_CONFIG中所有的流程图,并且提供获取指定流程图信息的方法。 3.2.5.3. com.zbiti.core.config.wf.WorkFlowObject 流程定义信息类。该类保存流程图中的全部信息,可以通过其中的方法取得流程图的节点、按钮、连接、流程变量等信息。 3.2.5.4. com.zbiti.core.config.wf.WFImage 流程图生成类。该类可以生成某一个流程实例的流程图。 3.2.5.5. com.zbiti.core.vo.ParameterObject 输入参数类。该类用来保存request中的参数以及当前的登录用户。 3.2.5.6. com.zbiti.core.config.wf.WorkFlowProxy 流程操作类。该类是流程引擎操作流程的核心类,提供发起、审批、驳回、转办、否决、恢复流程等操作方法。调用该类的方法前,需要输入参数来创建该类(参数区分大小写): 参数 __WF_isStart __WF_isPreprocess isMobile __WF_CODE 含义 是否发起流程的操作 是否预处理 是否移动客户端提交的流程 要操作的流程编码 说明 true/false。默认为false true/false。默认为false Y/N。默认为N CORE_WF_CONFIG表的WF_CODE。如果是发起流程该参数必填,其他情况可空。 CORE_WF_WORKITEM表的WORKITEM_ID。如果不是对工作项进行操作该参数可空。 CORE_WF_INSTANCE表的INSTANCE_ID。如果不是对流程实例进行操作该参数可空(有__WF_WORKITEM_ID参数,该参数也可空) 如果是发起流程或有__WF_WORKITEM_ID参数,该参数可空。 如果是预处理或者不需要选择审批人(转办人),该参数可空 如果是预处理或者没有可跳过的节点,该参数可空 可空 __WF_WORKITEM_ID 要操作的工作项ID __WF_INSTANCE_ID 要操作的流程实例ID __WF_NODE 当前的流程节点ID __WF_selectedUsers 已选择的下一节点审批人 __WF_autoApproveNodes __WF_comment 已跳过的节点 审批意见 该类的静态变量: 1, SQL_GET_PARTICIPANTS_BY_CONDITION:根据条件查询审批人员的SQL(SQL中必须有 {p:condition}参数)。SQL中使用的表固定别名:C代表CORE_COMPANY,D代表CORE_DEPARTMENT,U代表CORE_USER,UR代表CORE_USER_ROLES,这些别名不可修改。可以通过修改该变量值,达到使用自定义的SQL来查询审批人员的目的。查询结果必须包含USER_ID字段。 2, SQL_GET_PARTICIPANTS_BY_USER_ID:根据USER_ID查询审批人员的SQL(SQL中必须有 {n:USER_ID}参数)。SQL中使用的表固定别名:C代表CORE_COMPANY,D代表CORE_DEPARTMENT,U代表CORE_USER,这些别名不可修改。可以通过修改该变量值,达到使用自定义的SQL来查询审批人员的目的。查询结果必须包含USER_ID字段。 3.2.5.7. com.zbiti.core.components.UserComponent 用户组件类。该类通过查询组织架构视图取得指定用户的信息。 3.2.5.8. com.zbiti.core.ResourcePool 资源池。该类保存当前环境的信息(当前用户、当前数据库连接、线程信息等)。调用流程引擎前必须设置当前的用户以及操作的按钮ID,如: ... ThreadObject to = ResourcePool.getCurrentThreadObject(); to.setButtonId(po.getParameterValue(\"__current_button_id\")); ResourcePool.setCurrentUser(po.getUser()); ... 3.2.5.9. com.zbiti.core.consts.Tables 平台数据表名。该类定义平台使用到的全部数据表的名称。当项目用的表和平台用的表有冲突时,可以修改平台用的表名,同时修改该类里面定义的表名,如: ... Tables.CORE_COMPANY=”CORE_COMPANY2”; ... 3.2.5.10. com.zbiti.core.consts.Sequences 平台序列名。该类定义平台使用到的全部序列的名称。当项目用的表和平台用的序列有冲突时,可以修改平台用的序列名,同时修改该类里面定义的序列名,如: ... Sequences.SEQ_COMMON_BASE=”SEQ_COMMON_BASE2”; ... 4. 附件 本文档包含以下附件: 1,流程数据表.pdm 2,“流程设计工具”目录 3,“流程编程接口”目录 4,“JAVA_DOCS”目录 因篇幅问题不能全部显示,请点此查看更多更全内容