概念

  1. 在一个超级复杂的业务环境中,利用流程控制框架可以对流程进行超级精准的控制;
  2. 在流程控制中,会产生很多数据,这些数据将是领导决策的依据;

执行工作流的步骤

  1. 确定该工作流的各个环节
  2. 确定制度生效
  3. 启动流程实例
  4. 员工请假
  5. 领导审批

工作流中有4个概念

bpm:商业流程管理

jbpm

pdl:流程定义语言

jpdl

工作流历史发展

jbpm3–>jbpm4–>jbpm5(jboss)

———————->activit5(原来jboss团队的内容)

jbpm4的数据库操作部分是hibernate做的

如果数据库的数据特别多的情况下不适合用jbpm4。

工作流操作步骤

  1. 在eclipse中装jbpm插件
  2. 制定流程图
  3. 发布到jbpm的引擎中:部署的过程
  4. 启动流程实例
  5. 张三完成请假申请(自动离开开始节点)
  6. 李四完成审批任务
  7. 王五完成审批任务(自动进入结束节点)

注意事项:

  1. 当进入”经理审批”节点的时候,以总经理的身份进入系统是看不到该任务的。
  2. 在工作流的过程中会产生大量数据。

在jbpm内部是通过控制数据库的表来控制流程的。默认情况下,事务是由hibernate控制的。

流程定义

部署流程定义时涉及到的数据库的表

JBPM4_DEPLOYMENT

  1. 含义:部署表,用来描述一次部署的。把流程定义的一个新的版本进行发布。

  2. 字段:DBID_:主键,部署id。

JBPM4_LOB

  1. 含义:部署的时候,xml文件和png图片全部存放在该表中。

  2. 字段:

    ​ DBID_:主键

    ​ DEPLOYMENT_:部署id

    ​ 因为只要流程图进行修改,必须发布。在jbpm4-deployment中必须增加一行数据,所有deploymentID与唯一的流程图是一一对应的。

    ​ 如果想要查找流程图,必须找到deploymentid;

    ​ name_:文件的路径

JBPM4_DEPLOYPROP

  1. 含义:

    部署属性表,用来描述一次部署里的各种属性。

  2. 说明:

    部署一次生成4行记录

    生成4行记录具体解释:

    langid 流程定义语言的版本号 jpdl-4.4

    ​ 如果不换框架,该值保持不变

    pdkey 流程定义名称

    pdversion 版本号

    ​ 如果流程定义名称不变,每部署一次,版本号自动加1。

    ​ 如果流程定义名称改变,该值从1开始计算。

    pdid {pdkey}-{pdversion}

  3. deploymentID和pdid是一对一的对应关系

流程定义部署的方式

  1. Classpath
  2. inputstream
  3. zipinputstream

查看流程定义图片

给定一个deploymentid和一个资源的名称,得到一个inputstream,输出到磁盘某一位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 根据deploymentId查看流程定义图片
*/
@Test
public void testShowImage() throws Exception{
ProcessEngine processEngine = Configuration.getProcessEngine();
InputStream inputStream = processEngine.getRepositoryService()
.getResourceAsStream("1","qingjia.png");

OutputStream outputStream = new FileOutputStream("d:/processimg.png");
for(int b=-1;(b=inputStream.read())!=-1;){
outputStream.write(b);
}
inputStream.close();
outputStream.close();
}

查询部署和流程定义

  1. 查询流程部署

    查询所有的流程部署

    根据deploymentid查询流程部署

  2. 查询流程定义

    查询所有的流程定义

    根据deploymentid查询流程定义

    根据pdid查询流程定义

    根据pdkey查询流程定义

流程定义的删除,流程部署的删除

根据pdkey删除所有的该pdkey下的流程部署

启动流程实例

  1. 概念

    在流程图部署完以后,在发起请假申请之前,必须启动流程实例。

  2. 启动流程实例

    根据pdid启动流程实例

    根据pdkey启动流程实例

  3. 启动流程实例的时候涉及到的表

    JBPM4_EXECUTION

    定义:该表中存储了当前正在执行的流程实例

    字段:

    1. DBID_:主键_
    2. ID_:流程实例ID
    3. activityname:该流程实例正在活动的节点名称
    4. procdefid_:流程定义id

    JBPM4_HIST_PROCINST

    定义:该表中存储了历史实例,当前正在执行的流程实例在历史信息中也有值。但是结束时间为null,状态(state)为active。

    JBPM4_TASK

    定义:该表中存储了当前正在执行的任务

    字段:

    1. DBID_:主键,任务ID_
    2. NAME_:任务节点名称_
    3. ASSIGNEE_:任务执行人

    JBPM4_HIST_TASK

    定义:该表中存储了历史任务,当前正在执行的任务也在该表中。但是结束时间为null,状态(state)也为null。

    JBPM4_HIST_ACTINST

    定义:该表中存储了历史节点(任务节点只是节点中最常见的一种)

  4. 任务的查询

    1. 查询正在执行的任务
      1. 查询正在执行的所有的任务
      2. 根据当前的登录人查询该登录人执行的任务
      3. 根据流程实例ID查询当前正在执行的任务
      4. 根据pid查询当前正在执行的任务
    2. 查询已经完成的任务
  5. 完成任务

    只要有一个taskID就可以完成任务。当一个任务完成后,该任务在jbpm4_task表中会删除,在相应的历史表中的state值为”completed”。当完成了最后一个任务以后,流程实例结束了,正在执行的流程实例在jbpm4_execution表中删除了。在jbpm4_hist_proceinst表中的state的值为”ended”。

流程变量

概念:在执行流程实例的过程中会产生一些数据,这些数据会以流程变量的方式保存在流程引擎中。

流程变量的生命周期:从流程实例开始到流程实例结束

流程变量必须和流程实例绑定在一起

什么时候可以把流程变量放入流程实例中:

  1. 在启动流程实例的时候
  2. 在某一个任务的时候可以设置流程变量
  3. 只要在流程实例没有结束的任何时候,都可以设置流程变量

如何获取流程变量:流程实例ID,key值