目录
activiti.cfg.xml
activiti默认配置文件
1.数据源配置
2.activiti单独运行的ProcessEngine配置对象(processEngineConfiguration),
使用单独启动方式,默认情况下:bean的id=processEngineConfiguration
<bean id="processEngineConfiguration01" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!--代表数据源-->
<property name="dataSource" ref="dataSource"></property>
<!--代表是否生成表结构-->
<property name="databaseSchemaUpdate" value="true"/>
</bean>
helloworld
//1.创建ProcessEngineConfiguration对象 第一个参数:配置文件名称 第二个参数是processEngineConfiguration的bean的id
ProcessEngineConfiguration configuration = ProcessEngineConfiguration
.createProcessEngineConfigurationFromResource("activiti.cfg.xml","processEngineConfiguration01");
//2.创建ProcesEngine对象
ProcessEngine processEngine = configuration.buildProcessEngine();
//条件:1.activiti配置文件名称:activiti.cfg.xml 2.bean的id="processEngineConfiguration"。完成这步后创建了25张空表
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
//2.得到RepositoryService实例
RepositoryService repositoryService = processEngine.getRepositoryService();
Deployment deployment = repositoryService.createDeployment()
.name("请假申请单流程")
.addClassPathResources("xxx.png")
.addClassPathResources("xxx.bpmn").deploy();
或者:
Deployment deployment = repositoryService.createDeployment()
.addZipInputStream(zipInputStream)
.name("请假申请单流程")
.deploy();
数据库表命名
ACT_RE_* : re表示repository,包含流程定义和 流程静态资源
ACT_RU_* : ru表示runtime,运行时的表,包含流程实例、任务,变量,异步任务,
等运行中的数据。activiti只在流程实例执行过程中保存这些数据,流程结束时就会删除这些记录
ACT_HI_* : history,历史数据
ACT_GE_* : general通用数据
processEngine 与其Service介绍
- RepositoryService
- RuntimeService
- TaskService
- HistoryService
- ManagerService
流程定义与流程实例关系
- 流程定义:
repositoryService.createDeployment()
.addZipInputStream(zipInputStream)
.name("请假申请单流程")
.deploy();
涉及三张表:
act_re_deployment、act_re_procdef、act_ge_bytearray
- 流程实例
启动一次请假流程会创建一个新的流程实例
RuntimeService runtimeService = processEngine.getRuntimeService();
//3.创建流程实例 流程定义的key=holiday
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday");
流程的挂起与激活
Boolean processDefinition.isSuspended()
repositoryService.activateProcessDefinitionById(processDefinitionID)
repository.suspendProcessDefinitionByID(processDefinitionID)
流程定义挂起后,不允许启动新的流程实例,该定义下所有流程实例挂起暂停执行
- 单个流程实例的挂起与激活
processInstance.isSuspended()
runtimeService.activateProcessInstanceById(processInstanceID)
runtimeService.suspendProcessInstanceByID(processInstanceID)
个人任务assignee
- 固定写死assignee
- UEL表达式:unified expression language
java EE规范一部分
bpmn图,assignee栏设置${assignee01}
Map = new hashMap
map.put("assignee01","张三")
runtimeService.startProcessInstanceByKey("processDefinitionKey",map)
流程变量
设置在userTask上,设置在连线上condition
组任务candidate user
多个候选人用逗号隔开
- 组任务办理流程
1.查询组任务
2.拾取任务:taskService.claim(taskId,user)
3.查询个人任务
4.办理任务
2.归还任务:taskService.setAssignee(taskId,null)
查询任务的时候使用的是taskCandidateUser而不是taskAssignee
任务交接
taskService.setAssignee(taskId,candidateUser)
网关
排他网关exclusiveGateway、并行网关parallelGateway、包含网关inclusiveGateway
-
排他网关
即使两个分支条件都为true,也只会选择一条分支执行。
使用排他网关原因:多个分支都为true,同时都跑进去,分支都为false,会流程异常结束,分支都为false,排他网关也会抛异常 -
并行网关:fork与join,分支与汇聚
即使顺序流定义了条件也会被忽略,多个分支都完成了,才算是汇聚 -
包含网关,排他网关和并行网关结合体
可以走满足多个条件的分支,最后汇聚
监听器
- 流程监听器(ExecutionListener)
event有:start、end、take(监控连线时候使用)
start与end属于整个流程
take属于连线
start、end、take都是实现ExecutionListener接口
- 任务监听器(TaskListener ):也叫节点监听器
event有:create、delete、complete、assignment、all
assignment:节点配置了处理人所以触发assignment事件监听,assignment事件比create先执行
complete:任务完成的时候,触发complete事件,因为任务完成之后,要从ACT_RU_TASK中删除这条记录,所以触发delete事件
会签
Multi Instance:
SequenTial:false
Completion Condition
Collection
Element Variable
Assignee:对应ElementVariable
默认流程变量:nrOfInstances = nrOfCompletedInstances+nrOfActiviteInstances
- nrOfInstances(numberOfInstances):会签中总共的实例数
- nrOfCompletedInstances:已经完成的实例数量
- nrOfActiviteInstances:当前活动的实例数量,即还没有完成的实例数量
ServiceTask与UserTask区别
serviceTask:调Java接口代码