传智播客activiti课堂笔记2(3)

2019-08-29 19:10

@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 #历史活动表(用于查询历史 信息) 记录流程执行过程中所有结点


传智播客activiti课堂笔记2(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:CS的顶级会议和期刊

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: