原文转载:https://blog.csdn.net/c1225992531/article/details/81181017
https://blog.csdn.net/Cs_hnu_scw/article/details/79059965
- 1,工作流的生命周期:定义,发布,执行,监控(审批),优化
- 2,activiti的ORM框架MyBatis3,支持spring和restful
- 3,分配任务的三种方式:
- 1,直接给值,在XXX.bpmn文件中指定,不够灵活
- 2,流程变量
- 3,使用类 监听这个类(实现一个接口),指定任务办理人
- 4,工作流使用步骤:
- 一,部署;流程图BPMN
1,流程系统,客户提供流程执行的图,
2,程序员使用activiti插件画流程图,将流程图部署到程序中 - 二, 部署流程定义repositoryService
- 三, 启动流动实例runtimeService
- 四, 设置流程变量setVariable(任务ID,流程变量名称,流程变量的值)
- 五, 查询任务
- 六, 声明任务(一个候选人可忽略)
- 七, 完成任务(设置流程变量,用于排他网关)
- 一,部署;流程图BPMN
- 5,BPMN规范
- 1)启动和结束事件
- 1.1启动事件(通过runtimeService.startProcessInstance(方法触发来启动一个流程实例))
空启动事件
定时启动事件:一次性定时启动,特定时间间隔后启动,定期循环流程
异常启动事件:在另一个流程抛出异常结束事件的时候被触发,“捕获型”
消息启动事件:通过消息名称触发,从而启动一个流程实例 - 1.2结束事件
空结束事件:抛出为空,不处理抛出结果
异常结束事件:相对于空结束事件,有抛出结果
终止结束事件:空启动事件结束的仅仅是一条输出流,而终止结束事件结束的是整个流程实例
取消结束事件:取消结束事件可以取消一个事物子流程的执行
- 1.1启动事件(通过runtimeService.startProcessInstance(方法触发来启动一个流程实例))
- 2)顺序流
-
- 任务
- 4)网关
- 4.1排他网关(需要判断)
如果多个线程的计算结果都为true,那么只执行第一个值为true,忽略其他的网关;如果多个网关都没有true就抛出异常 - 4.2并行网关(不支持条件判断,设置了也会被忽视)
拆分
合并:注意,所有线路都执行完成才能继续向下执行 - 4.3包容网关(排他和并行的合并)
- 4.4事件网关
- 4.5子流程和调用活动:最大的区别就是子流程是嵌入在主流程的,调用活动是一个完整的流程
(还有事件子流程,事务子流程) - 4.6边界和中间事件(注:一旦触发边界事件,当前活动就会被中断,一个活动只能绑定一个边界)
- 4.7监听器
执行监听器,任务监听器(实现接口或者定义一个表达式类似于EL的语法)
- 4.1排他网关(需要判断)
- 1)启动和结束事件
- 6,用户和组
- 1,创建activitiRule对象,获取identityService实例
- 2,创建用户或者组对象,保存用户或组
- 3,将用户加入到组中(createMembershipzzz(用户名,组名))
- 4, 启动流程
- 5, 查询并用户作为任务候选人(可以多个候选人)
- 6, 声明/获得任务claim(任务ID,用户名)(注:其他候选人失效)
- 7, 完成任务complete(任务ID)
- 7,部署流程资源
- 流程:
- 1)定义/获取资源,
- 2)创建部署构造器createDeployment()
- 3)添加资源
- 4)执行部署deploy()
- 资源:
- 1)classpath方式: addClasspathResource(路径)(多用户开发测试环节)
- 2)inputStream方式: addInputStream(bpmn文件,输入流)(产品环境常用)
- 3)字符串方式: addString(bpmn文件,xml字符串),实现原理是将字符串内容转换成字节流
- 4)压缩包方式: addZipInputStream(zip流)
删除部署:repositoryService.deleteDeployment(deploymentId,true)
- 流程:
- 8,流程变量(Variable)
- 1)作用域是流程实例
- 2)setVariable(任务ID,流程变量名称,流程变量的值)注:相同流量变量名称,会覆盖之前的值(不想覆盖使用setVariableLocal)
- 3)javabean类型设置流程变量,需要实现serializable序列化接口
- 4)设置流动变量时(正在执行),向ACT_RU_VARIABLE表中添加数据,历史流程变量的查询,查询ACT_HI_VARINST表
- 9,监听器
- 1)实现ExecutionListener流程实例接口
- 2)实现TaskListener任务接口
- 10,接收活动 receiveTask机器自动完成的任务,只会在act_ru_execution表中产生一条数据
- 1)查询执行对象Execution
- 2)使用流程变量来传递参数
- 3)向后执行一步,如果流程处于等待状态,使得流程继续执行
processEngine.getRuntimeService().signal(execution.getId());