HYUEP应用平台开发手册流程系统分册.docx
《HYUEP应用平台开发手册流程系统分册.docx》由会员分享,可在线阅读,更多相关《HYUEP应用平台开发手册流程系统分册.docx(20页珍藏版)》请在冰豆网上搜索。
![HYUEP应用平台开发手册流程系统分册.docx](https://file1.bdocx.com/fileroot1/2022-11/24/006a6bbb-86fe-4ed8-8e7e-16c7fb70ae65/006a6bbb-86fe-4ed8-8e7e-16c7fb70ae651.gif)
HYUEP应用平台开发手册流程系统分册
内部资料注意保密
HY-UEP应用开发平台开发指南
工作流开发分册
[单位]
2013年1月
文档说明
文档名称
[标题]
文档编号
文档版本
0.1
文档密级
内部版本
0.1.0.2
文档类型
■初稿□征集意见稿□最终稿
文档编制
编制时间
2013-01-05
文档审核
审核时间
文档审核
审核时间
所属项目
项目编号
文档备注
修订记录
修订人
修订内容摘要
产生版本
修订日期
审核人
批准人
批准时间
1前言
1.1编写目的
工作流平台依托海颐企业级应用开发平台开发实现,为方便进行二次开发和流程调度,单独封装了一套进行流程调度的API接口。
这些接口表现为一个JAVA类的方法,并通过参数和返回值进行流程调度和信息交互。
通过这些API的调用,可以协助开发者实现任务的提交,激发工作流进行相应的调度等。
使用HY-UEP平台的工作流模块进行二次开发,需要了解系统提供的这些API接口,需要掌握这些接口的含义、使用场合、参数的含义以及遵循一些约定等,本文档详细阐述了这些API编程细节,并对调度引擎中的重要常量、重要参数、常见示例等做了说明;从开发指南到开发示例,一步步指导开发人员完成工作流的二次开发工作。
1.2适用范围
工作流模块是HY-UEP的选配模块,因此只有在UEPSTUDIO集成开发环境中创建UEP项目时选择了支持工作流模块的特性,项目中才能进行工作流的相关开发工作。
本文档面向的读者主要是使用HY-UEP平台的工作流模块进行二次开发的开发人员。
1.3相关说明
在工作流调度接口中,使用最多的是各类任务的提交接口,本文档主要详细介绍了任务正常提交、选择传递、派工提交、任务激活、默认回退以及任务抽回等接口。
本文档还介绍了几种常用业务需求的解决方案:
自由流的实现、会签的实现、并行子流程的实现、自动活动的实现以及流程初始化参数的实现等。
要求预期读者需要具备一定的工作流基础知识,并且在开发过程中可能会涉及到众多的平台知识,请参阅HY-UEP相关文档。
2综述
2.1系统架构
HY-UEP的工作流平台作为海颐企业应用平台的一个系统模块,以业务服务的形式为企业应用提供服务。
工作流平台是基于WfMC的工作流模型,结合多年的开发经验开发出的遵循xpdl模型标准,满足分布式、异构环境要求的工作流系统。
体系结构如下图所示:
工作流平台包括流程建模工具和工作流引擎两部分,流程建模工具用于流程定义,集成到了UEPStudio开发环境中。
流程引擎负责流程的调度和运行,包括三部分:
工作流接口、调度内核和引擎服务。
工作流接口对外提供流程定义、监控和调度接口。
调度内核负责流程调度,产生流程实例、活动实例和任务项并处理,处理过程中调用引擎服务的事件服务、时限服务、应用代理和日志服务。
2.2开发流程
UEP项目如果使用流程模块,首先要在项目上增加流程模块的支持,有了流程模块的支持后,就可以绘制业务流程模板,进行基于流程的业务流程开发了。
具体开发过程如下:
1.分析业务需求,找出需要绘制的业务流程模板。
2.归纳业务办理步骤,创建标准环节,为流程绘制做准备。
3.绘制流程模板,请参考流程建模的操作手册。
校验成功后加载流程模板。
4.在业务应用中建立业务功能和流程模板的对应方式,并确定业务工作单和流程实例的关联方法,以便运行业务功能时能够启动对应模板的流程实例,并把流程实例关联到业务工作单上。
5.显示待办任务。
6.在业务办理界面中增加流程传递的功能。
下面的章节对后面几个过程进行说明。
3开发指南
3.1开发环境配置
工作流模块只能依托UEP项目进行开发,所以得首先安装集成开发环境UEP-SUTDIO,然后在新建UEP项目时要勾选“工作流模块”,也可以在已有的UEP项目中再增加“工作流模块”的支持。
详细操作参考《UEPStudio平台操作指南.doc》。
3.2任务相关数据说明
3.2.1模板相关数据
3.2.1.1模板类别
EP_WF_TEMPLATE_CLASS:
模板类别表,存储工作流系统中定义的模板分类信息。
字段说明:
列名
代码
类型
说明
模板类别号
TEMPLATE_CLASS_NO
number(8)
上级模板类别号
UP_CLASS_NO
number(8)
模板类别名
TEMPLATE_CLASS_NAME
varchar2(64)
使用系统标志
MODULE_ID
varchar2(32)
排序序号
ORDER_CODE
varchar2(32)
备注
REMARK
varchar2(255)
3.2.1.2模板库主信息
EP_WF_TEMPLATE:
存储工作流系统中已经定义的模板信息。
字段说明:
列名
代码
说明
类型
模板号
TEMPLATE_NO
模板的编号,与版本号一起唯一标识一模板
number(8)
版本号
VERSION_NO
标识一模板的具体版本,与模板号一起唯一标识一模板
varchar2(8)
模板名
TEMPLATE_NAME
模板的名称
varchar2(64)
模板类别号
TEMPLATE_CLASS_NO
模板所属的模板类别号
number(8)
是否运行版
RUN_FLAG
是否是当前执行版,’Y’,’N’
varchar2
(1)
模板对应程序窗口
TAG
一个流程模板对应的程序主窗口或主类
varchar2(128)
子流程标识
AS_SUBFLOW
标识一模板是否只能作为子流程使用,不能独立启动实例
varchar2
(1)
流程模板类型
MODEL_TYPE
流程模板类型,1:
模型1;2:
模型2
varchar2
(1)
所属部门
DEPARTMENT
number(10)
创建时间
CREATE_TIME
date
创建者
CREATOR
varchar2(16)
合格标志
VALID_FLAG
Y:
合格;N不合格
varchar2
(1)
启用时间
START_DATE
date
停止时间
END_DATE
date
动态修改标志
MODIFY_FLAG
Y:
动态修改;N:
没有动态修改
varchar2
(1)
前身版本
PRE_VERSION_NO
varchar2(8)
排序序号
ORDER_CODE
varchar2(32)
描述信息
DESCRIPTION_INFO
varchar2(255)
模板日历
CALENDAR_TYPE
1:
默认日历;2:
7*24小时日历
varchar2
(1)
3.2.2实例及任务列表
3.2.2.1实例列表
EP_WF_INSTANCE_LIST:
存放工作流系统中的实例信息。
字段说明:
列名
代码
说明
类型
实例号
INSTANCE_ID
number(10)
模板号
TEMPLATE_NO
number(8)
版本号
VERSION_NO
varchar2(8)
调度状态
STATE
0挂起1运行2正常结束3异常结束
varchar2
(1)
实例开始时间
START_TIME
启动时间
date
实例结束时间
END_TIME
结束时间
date
实例启动人
START_OPERATOR
varchar2(32)
所属部门
DEPARTMENT
实例的默认部门
number(10)
锁定标志
LOCK_FLAG
varchar2
(1)
顶级部门
TOP_DEPARTMENT
number(10)
备注
REMARK
varchar2(255)
3.2.2.2当前任务清单
EP_WF_TASK_LIST:
存放实例对应的当前任务列表信息。
字段说明:
列名
代码
说明
类型
实例号
INSTANCE_ID
当前任务的实例号,与任务号一起标识一当前任务
number(10)
活动实例
ACTIVITY_INSTANCE_NO
活动实例号
number(4)
任务号
TASK_ID
当前任务的任务号,与实例号一起标识一当前任务
number(4)
活动号
ACTIVITY_NO
当前任务的环节号
number(4)
标准环节号
STD_TACHE_NO
当前任务对应的标准环节
number(10)
活动名称
ACTIVITY_NAME
活动名称
Varchar2(128)
处理实体号
ENTI_ID
当前活动的处理实体
varchar2(255)
处理实体类型
ENTI_TYPE
当前活动处理实体的类型,1:
角色;2:
人员;3:
软模块;4:
子流程
varchar2(8)
版本号
VERSION_NO
实例使用模板的版本号
char(8)
模板号
TEMPLATE_NO
实例使用模板的模板号
number(8)
任务状态
TASK_STATE
0等待前驱计数完成;7待领取;8待处理;9正在处理;A已提交;
char
(1)
日历类型
CALENDAR_TYPE
1:
默认日历
2:
7×24小时
3:
组织日历
4:
流程日历
varchar
(1)
计时要求标志
TIME_FLAG
任务是否要求计时
varchar2
(1)
任务传来人员
LAST_COMMITOR
当存在并行流程时可以有多个
varchar2(255)
超时标志
OVERTIME_FLAG
任务是否超时(Y/N)
varchar2
(1)
超时大小
OVER_NUM
超时的时间(单位分钟)
number(18)
段时限超时标志
SEG_OVERTIME_FLAG
varchar2
(1)
任务到达时间
TASK_REACH_TIME
date
实例启动人
START_OPERATOR
varchar2(32)
角色
ROLE_CODE
varchar2(16)
父活动实例号
PRT_ACTINS_NO
为子流程时,保存父活动实例号
number(4)
调度状态
STATE
是运行,挂起,结束,异常结束分别是1,0,2,3
varchar2
(1)
任务应完成时间
TASK_LIMIT_TIME
设置时限时的到期时间
date
所属部门
DEPARTMENT
Number(10)
层次标志
LEVEL_DESC
varchar2(64)
任务开始处理时间
START_TREATE_TIME
Date
传来方式
COMMIT_TYPE
正常传递1,选择传递2派工提交3默认回退4任务抽回5
varchar2
(1)
3.2.3任务执行情况
3.2.3.1任务执行情况
EP_WF_TASK_EXEC_INFO:
存储实例的详细办理进度信息。
字段说明:
列名
代码
说明
类型
实例号
INSTANCE_ID
number(10)
任务号
TASK_ID
number(4)
活动实例号
ACTIVITY_INSTANCE_NO
活动号
ACTIVITY_NO
number(4)
标准环节号
STD_TACHE_NO
number(10)
活动名称
ACTIVITY_NAME
Varchar2(128)
日历类型
CALENDAR_TYPE
1:
默认日历
2:
7×24小时
3:
组织日历
4:
流程日历
Varchar2
(1)
任务状态
TASK_STATE
0等待前驱计数完成;7待领取;8待处理;9正在处理;A已提交;
varchar2
(1)
模板号
TEMPLATE_NO
number(8)
版本号
VERSION_NO
varchar2(8)
计时要求标志
TIME_FLAG
varchar2
(1)
超时标志
OVERTIME_FLAG
varchar2
(1)
超时大小
OVER_NUM
超时数以秒记
number(18)
段时限超时标志
SEG_OVERTIME_FLAG
varchar2
(1)
任务传来人员
LAST_COMMITOR
当存在并行流程时可以有多个
varchar2(255)
任务到达时间
TASK_REACH_TIME
date
任务提交时间
TASK_COMMIT_TIME
date
任务提交人
TASK_COMMITOR
一个环节的任务提交人只能有一个,但是执行实体可以有多个
varchar2(255)
调度状态
STATE
是运行,挂起,结束,异常结束分别是1,0,2,3
varchar2
(1)
任务应完成时间
TASK_LIMIT_TIME
date
父活动实例号
PRT_ACTINC_NO
Number(4)
所属部门
DEPARTMENT
Number(10)
层次标志
LEVEL_DESC
varchar2(64)
任务开始处理时间
START_TREATE_TIME
Date
传来方式
COMMIT_TYPE
正常传递1,选择传递2派工提交3默认回退4任务抽回5
varchar2
(1)
3.2.4待办任务
流程引擎根据活动的处理实体设置进行人员分配,分配结果体现在EP_WF_TASK_LIST表里,和待办任务有关的字段见下表:
字段
名称
说明
ENTI_ID
处理人员
任务的处理人帐号
ROLE_CODE
角色代码
任务的处理角色
DEPARTMENT
部门代码
任务的处理部门
TASK_STATE
任务状态
0等待前驱计数完成;7待领取;8待处理;9正在处理;A已提交;
检索待办任务时要综合考虑上述表中字段的值,由于部门是树型的,涉及到上下级等多个层次,一般不会根据部门过滤待办任务。
如果不考虑部门,每个操作员能看到的任务为下面几种情况的并集:
✧任务状态是待处理,操作员的角色符合任务处理角色的值
✧任务状态是待处理和正在处理,操作员帐号符合处理人员的值
3.3启动流程实例
流程模板定义完毕后,需要加载模板使模板生效,成为当前运行版,只有当前运行版的模板版本才能启动流程实例。
调用createProcessInstance接口启动流程实例,接口参数说明如下:
参数名称
类型
说明
templateNo
long
要启动实例的模板的模板号
versionNo
String
要启动实例的模板的版本号
userId
long
流程实例启动人
autoCommit
boolean
流程的第一个人工活动的处理人的处理方式,false是流程启动人,true表示根据活动的处理实体设置由流程引擎分配的,不一定是实例启动人
right
boolean
是否检查流程启动人具有该模板的启动权限
orgId
long
指明流程实例的实例部门,-1表示启动人所在的部门
formalParams
Map
流程的形参值,分输入和输出参数,输入参数需要调用者提供参数值;输出参数是流程引擎设置值,流程调度过程中调用getProcessFormalParamValue得到。
调用getProcessFormalParams接口得到流程的形参
3.4流程传递指南
任务办理完毕提交时,平台流程模块提供了几种传递方式,以满足不同的传递要求,下面详细说明。
3.4.1正常传递
最基本的使用方法,调用normalCommitTask接口实现,引擎按照模板中定义的格式将任务向下传递。
这里有几点需要注意:
1)如果当前活动是多任务项,多任务项是指同一个活动实例产生了多个任务,这些任务可以并行执行,也可以串行执行;如果是并行执行,当前任务正常提交后,要查看当前活动实例下有没有其他的未完成的任务,直到所有的任务都完成了,流程才能流转到下一个活动节点;如果是串行执行,当前任务正常提交后,才会根据需要产生下一个任务,直到所有的任务都产生并完成,流程才能流转到下一个活动节点;
2)如果流程传递到的活动是自动活动,自动活动是指不需要人工参与的活动,所以不会产生任务项,自动活动在执行完相应的代码或服务后,流程会自动继续向下流转;
3.4.2选择传递
接口中提供了两种选择传递的方法,一种是同一流程内的选择传递,另一种是跨流程的选择传递。
实现选择传递的过程如下:
1)首先通过调用getOptionalTransions方法获得可以选择传递的活动列表List,这个列表中包含了通过跳转边或是自由流所能到达的活动;NextActivityInfo中详细记录了可到达的活动的模板号、版本号、活动号、跳转途径以及跳转控制策略等信息,应用程序可以利用它构造出可选择传递的活动列表,供客户选择。
2)选择好要跳转的活动后,如果是同一流程内跳转,可以调用简单格式的selectCommitTask即可,如果是跨流程跳转,则需要调用复杂格式的selectCommitTask方法,其中最后一个参数nextActivityInfo就可以直接从NextActivityInfo中得到。
当然,为了通用,统一使用复杂格式的选择传递方法即可。
3.4.3派工提交
派工提交一般用于指定下一个活动执行人员的情况,如班长派工,计量外勤派工等,引擎并没有限定只有流程中的派工活动才能调用派工接口,任一个活动都可以使用派工提交接口。
派工提交可用于在单一节点产生不固定数目的任务,在派工的参数中指定任务处理人或处理部门,一个节点指定了几个处理人或处理部门就产生几个任务,这些任务以多任务项的形式存在。
还可对子流程派工实现并行子流程,对子流程派工只能派工到部门,并且这个部门就作为该子流程的实例部门,并且各子流程内的任务是相互不影响的。
进行派工提交的控制步骤:
1)首先调用getDispatchActivities接口得到当前活动可达的活动列表List,这些活动列表中包含当前活动能到达的人工活动、子流程活动以及子流程的首活动。
可以根据实际情况,构造一个或多个派工提交对象DispatchInfo,在DispatchInfo中可以指定派工的部门或人员,指定几个部门或几个人员就产生几个任务,这些任务以多任务项的形式存在,并且可以通过DispatchInfo指定这些任务是并行执行还是串行执行。
其中需要注意的是对子流程派工只能按照部门派工。
2)调用dispatchCommitTask接口实现派工提交。
需要注意几种派工失效的情形:
1)当派工后继环节跨越分支环节时,由于传递时可能存在条件边不满足而造成派工失效。
2)当前活动是多任务项,如果不是最后一个任务进行派工,由于该活动还没有结束而造成派工失效
3.4.4回退
回退是指活动的默认回退,按照模板定义的环节顺序回退,不一定是回退到传来的活动。
回退调用的接口是returnTask,接口的详细说明请参照API文档。
关于回退的一些约定:
1)以流程定义的顺序回退,而不是回退到传来活动
2)当某个活动是选择传递而来,前驱活动没有走过,这种情况下,回退到跳转来的活动。
3)如果当前活动是个并行多任务项,一个任务还都没有处理,则可以回退,否则不能回退;如果当前活动是个串行多任务项,会回退到当前任务的前一个任务,如果是第一个任务,就回退到前一个活动。
4)如果回退到的活动是个并行多任务项,则会退后产生所有的任务,如果回退到的活动是个串行多任务项,则回退后产生串行多任务项的最后一个任务。
5)当回退到子流程时,调度到子流程执行过的最后一个人工活动。
6)对于模型1来说,如果回退中包含分支活动,则根据配置决定是否需要杀死相关任务。
3.4.5任务抽回
当某个任务传递后的所有后继环节没有处理时,可以进行抽回,抽单前,应该调用canTaskRedraw接口判断某个任务是否可以抽回,然后调用taskRedraw接口实现任务的抽回。
任务抽回有以下约定:
1)如果要抽回的活动是个多任务项,则只要有一个任务完成了,就不能抽回。
2)如果当前活动是个并行多任务项,且后续活动任务还没有开始,则只抽回当前一个任务;如果当前活动是个串行多任务项,则只抽回当前任务。
3.5人员分配
现有的人员分配支持活动分配到人员或岗位,即在流程中可以指定哪些活动分到人,哪些活动分到角色。
在实际工作中,人员,部门,角色这些东西一般是相互关联的,引擎的调度规则可以大致作如下的描述:
1)如果重复执行保持不变,则首先查看该活动是否已经执行过,如果执行过,找出ENTI_ID直接置入,ENTI_TYPE则是指定到人,DEPARTMENT为人员所在部门;如果没有执行过,则按照活动的设置进行人员分配;
2)若活动直接指定到部门(直接指定或动态部门),不分配到人,则按照流程的设置,直接将部门写入DEPARTMENT,ENTI_TYPE为按照部门分配,处理人员为空;
3)若活动指定到角色(直接指定或动态角色),不分配到人,则按照流程中的设置,将角色代码写入任务表中的ROLE_CODE字段,处理人员为空,ENTI_TYPE为按照角色分配,处理部门则根据调度时的实际情况指定:
首先若在流程中指定部门,则直接置入;若流程中指定动态部门,则首先计算部门表达式,然后置入;如果属于派工指定部门提交,则将派工的部门置入;如果最后部门仍然是-1,则将实例的默认部门置入。
4)若活动指定到个人(直接指定或动态指定),人员分配后ENTI_ID为指定的处理人员,ENTI_TYPE为执行类型,DEPARTMENT为人员所在的部门
5)若活动的处理实体是相关活动(流程内部相关或跨流程相关),如果相关活动已经执行过,则直接得到处理人员置入ENTI_ID,由于已经指定到人,ENTI_TYPE为指定到人,DEPARTMENT为人员所在的部门;如果相关活动没有执行,则按照相关活动的设置进行重新分配;
6)分配到人的策略:
若是全局分配,则检查有没有默认部门,若有,从默认部门开始找起,搜索顺序为:
默认部门,默认部门下面的部门,逐次向上搜索;若没有指定默认部门,则只按照角色在全局分配;若派工指定部门或模板中指定部门,则只检索指定部门,若没有则将处理人员设为-1;若按照传来部门优先,则只搜索传来人员所在部门,