activiti 学习(一)

入门学习连接指导


activiti 特性

内置的services

还有一些较重要的services,详细请自行查看activiti apihtml

自动建表

activiti 会自动建表。因此在与spring集成时,须要指定与数据库相关的bean。
当这些都准备好时,初始化spring.xml 时 activiti 的引擎会自动帮助把activiti相关的表建立好。
针对这些表的详细信息可参考:- 数据库设计说明书java


学习工做流流程记录一二

根据上面给的几个连接,差很少就能本身慢慢倒腾出来一个本身的工做流了,这里记录下我学习的所得。git


定义流程

这是工做流开发的前提。可是刚入门可能不知道这个东西怎么定义。我开始都是找现有定义好的流程拿来使用,后面学习到了必定的时候再定义本身的。github


部署流程

流程定义好了,须要部署到引擎中来。便于后续的工做。(部署一次就好,不用屡次部署web

流程定义会保存到持久化的数据存储里spring

部署分下列几种方式:数据库

  • 编程式部署,即在程序中将以有的流程定义进行部署(暂时用的就是这种)编程

    代码示例:api

    Deployment deployment = repositoryService.createDeployment().addClasspathResource("activitiDemo.bpmn20.xml").deploy();
  • 经过 Activiti Explorer 方式部署 。即 Activiti web控制台容许你经过web界面的用户接口上传一个bar格式的压缩文件(或者一个bpmn20.xml格式的文件)。 选择Management 标签 和 点击 Deployment数据库设计

部署成功后,会自动生成一个部署的ID,标识部署成功的流程定义。

在数据库层作的操做:

  • 首先在 act_re_deployment 表中保存部署成功生成的记录(主要时id,跟部署时间)
  • act_re_procdef 表中存放启动流程定义的信息

启动流程

部署好流程定义后,咱们就能够启动一个流程实例。 (开始学习时,建议启动一个流程跑完,不要重复启动
在启动这个流程有不少不一样方法,也重载了不少方法。详见:startProcessInstanceBy**

固然最简单就是只给流程定义ID(不是指流程定义部署成功后获得的ID,而是bpmn20.xml 里面的 process id="activitiDemo") 。 这一点在用户指南上也有说明。

代码示例:

ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("activitiDemo");

注: 部署与启动之间关系: 一个部署好的流程能够屡次启动,每次启动都会获得一个ID。

在数据库层面的操做:

  • act_ru_execution 存放启动成功的流程实例
  • act_ru_identitylink 存放用户相关的信息(着须要在启动时指定一个用户 map)
  • act_ru_task 存放用户任务相关的信息
  • act_ru_variable 存放一些运行时的相关变量

结束流程

在启动一个流程后,那么这个流程就进入运行状态中。
当流程定义中有UserTask时,那么activiti引擎则会自动将task 持久化到数据库。
这时咱们须要去处理完成任务,让流程继续到下一节点,或者流程结束。

我在xml,只有简单的流程,定义了UserTask,但没有指定任务处理人因此这里我只须要去完成该任务就ok。

代码示例:

List<Task> taskList = taskService.createTaskQuery().processDefinitionKey("activitiDemo").list();
taskService.complete(taskList.get(0).getId());

完整代码请点击这里: Activiti_Simple


其余

一个复杂的流程中还涉及 用户,businessKey 。 流程定义中会出现 userTask ,指定任务处理人或者组(须要用户来签收,处理)。这些都在用户指南有示例。 后续我会跟进。

相关文章
相关标签/搜索