首页 > 代码库 > JBPM工作流

JBPM工作流

工作流就是工作流程的计算机化,即将工作流程中的工作在计算机中以恰当的流程进行表示并且实施计算。
工作流主要解决的问题时:为实现某个业务目标,多个参与者利用计算机按预先定义好的规则传递文档、信息和任务。
    就是说多个人在一起合作干完某件事情
jBPM:java business procee managerment
jbpm使用规则:
    编写流程定义、部署流程定义、启动流程实例、完成流程实例中的任务、结束流程实例
流程定义:预先定义好的业务流转逻辑
流程实例:业务的一次实际流转过程,是流程定义执行的具体体现
任务实例:组成流程实例的元素
jbpm把所有与流程定义相关的信息都保存到jbpm的数据库。
jbpm有一个很好的特点就是把数据库的管理交给hibernate,把数据的管理职能分离出去,自己专注于业务逻辑的处理

jbpm的表结构(表名省略开头的jbpm):
1、deployment:部署表,用来描述一次部署
    DBID_:主键,也就是流程定义部署的id
    state:状态 ,默认是active
2、lob:仓库表,存放了流程定义文档(xml、png)
    deployment_:部署id的外键
    name_:xml或者png的路径
3、deployprop:流程部署的属性表
    DBID_:主键
    deployment_:流程部署的id
    objname:流程定义的名称
    key_:流程定义每部署一次,就会生成4行记录
        langid:语言版本
        pdid:流程定义的id,由流程定义名称和版本号组成
        pdkey:流程定义名称,与objname的值是一样的。可以对应多个流程定义
        pdversion:版本号,如果在一次流程定义部署中,流程定义的名称pdkey没有发生改变,则
            pdversion加1,也就是说每一个版本号都是一个流程定义。
4、execution:表示当前正在执行的流程实例
5、task:代表流程实例中当前正在执行的任务,任务也就是流程图中的一个节点
6、hist_procinst:历史的流程实例,包含当前正在执行的流程
7、hist_task:历史的任务,当前流程实例中正在执行的任务也包含在内
8、hist_actinst:表示历史的节点
9、variable:存放当前正在执行的流程实例的变量,一旦流程实例结束,变量也就被删除
一:流程定义的操作
    部署流程定义,需要先获得流程引擎。根据引擎执行一系列的操作
    查询部署:可以根据流程部署id查询一个部署
    查询流程定义:可以得到所有流程定义的信息,也可以根据部署的id查询某个流程定义(一次部署就对应一个流程定义)。
        可以根据流程定义名称pdkey来查询该名称下的所有流程定义,流程定义名称可以对应多个流程定义
        可以根据流程定义id即pdid来查询某个流程定义
    删除:jbpm只能通过流程部署id来删除流程定义,没有提供直接删除流程定义的api
二:流程实例的操作
    启动流程实例:根据流程定义id pdid可以获得唯一的一个流程定义实例。同一个流程可以有多个流程实例
    查询正在执行的任务:
        查询所有正在执行的任务
        根据任务执行人可以查询正在执行的任务
        根据pdid查询正在执行的任务
        根据任务taskid查询正在执行的任务
        根据executionid查询正在执行任务的id
    查询已经完成的任务;
        根据任务的执行人查询出所有的任务
        可以根据executionID查询已经完成的任务
        根据任务的状态completed查询已经完成的任务
    完成任务:
        根据任务id完成当前正在执行的任务,下一个任务将会被激活
    结束流程实例:
        根据流程实例id结束流程实例
三:流程变量
    在运行流程定义的某个流程实例的时候,可能会产生很多数据,这些数据称为流程变量。
    流程变量的生命周期、如何把一个流程变量放入到流程实例中、如何从流程实例中去除流程变量、流程变量的类型

    流程变量的生命周期:流程变量依赖于流程实例,周期从流程实例开始到结束
    设置流程变量:
        完成任务时候可以设置流程变量
        启动定义实例开始时候可以设置流程变量
    查看流程变量:
        可以根据任务的id查看流程变量

    当一个流程实例结束以后,关于该流程实例的流程变量也被删除了

四:动态赋值执行人

    方式:

         在*.jpdl.xml文件中 在task元素中加上一个asignment-handle,在该类中动态的赋值。

         在*.jpdl.xml文件中 可以通过流程变量的方式赋值,在执行该任务节点之前必须给assignee赋值

         可以通过taskService.assignTask(string taskid,string uid)赋值

五:组任务

    就是一个任务可以多个人执行,只要一个执行人执行了任务,该任务就执行完成

    participation表:存放候选人表。组任务的候选人在这个表中

    查询候选人:根据任务id获得候选人的集合、根据候选人查询组任务

    接受任务:使得某个候选人成为任务执行人,taskTask(个人认为的缺陷:任何一个人都能执行该任务,并不局限于该任务候选人)

六:其他

    transition 变迁。结束任务时候可以指定下一步的走向

    state节点:不需要手动结束任务,启动实例后,是不会在task中留下记录,状态节点不会在这里面显示。流程实例在运行时,jbpm必须要知道当前正在执行的任务到了哪个地方,这个东西就是令牌token,没执行完一步,令牌往后移动。

   decision:判决。可以实现控制逻辑,比如说请假时间小于2天,直接结束,否则继续流到下一个任务