https://www.jianshu.com/p/aadbfd0e37b0
https://blog.csdn.net/whatlookingfor/article/details/52958668
https://www.jianshu.com/p/8f8b4de761ab?appinstall=0
英文文档
https://www.activiti.org/javadocs/index.html
插件
actibpm
用于绘制工作流文件bpmn
idea自带的Diagram
需要开启UML, JBOSSJBPM
并且将bpmn文件改为xml 形成png图片,然后改回至bpmn
插件乱码file encodings全部改为utf8
vmoptions文件最后加上
-Dfile.encoding=UTF-8
---------------------------------------------------------------------------------------------------------------------------------
总流程
概念,流程,流程实例,任务
流程也就是bpmn模板,一个流程对应多个流程实例,流程实例也就是流程以参数形式存放打数据库,一种直观数据体现形式,任务是流程实例启动后的状态,有开始,正在进行,结束,正在进行分为多个步骤
repositoryService.createDeployment()
部署,分三步
act_ge_bytearray 流程文件bpmn,png以二进制形式存储 与act_re_deployment 通过DEPLOYMENT_ID_关联
act_re_deployment 流程名称信息
act_re_procdef 流程实例 复合型id,名字为流程图设定的name key为流程图写的id,用于标识不同的记录 RESOURCE_NAME_存放bpmn文件的目录和名字
DGRM_RESOURCE_NAME_用于存放png文件的目录和名字 与act_re_deployment 通过DEPLOYMENT_ID_关联
runtimeService.startProcessInstanceById(actBusiness.getProcDefId(), actBusiness.getId(), actBusiness.getParams())
启动流程,启动后会产生3种id 流程定义id 流程实例id 当前活动id,流程启动后参与者可以查看自己所在多个任务中的代办任务
TaskQuery query = taskService.createTaskQuery().taskCandidateOrAssigned(userId);
查询任务中的代办任务
act_ru_task 任务表 act_ru_task.PROC_DEF_ID_与act_re_procdef.id关联
taskService.complete(id);
审批通过
过程:
act_hi_taskinst 历史存储开始任务,通过任务,结束任务
act_hi_actinst 历史存储开始任务,通过任务,结束任务与流程实例挂钩
act_hi_identitylink 历史任务的参与者 与任务和与流程实例挂钩
act_ru_task 当前正在执行的任务,如果已结束,从这张表删除
act_ru_identitylink 正在执行的任务参与者
---------------------------------------------------------------------------------------------------------------------------------
部署模板的时候可以打包成zip而不用原生的bpmn或者png,因为多的时候一个一个传太慢了
打包的zip在部署的时候,activiti会自动对zip文件进行解压,分别存储为bpmn和png存到act_ge_bytearray源文件,act_re_deployment流程名称,
act_re_procdef流程实例
查询流程的定义List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list();
当前流程未完成,如果想删除得要级联删除
repositoryService.deleteDeployment(actProcess.getDeploymentId(), true);
actProcessService.delete(id);
查询历史
historyService.createHistoricTaskInstanceQuery().or().taskCandidateUser(userId).
BusinessKey业务关联id 在创建流程实例的时候将BusinessKey放到流程实例表里面 存放到act_ru_execution这张表里面
分配任务负责人分为固定分配,表达式分配${},监听器分配
如果采用UEL表达式就会将审批人存储到act_ru_variable的name和text中
流程变量,用于控制流程分支走向 taskService.setVariable
组任务,设定多个负责人 candidate-users 任务候选人要拾取任务变为自己的任务 归还任务就是把任务负责人设置为null
排他网关也可以确定流程分支走向,它与连线的区别是,如果不满足条件,连线会直接结束,而排他网关会抛出异常,异常结束,从而知道这个位置
有问题,如果几个节点都满足条件,走id最小的那个节点
并行网关不会解析条件,如果有条件会忽略,直接走连线的所有节点,并行网关需要所有节点全部完成了才会继续往下走
包含网关是排他和并行网关的结合体