第七篇Flowable核心内容之任务分配
Posted 波波烤鸭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第七篇Flowable核心内容之任务分配相关的知识,希望对你有一定的参考价值。
Flowable的任务分配
1.任务分配
1.1 固定分配
固定分配就是我们前面介绍的,在绘制流程图或者直接在流程文件中通过Assignee来指定的方式
1.2 表达式分配
Flowable使用UEL进行表达式解析。UEL代表Unified Expression Language,是EE6规范的一部分.Flowable支持两种UEL表达式: UEL-value 和UEL-method
1.2.1 值表达式
值表达式 Value expression: 解析为一个值。默认情况下,所有流程变量都可以使用。(若使用Spring)所有的Spring bean也可以用在表达式里。例如
$myVar
$myBean.myProperty
案例讲解:
可以看到通过表达式处理的效果
先部署流程,然后在启动流程实例的时候绑定表达式对应的值
/**
* 启动流程实例
*/
@Test
public void testRunProcess()
// 获取流程引擎对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 启动流程实例通过 RuntimeService 对象
RuntimeService runtimeService = processEngine.getRuntimeService();
// 设置 assignee 的取值
Map<String,Object> variables = new HashMap<>();
variables.put("assignee0","张三") ;
variables.put("assignee1","李四");
// 启动流程实例,第一个参数是流程定义的id
ProcessInstance processInstance = runtimeService
.startProcessInstanceById("MyHolidayUI:1:4", variables);// 启动流程实例
// 输出相关的流程实例信息
System.out.println("流程定义的ID:" + processInstance.getProcessDefinitionId());
System.out.println("流程实例的ID:" + processInstance.getId());
System.out.println("当前活动的ID:" + processInstance.getActivityId());
在流程变量表中我们可以看到对应的流程变量信息
同时在Task表中,可以看到流程当前的分配人是张三
,说明UEL表达式被解析了
1.2.2 方法表达式
方法表达式 Method expression: 调用一个方法,可以带或不带参数。**当调用不带参数的方法时,要确保在方法名后添加空括号(以避免与值表达式混淆)。**传递的参数可以是字面值(literal value),也可以是表达式,它们会被自动解析。例如:
$printer.print()
$myBean.addNewOrder('orderName')
$myBean.doSomething(myVar, execution)
myBean是Spring容器中的个Bean对象,表示调用的是bean的addNewOrder方法
1.3 监听器分配
可以使用监听器来完成很多Flowable的流程业务。
我们在此处使用监听器来完成负责人的指定,那么我们在流程设计的时候就不需要指定assignee
创建自定义监听器:
/**
* 自定义的监听器
*/
public class MyTaskListener implements TaskListener
@Override
public void notify(DelegateTask delegateTask)
System.out.println("监听器触发了:" + delegateTask.getName());
if("提交请假流程".equals(delegateTask.getName()) &&
"create".equals(delegateTask.getEventName()))
// 指定任务的负责人
delegateTask.setAssignee("小明");
else
delegateTask.setAssignee("小张");
然后在FlowableUI中关联对应的监听器
create:任务创建后触发
assignment:任务分配后触发
Delete:任务完成后触发
All:所有事件都触发
然后我们先部署流程,然后执行查看效果:
然后在Task表中我们可以看到对应的分配人为小明
说明通过监听也完成了任务分配的工作了
到这儿就搞定了~
以上是关于第七篇Flowable核心内容之任务分配的主要内容,如果未能解决你的问题,请参考以下文章
javaWeb核心技术第七篇之HTTPTomcatServletRequest和Response