入门学习链接指导
activiti 特性
内置的services
还有一些较重要的services,详细请自行查看activiti api
自动建表
activiti 会自动建表。所以在与spring集成时,需要指定与数据库相关的bean。
当这些都准备好时,初始化spring.xml 时 activiti 的引擎会自动帮助把activiti相关的表创建好。
针对这些表的详细信息可参考:- 数据库设计说明书
学习工作流流程记录一二
根据上面给的几个链接,差不多就能自己慢慢倒腾出来一个自己的工作流了,这里记录下我学习的所得。
定义流程
这是工作流开发的前提。但是刚入门可能不知道这个东西怎么定义。我开始都是找现有定义好的流程拿来使用,后面学习到了一定的时候再定义自己的。
部署流程
流程定义好了,需要部署到引擎中来。便于后续的工作。(部署一次就好,不用多次部署)
流程定义会保存到持久化的数据存储里
部署分下列几种方式:
-
编程式部署,即在程序中将以有的流程定义进行部署(暂时用的就是这种)
代码示例:
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 ,指定任务处理人或者组(需要用户来签收,处理)。这些都在用户指南有示例。 后续我会跟进。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。