EMOSS流程引擎开发指南.docx
《EMOSS流程引擎开发指南.docx》由会员分享,可在线阅读,更多相关《EMOSS流程引擎开发指南.docx(23页珍藏版)》请在冰豆网上搜索。
EMOSS流程引擎开发指南
EMOSS2流程引擎开发指南
中博信息技术研究院有限公司
版本历史
版本号
更改描述
更改日期
修订人
是否基线版本(Y/N)
评审记录#
评审通过日期
建立文档
2012-7-30
余志淼
Y
1.概述
1.1.流程引擎说明
EMOSS2流程引擎是EMOSS2开发平台的一部分,主要完成流程发起,审批,监控等功能,是较轻量级的流程引擎,但完全可以满足企业的业务流程需求。
流程引擎目前支持的数据库有:
oracle、mysql、sybase。
主要的组成部分有:
1,组织架构视图:
流程引擎需要基于组织架构才能实现审批人的选择、工作项的生成、流转条件的判断等。
2,流程数据表:
用于保存流程图、流程实例、工作项等流程相关的数据。
3,流程设计工具:
用于设计流程图,分配不同的版本给不同的公司。
JDK要求必须是及以上。
4,流程编程接口:
提供流程的发起、审批、参与者计算等接口给外部程序调用。
主要是jar包形式,JDK的版本必须是及以上。
1.2.流程引擎架构
2.开发前准备
2.1.建立组织架构视图
根据字段列表建立各个视图。
字段列表只列出必要字段,也可以根据需要扩展其他字段。
2.1.1.公司(CORE_COMPANY)
字段
字段名称
类型
说明
COMPANY_ID
公司ID
NUMBER(16)
公司的唯一标识
COMPANY_CID
公司变更序号
NUMBER(16)
固定值:
1
COMPANY_CODE
公司编码
VARCHAR2(50)
P_COMPANY_ID
上级公司ID
NUMBER(16)
COMPANY_NAME
公司名称
VARCHAR2(200)
SORT_ID
排序号
NUMBER(16)
可空
IS_LAST
是否最新记录
NUMBER
(1)
固定值:
1
STATE
是否有效
NUMBER
(1)
固定值:
1
2.1.2.部门(CORE_DEPARTMENT)
字段
字段名称
类型
说明
DEP_ID
部门ID
NUMBER(16)
部门的唯一标识
DEP_CID
部门变更序号
NUMBER(16)
固定值:
1
COMPANY_ID
所属公司ID
NUMBER(16)
关联到CORE_COMPANY
COMPANY_CID
所属公司变更序号
NUMBER(16)
固定值:
1
DEP_CODE
部门编码
VARCHAR2(50)
P_DEP_ID
上级部门ID
NUMBER(16)
DEP_NAME
部门名称
VARCHAR2(200)
SORT_ID
排序号
NUMBER(16)
可空
IS_LAST
是否最新记录
NUMBER
(1)
固定值:
1
STATE
是否有效
NUMBER
(1)
固定值:
1
2.1.3.员工(CORE_EMPLOYEE)
字段
字段名称
类型
说明
EMP_ID
员工ID
NUMBER(16)
员工的唯一标识
EMP_CID
员工变更序号
NUMBER(16)
固定值:
1
DEP_ID
所属部门ID
NUMBER(16)
关联到CORE_DEPARTMENT
DEP_CID
所属部门变更序号
NUMBER(16)
固定值:
1
COMPANY_ID
所属公司ID
NUMBER(16)
关联到CORE_COMPANY
COMPANY_CID
所属公司变更序号
NUMBER(16)
固定值:
1
EMP_CODE
员工编码
VARCHAR2(50)
EMP_NAME
姓名
VARCHAR2(50)
SORT_ID
排序号
NUMBER(16)
可空
IS_LAST
是否最新记录
NUMBER
(1)
固定值:
1
STATE
是否有效
NUMBER
(1)
固定值:
1
2.1.4.用户(CORE_USER)
字段
字段名称
类型
说明
USER_ID
用户ID
NUMBER(16)
用户的唯一标识
DEP_ID
所属部门ID
NUMBER(16)
关联到CORE_DEPARTMENT
COMPANY_ID
所属公司ID
NUMBER(16)
关联到CORE_COMPANY
EMP_ID
所属员工ID
NUMBER(16)
关联到CORE_EMPLOYEE
MAIN_ROLE_CODE
主要角色编码
VARCHAR2(30)
该用户的主要角色(权限角色)
LOGIN_ID
登录账号
VARCHAR2(50)
该用户登录到系统的账号
USER_NAME
用户姓名
VARCHAR2(50)
可以与员工姓名一致
SORT_ID
排序号
NUMBER(16)
可空
STATE
是否有效
NUMBER
(1)
固定值:
1
2.1.5.角色(CORE_ROLE)
字段
字段名称
类型
说明
ROLE_CODE
角色编码
VARCHAR2(30)
角色的唯一标识
ROLE_NAME
角色名称
VARCHAR2(50)
COMPANY_ID
所属公司ID
NUMBER(16)
关联到CORE_COMPANY。
空表示全部公司可使用的角色。
ROLE_TYPE
角色类型
CAHR
(1)
0:
权限角色;1:
流程角色;2:
权限流程角色。
默认为:
2。
SORT_ID
排序号
NUMBER(16)
可空
PARENT_CODE
父角色编码
VARCHAR2(30)
可空
IS_LEAF
是否末级
CAHR
(1)
1:
是,0:
否
IS_INNER
是否内置
CAHR
(1)
1:
是,0:
否。
默认为:
0。
2.1.6.用户流程角色表(CORE_USER_ROLES)
字段
字段名称
类型
说明
ROLE_CODE
角色编码
VARCHAR2(30)
角色的唯一标识
USER_ID
用户ID
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
MAX_ID
当前值
NUMBER(16)
初始值为:
1
2.3.安装流程设计工具
2.3.1.安装JDK
流程设计工具需要或以上版本才能运行。
安装完之后要指定JAVA_HOME,确认当前使用的JDK是版本。
2.3.2.安装流程设计工具
1),将“流程设计工具”目录拷贝到一个无空格的路径中,。
2),运行“”(32位操作系统使用)或“”(64位操作系统使用)。
点击主界面上的“设置”按钮,设置数据库连接(流程数据表所在的数据库),如下图所示:
点击“确认”即完成了流程设计工具的设置。
2.4.将流程编程接口加入到项目代码中
将“流程编程接口”目录下的文件拷贝到项目中即可。
文件目录已经是安装web工程的要求建立,如有特殊目录要求请自行修改。
流程编程接口需要或以上版本才能运行。
3.开发指南
3.1.流程设计工具使用
运行流程设计工具“”或“”。
点击菜单“流程-流程自定义”即可进入流程设计界面。
如下图所示:
界面上部是工具条。
左侧的上面一个列表是系统中已存在的流程图,下面一个列表是每个流程图的明细版本(每个流程图可以有多个版本,每个版本的流程代码都相同)。
界面的右侧是流程图的设计区域。
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,用来更新流程实例表的主题字段()。
2)流程金额SQL:
是发起流程或审批待办工作项时流程引擎调用的SQL,用来更新流程实例表的金额字段()。
3)流程数据表:
是EMOSS2平台使用的。
在JAVA代码中使用DDProxy类增删改查数据时,会自动设置PROCESS_ID(流程实例ID)和AUDIT_STATUS(审批状态)字段。
D.高级属性
在“高级”选项卡,可以设置流程的一些高级属性。
如下图所示:
1)流程结束/否决时发送消息的设置:
可以在流程结束或被否决时向流程相关的用户发送消息(通知某个流程已经结束/被否决)。
该设置在EMOSS2平台才使用。
2)常用审批意见:
可以设置审批该流程时使用的常用审批意见有哪些。
该设置在EMOSS2平台才使用。
3)流程业务组件:
用来设置一个JAVA类,重写父类()的某些方法,可以将流程的状态变化与业务操作的联系起来。
如:
审批通过后要做某些业务处理,可以重写父类的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条件:
=’XXX’(C是CORE_COMPANY的别名);
D(XXX)表示部门编码为XXX的部门,流程引擎会转换为SQL条件:
=’XXX’(C是CORE_DEPARTMENT的别名);
U(XXX)表示用户登录账号为XXX的用户,流程引擎会转换为SQL条件:
=’XXX’(U为CORE_USER的别名);
R(XXX)表示角色编码为XXX的角色,流程引擎会转换为SQL条件:
=’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})ANDD({starter:
DepartmentCode})ANDR(BMFZR)将转换为(设发起人公司编码为A1001,发起人部门编码为A1001_01):
=’A1001’AND=’A1001_01’AND=’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.不使用连接池方式:
...
...
DirectFactoryf=newDirectFactory();
Propertiesproperties=newProperties();
("",“”);
("":
1521:
orcl”);
("",“test”);
("",“1”);
(properties,;
f);
...
3.2.1.2.使用C3P0连接池方式
...
C3P0Factory;
...
C3P0Factoryf=newC3P0Factory();
Propertiesproperties=newProperties();
("",“