工作流
概念
- 在一个超级复杂的业务环境中,利用流程控制框架可以对流程进行超级精准的控制;
- 在流程控制中,会产生很多数据,这些数据将是领导决策的依据;
执行工作流的步骤
- 确定该工作流的各个环节
- 确定制度生效
- 启动流程实例
- 员工请假
- 领导审批
工作流中有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值
