@Test
public void suspendOrActiveProcessInstance() {
}
// 流程实例id
String processInstanceId = \;
// 获取RunTimeService
RuntimeService runtimeService = processEngine.getRuntimeService();
//根据流程实例id查询流程实例
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() .processInstanceId(processInstanceId).singleResult(); boolean suspend = processInstance.isSuspended(); if(suspend){
//如果暂停则激活
runtimeService.activateProcessInstanceById(processInstanceId);
System.out.println(\流程实例:\+processInstanceId+\激活\); }else{
//如果激活则挂起
runtimeService.suspendProcessInstanceById(processInstanceId);
System.out.println(\流程实例:\+processInstanceId+\挂起\); }
3 个人任务
个人任务,指定单个办理人(任务分配) 去办理任务。
3.1 任务分配
3.1.1 固定分配
设置该任务task的assignee(任务办理人)。
缺点:
将任务办理人硬编码在.bpmn文件中,如果该办理人变更需要修改bpmn文件,重新部署流程定义,过程麻烦,系统可以扩展性差。
3.1.2 使用表达式(常用)
使用UEL表达式设置任务办理人。
Activiti使用UEL表达式,UEL是java EE6规范的一部分,UEL(Unified Expression Language)即统一表达式语言,activiti支持两个UEL表达式:UEL-value和UEL-method。
? UEL-value
UEL-value定义如下:
Assignee是一个流程变量,assignee是流程变量名称。 ${assignee}获取流程变量的值 ,作为任务的办理人。
注意:如果 assignee流程变量不存在,activiti就会抛出异常。
从流程变量(pojo)中获取值:
user也是activiti的一个流程变量,是一个pojo,user.assignee表示通过调用user的getter方法获取值。
? UEL-method方法
userBean是spring容器中的一个bean,表示调用该bean的getUserId()方法。
通过调用 userBean的getUserId()方法,获取一个值,将这个值作为任务办理人。
? UEL-method与UEL-value结合
再比如:
${ ldapService.findManagerForEmployee(emp) }
ldapService是spring容器的一个bean,findManagerForEmployee是该bean的一个方法 emp是activiti流程变量,emp作为参数传到ldapService.findManagerForEmployee方法中。
? 其它
表达式支持解析基础类型、bean、list、array和map,也可作为条件判断。 如下:
${order.price > 100 && order.price < 250}
3.1.3 使用监听器
定义步骤:
1、 自定义一个任务监听器,实现org.activiti.engine.delegate.TaskListener。 在监听器中要设置任务办理
2、 在流程定义文件中设置任务监听器 方法1:修改.bpmn文件
方法2:通过activiti的流程设计 器设置监听器
确定 监听器执行时机:
Create:在任务创建时执行(在创建任务分配任务办理人) Assignment:在任务分配时执行 Complete:在任务完成时执行 All:以上边全部情况下执行
选择监听器类:
查看.bpmn文件: 监听器配置如下:
注意:只要bpmn文件变更就需要重新部署流程定义文件。
运行流程:
启动一个流程实例: 自动创建第一个任务
在第一个任务上设置了监听器(执行时机是在创建时执行),监听器设置该任务的办理人为”zhangsanfeng”
通过测试,监听器设置任务的办理人:
3.2 执行任务操作数据表
任务创建后会向当前任务表插入一条记录: SELECT * FROM act_ru_task #当前运行任务表
记录当前任务信息,如果任务完成了,从此表删除任务记录。
Id_:任务id(主键) (重点) 对任务的操作根据此id执行
Execution_id_:对应流程实例的执行id proc_inst_id_:对应流程实例的id(重点) proc_def_id_:对应流程定义的id name_:任务名称(重点)
task_def_key_:任务标识(重点) assignee_:任务办理人(重点)
SELECT * FROM act_ru_identitylink #流程当前参与者(人、组)信息 记录流程当前参与者信息,记录了流程执行过程中所有参与者
SELECT * FROM act_hi_taskinst #历史任务表(用于查询历史 信息)(重点) 记录任务的历史信息,在任务创建时向历史任务表插入一条记录
SELECT * FROM act_hi_actinst #历史活动表(用于查询历史 信息) 记录流程执行过程中所有结点