欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

使用Activiti实现的工作流程管理

最编程 2024-07-26 22:02:53
...

工作流的定义
  1. 工作流是将一组任务组织起来以完成某个有序的过程:定义了任务的触发顺序和触发条件,而且每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完.
  2. 工作流就是业务流程的计算机化或自动化。许多公司采用纸张表单,手工传递的方式,一级一级审批签字,工作效率非常低下,对于统计报表功能则不能实现。而采用工作流软件,使用者只需在电脑上填写有关表单,会按照定义好的流程自动往下跑,下一级审批者将会收到相关资料,并可以根据需要修改、跟踪、管理、查询、统计、打印等,大大提高了效率,实现了知识管理,提升了公司的核心竞争力。

工具自带得数据表得含义与作用

1.在activati里自带得数据表如何做到跟自己得业务表相关联呢?
通过act_ru_exectution这个表中的business_key这个字段来进行关联 可以在代码中自定义business_key(UUID,雪花算法等)获取到一个唯一值,可以将其作为我们业务表中的业务id 以此来进行关联。

  • 资源库流程规则表
  1. act_re_deployment 部署信息表
  2. act_re_model 流程设计模型部署表
  3. act_re_procdef 流程定义数据表
  • 运行时数据库表(流程结束后回立即移除数据,为了保证表的尽量小得到运行足够快)
  1. act_ru_execution 运行时流程执行实例表
act_ru_execution

2.act_ru_identitylink 运行时流程人员表,主要存储任务节点与参与者的相关信息

act_ru_identitylink

3.act_ru_task 运行时任务节点表

act_ru_task

4.act_ru_variable 运行时流程变量数据表

act_ru_variable
  • 历史数据库表
    有四种历史级别
    1.none:不保存任何历史记录
    2.activity:保存所有的流程实例,任务,活动信息
    3.audit:也是activiti的默认级别,保存所有的流程实例,任务,活动,表单属性
    4.full:最完整的历史记录,除了包含audit级别的信息还能保存详情,比如:流程变量。(跟踪详细用)
    1.act_hi_actinst 历史节点表
act_hi_actinst

2.act_hi_attachment 历史附件表

act_hi_attachment

3.act_hi_comment 历史意见表

act_hi_comment

4.act_hi_identitylink 历史流程人员表

act_hi_identitylink

5.act_hi_detail 历史详情表,提供历史变量的查询


act_hi_detail

6.act_hi_procinst 历史流程实例表

act_hi_procinst

7.act_hi_taskinst 历史任务实例表

act_hi_taskinst

8.act_hi_varinst 历史变量表

act_hi_varinst
  • 组织机构表
    1.act_id_group 用户组信息表
    2.act_id_info 用户扩展信息表
    3.act_id_membership 用户与用户组对应信息表
    4.act_id_user 用户信息表
  • 这四张表很常见,基本的组织机构管理,关于用户认证方面建议还是自己开发一套,组件自带的功能太简单,使用中有很多需求难以满足
  • 通用数据表
    1.act_ge_bytearray 二进制数据表
    2.act_ge_property 属性数据表存储整个流程引擎级别的数据,初始化表结构时,会默认插入三条记录,

核心API

  • 系统架构图


    系统架构图

核心类ProcessEngine

在Activiti中最核心的类,其他类由他得到
ProcessEngine processEngine=ProcessEngine.getDefaultProcessEngine();

  • 获取RepositoryService
    RepositoryService repositoryService=processEngine.getRepositoryService ();
    作用:管理流程定义
    Activiti的仓库服务类,指流程定义文档的两个文件:bpmn文件和流程图片,改servicer可以删除流程部署的定义。
  • 获取RuntimeService
    RuntimeService runtimeService=processEngine.getRuntimeService ();
    作用:执行管理,包括启动,推进,删除流程实例等操作
    Activiti的流程执行服务类,可以从这个服务类中获取关于流程执行的相关信息
  • 获取TaskService
    TaskService taskService=processEngine.getTaskService ();
    作用:任务管理
    Activiti的任务服务类,可以从中获取任务的相关信息,比如当前正在执行的个人代办或小组代办任务
  • HistoryService
    Activiti的查询历史信息的类,在一个流程执行完成后,这个对象为我们提供查询历史信息,可以跟踪流程实例对应所以代办节点的运行情况。
  • ProcessDefinition
    流程定义类,可以从中获取资源文件
  • ProcessInstance
    代表流程定义执行的实例,当一个部署的流程图启动后,该流程只有一条流程实例数据,但是她的流程任务可以有多个,每个任务对应流程图中相应的流程节点。

对象之间的关系

ProcessInstance对象

流程的启动是通过runtimeService.startProcessInstance(),这时引擎会创建一个流程实例(ProcessInstance)

  • 流程实例是根据一次或一条业务数据用流程驱动的入口,两者之间是一对一的关系,流程引擎会创建一条数据到ACT_RU_EXECUTION表,同时也会根据history的级别决定是否查询相同的历史数据到ACT_HI_PROCINST表。
  • 流程启动后业务与流程就已经建立了关联关系,对于自定义表单或者外部表单来说启动的时候会传入bussinessKey作为业务和流程的关联属性。
Execution对象

Execution的含义就是一个流程实例具体要执行的对象。
一个流程中,执行对象可以存在多个,但是流程实例只能有一个。
当流程按照规则只执行一次的时候,那么流程实例就是执行对象。

  • 流程定义好比是java中的一个类
  • 流程实例好比是java中的一个实例对象,一个流程定义可以有多个流程对象
Task对象

前面说了ProcessInstance和业务是一对一关联的,和业务数据最亲密;而Task则和用户最亲密的(UserTask),用户每天的待办事项就是一个个的Task对象。
Task可以是任何类型的Task实现,可以是用户任务,java任务等,在实际运行中只不过是面向的对象不同。
Task是在流程定义中看到的最大单位,每当一个Task完成的时候引擎会把当前的任务移动到历史中,然后插入下一个任务插入到表ACT_RU_TASK

HistoryActivity对象

Activity包含了流程中所有的活动数据,例如开始事件、各种分支、以及刚刚提到的Task执行记录。

抽象的描述activiti工作流的行为

  1. 我们先将流程定义的流程图画好,其本质是xml文件,这样就可以存入所要的数据
  2. 读取业务流程图的本质就是解析xml文件的过程
  3. 然后activiti会将流程图中的每一个节点的数据读取并放入表中
  4. 每当任务的启动或执行,都会将第一个节点的信息插入到运行跟历史相关表中,每当流程往下走,都会有序的读取表中的第一个记录,处理完并删除,然后回读取下一个节点的信息插入表中,以此循环直到最后一个结束节点,整个流程也就结束。

一个流程的完整过程

  • 将流程定义图画好
  • 流程定义的部署 使用activiti提供的api向activiti中部署bpmn文件
  • 启动一个流程实例 启动一个流程实例表示开始一次业务流程的运行
  • 用户查询代办任务 因为业务流程交由activiti管理,所有通过activiti就可以查询当前流程执行到哪了,用户需要办理什么任务。
  • 用户执行或完成自己的任务

对于完整流程的过程在一下篇文章《Activiti工作流的使用》中代码演示

推荐阅读