activiti 学习(一)

入门学习链接指导

  • Activiti 的官方文档
  • 官方用户指南
  • 中文版用户指南
  • 国内咖啡兔做的中文activit Demo

activiti 特性

内置的services

  • EngineServices
  • RepositoryService
  • RuntimeService
  • TaskService

还有一些较重要的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 taskList = taskService.createTaskQuery().processDefinitionKey("activitiDemo").list();
taskService.complete(taskList.get(0).getId());

完整代码请点击这里: Activiti_Simple


其他

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

你可能感兴趣的:(工作流,activiti)