核心组件介绍
- 关键对象
- Deployment:流程部署对象,部署一个流程时创建。
- ProcessDefinitions:流程定义,部署成功后自动创建。
- ProcessInstances:流程实例,启动流程时创建。
- Task:任务,在Activiti中的Task仅指有角色参与的任务,即定义中的UserTask。
- Execution:执行计划,流程实例和流程执行中的所有节点都是Execution,如UserTask、ServiceTask等。
- 服务接口
- ProcessEngine:流程引擎的抽象,通过它我们可以获得我们需要的一切服务。
- RepositoryService:Activiti中每一个不同版本的业务流程的定义都需要使用一些定义文件,部署文件和支持数据(例如BPMN2.0 XML文件,表单定义文件,流程定义图像文件等),这些文件都存储在Activiti内建的Repository中。RepositoryService提供了对 repository的存取服务。
- RuntimeService:在Activiti中,每当一个流程定义被启动一次之后,都会生成一个相应的流程对象实例。RuntimeService提供了启动流程、查询流程实例、设置获取流程实例变量等功能。此外它还提供了对流程部署,流程定义和流程实例的存取服务。
- TaskService: 在Activiti中业务流程定义中的每一个执行节点被称为一个Task,对流程中的数据存取,状态变更等操作均需要在Task中完成。TaskService提供了对用户Task 和Form相关的操作。它提供了运行时任务查询、领取、完成、删除以及变量设置等功能。
- IdentityService: Activiti中内置了用户以及组管理的功能,必须使用这些用户和组的信息才能获取到相应的Task。IdentityService提供了对Activiti 系统中的用户和组的管理功能。
- ManagementService: ManagementService提供了对Activiti流程引擎的管理和维护功能,这些功能不在工作流驱动的应用程序中使用,主要用于Activiti系统的日常维护。
- HistoryService: HistoryService用于获取正在运行或已经完成的流程实例的信息,与RuntimeService中获取的流程信息不同,历史信息包含已经持久化存储的永久信息,并已经被针对查询优化。
核心API
- ProcessEngine:流程引擎
- 加载方式:
ProcessEnqine processEnqine = ProcessEnqine.getDefaultProcessEnqine();
- 作用:
- 产生RepositoryService
RepositoryService repositoryService = processEnqine.getRepository();
- 产生RuntimeService
- 产生TaskService
- 产生RepositoryService
- 加载方式:
- 各个service的作用
- RepositoryService:管理流程定义
- RuntimeService:执行管理,包括启动,推进,删除流程实例等操作
- TaskService:任务管理
- HistoryService:历史管理(执行完的数据的管理)
- IdentityService:组织机构管理
- FormService:一个可选服务,任务表单管理
- ManagerService
- ProcessDefinition:流程定义类,可以获得资源文件
- ProcessInstance:流程定义的执行实例,表示一个流程从开始到结束的最大流程分支
- Execution:描述流程执行的每一个节点,在单线流程时,基本等同于ProcessInstance,多线流程总线路代表ProcessEnqine,风险中的每个活动代表Execution
一个Demo
- 画流程图
- 部署流程定义:使用RepositoryService部署流程定义
- 启动流程实例:使用流程定义的key启动流程实例,这里使用RuntimeService启动流程实例
- 查看个人任务:这里使用TaskService完成任务的查询
- 完成个人任务:使用TaskService完成任务的查询
创建流程实例涉及到四张表
- act_hi_actinst:正在活动的实例
- act_hi_procinst:所有历史实例,正在执行的流程实例也在这张表中
- act_hi_taskinst:历史任务,正在执行的任务也在这张表中
- act_ru_execution:正在执行的流程实例表
- act_ru_task:正在执行的任务表
流程变量使用
- assign:设置候选人,#{userId}
- condition:点击箭头->设置条件:${money > 100 && money < 500}
- 在流程图中设置完成后,程序中必须设置流程变量variables
动态设置任务执行人
- 设置taskListener,可以动态的设置任务执行人(通过取出流程变量中的值)
- 直接在程序中设置执行人,完成任务后,setAssign(username)
组任务
- 流程图中填入condidate user
- 候选人被存储在act_ru_identitylink(临时表),act_hi_identitylink表中(永久性的表)
sequenceflow(箭头,在箭头中设置条件)
- 用于设置多个出路,设置条件(格式$(days > 3) ,使用流程变量判断),根据流程变量选择出路
解决bpmn流程图乱码的问题
- 在idea站桩目录下找到idea.exe.vmoptions和idea64.exe.vmoptions两个文件,在文件末尾添加-Dfile.encoding=UTF-8即可
设置流程变量
- RuntimeService对象可以设置流程变量和获取流程变量
- TaskService对象可以设置流程变量和获取流程变量
- 流程实例启动的时候可以设置流程变量
- 任务办理完成的时候可以设置流程变量
- 流程变量可以通过名称/值的形式设置单个流程变量
- 流程变量可以通过Map集合,同时设置多个流程变量
- Map集合的key表示流程变量的名称
- Map集合的value表示流程变量的值