Activiti工作流

工作流的定义

  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工作流的使用》中代码演示

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355