工作流
概念
- 在一个超级复杂的业务环境中,利用流程控制框架可以对流程进行超级精准的控制;
- 在流程控制中,会产生很多数据,这些数据将是领导决策的依据;
执行工作流的步骤
- 确定该工作流的各个环节
- 确定制度生效
- 启动流程实例
- 员工请假
- 领导审批
工作流中有4个概念
bpm:商业流程管理
jbpm
pdl:流程定义语言
jpdl
工作流历史发展
jbpm3–>jbpm4–>jbpm5(jboss)
———————->activit5(原来jboss团队的内容)
jbpm4的数据库操作部分是hibernate做的
如果数据库的数据特别多的情况下不适合用jbpm4。
工作流操作步骤
- 在eclipse中装jbpm插件
- 制定流程图
- 发布到jbpm的引擎中:部署的过程
- 启动流程实例
- 张三完成请假申请(自动离开开始节点)
- 李四完成审批任务
- 王五完成审批任务(自动进入结束节点)
注意事项:
- 当进入”经理审批”节点的时候,以总经理的身份进入系统是看不到该任务的。
- 在工作流的过程中会产生大量数据。
在jbpm内部是通过控制数据库的表来控制流程的。默认情况下,事务是由hibernate控制的。
流程定义
部署流程定义时涉及到的数据库的表
JBPM4_DEPLOYMENT
含义:部署表,用来描述一次部署的。把流程定义的一个新的版本进行发布。
字段:DBID_:主键,部署id。
JBPM4_LOB
含义:部署的时候,xml文件和png图片全部存放在该表中。
字段:
DBID_:主键
DEPLOYMENT_:部署id
因为只要流程图进行修改,必须发布。在jbpm4-deployment中必须增加一行数据,所有deploymentID与唯一的流程图是一一对应的。
如果想要查找流程图,必须找到deploymentid;
name_:文件的路径
JBPM4_DEPLOYPROP
含义:
部署属性表,用来描述一次部署里的各种属性。
说明:
部署一次生成4行记录
生成4行记录具体解释:
langid 流程定义语言的版本号 jpdl-4.4
如果不换框架,该值保持不变
pdkey 流程定义名称
pdversion 版本号
如果流程定义名称不变,每部署一次,版本号自动加1。
如果流程定义名称改变,该值从1开始计算。
pdid {pdkey}-{pdversion}
deploymentID和pdid是一对一的对应关系
流程定义部署的方式
- Classpath
- inputstream
- zipinputstream
查看流程定义图片
给定一个deploymentid和一个资源的名称,得到一个inputstream,输出到磁盘某一位置。
1 | /** |
查询部署和流程定义
查询流程部署
查询所有的流程部署
根据deploymentid查询流程部署
查询流程定义
查询所有的流程定义
根据deploymentid查询流程定义
根据pdid查询流程定义
根据pdkey查询流程定义
流程定义的删除,流程部署的删除
根据pdkey删除所有的该pdkey下的流程部署
启动流程实例
概念
在流程图部署完以后,在发起请假申请之前,必须启动流程实例。
启动流程实例
根据pdid启动流程实例
根据pdkey启动流程实例
启动流程实例的时候涉及到的表
JBPM4_EXECUTION
定义:该表中存储了当前正在执行的流程实例
字段:
- DBID_:主键_
- ID_:流程实例ID
- activityname:该流程实例正在活动的节点名称
- procdefid_:流程定义id
JBPM4_HIST_PROCINST
定义:该表中存储了历史实例,当前正在执行的流程实例在历史信息中也有值。但是结束时间为null,状态(state)为active。
JBPM4_TASK
定义:该表中存储了当前正在执行的任务
字段:
- DBID_:主键,任务ID_
- NAME_:任务节点名称_
- ASSIGNEE_:任务执行人
JBPM4_HIST_TASK
定义:该表中存储了历史任务,当前正在执行的任务也在该表中。但是结束时间为null,状态(state)也为null。
JBPM4_HIST_ACTINST
定义:该表中存储了历史节点(任务节点只是节点中最常见的一种)
任务的查询
- 查询正在执行的任务
- 查询正在执行的所有的任务
- 根据当前的登录人查询该登录人执行的任务
- 根据流程实例ID查询当前正在执行的任务
- 根据pid查询当前正在执行的任务
- 查询已经完成的任务
- 查询正在执行的任务
完成任务
只要有一个taskID就可以完成任务。当一个任务完成后,该任务在jbpm4_task表中会删除,在相应的历史表中的state值为”completed”。当完成了最后一个任务以后,流程实例结束了,正在执行的流程实例在jbpm4_execution表中删除了。在jbpm4_hist_proceinst表中的state的值为”ended”。
流程变量
概念:在执行流程实例的过程中会产生一些数据,这些数据会以流程变量的方式保存在流程引擎中。
流程变量的生命周期:从流程实例开始到流程实例结束
流程变量必须和流程实例绑定在一起
什么时候可以把流程变量放入流程实例中:
- 在启动流程实例的时候
- 在某一个任务的时候可以设置流程变量
- 只要在流程实例没有结束的任何时候,都可以设置流程变量
如何获取流程变量:流程实例ID,key值