1分配任务负责人

1.1 固定分配

在进行业务流程建模时指定固定的任务负责人

在 properties 视图中,填写 Assignee 项为任务负责人。
注意事项
由于固定分配方式,任务只管一步一步执行任务,执行到每一个任务将按照 bpmn 的配置去分配任
务负责人。

1.2 表达式分配

1.2.1 UEL 表达式

Activiti 使用 UEL 表达式, UEL 是 java EE6 规范的一部分, UEL(Unified Expression Language)即
统一表达式语言, activiti 支持两个 UEL 表达式: UEL-value 和 UEL-method。
 UEL-value 定义如下:

assignee 这个变量是 activiti 的一个流程变量。

user 也是 activiti 的一个流程变量, user.assignee 表示通过调用 user 的 getter 方法获取值。

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}

1.2.2 使用流程变量分配任务

 定义任务分配流程变量

/**
* 启动流程实例,动态设置assignee
*/
public class AssigneeUEL { public static void main(String[] args) {
//1.得到ProcessEngine对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine(); //2.得到RuntimeService对象
RuntimeService runtimeService = processEngine.getRuntimeService(); //3.设置assignee的取值 用户可以在界面上设置流程的执行人
Map<String,Object> map = new HashMap<>();
map.put("assignee0","zhangsan");
map.put("assignee1","lishi");
map.put("assignee2","wangwu"); //4.启动流程实例,同时还要设置流程定义的assignee的值
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday2", map); //5.输出
System.out.println(processEngine.getName()); }
}

注意事项
由于使用了表达式分配,必须保证在任务执行过程表达式执行成功,比如:
某个任务使用了表达式${order.price > 100 && order.price < 250},当执行该任务时必须保证 order 在
流程变量中存在,否则 activiti 异常

1.3 监听器分配

任务监听器是发生对应的任务相关事件时执行自定义 java 逻辑 或表达式。
任务相当事件包括:

Create:任务创建后触发
Assignment:任务分配后触发
Delete:任务完成后触发
All:所有事件发生都触发
java 逻辑 或表达式:
表达式参考上边的介绍的 UEL 表达式,这里主要介绍监听类使用

public class MyTaskListener implements TaskListener {
@Override
public void notify(DelegateTask delegateTask) {
delegateTask.setAssignee("zhangsan");
}
}

注意事项
使用监听器分配方式,按照监听事件去执行监听类的 notify 方法,方法如果不能正常执行也会影响
任务的执行

注:实战中还是通过UEL表达式比较多

最新文章

  1. [Asp.net 5] Caching-缓存架构与源码分析
  2. WinForm中重绘TabControl选项卡标题
  3. KeyValue与KeyData与KeyCode区别(转)
  4. IntelliJ 有的时候移动滚动条后会自动回到光标所在位置的解决方法
  5. Revit二次开发-根据Element获取系统族信息
  6. Windows Phone 8.1开发:如何让ListView下拉加载更多?
  7. redirect_uri参数错误解决方法
  8. 【转载】来自苹果的编程语言——Swift简介
  9. 有效的XML: DTD(文档类型定义)介绍(转)
  10. 行业介绍:车载DVD MID 导航用料一般包含国腾LVDS芯片GM8284C/GM8283
  11. Hoffmann树
  12. IntelliJ IDEA 14.1.4设置关闭自动保存和标志改动文件为星号?
  13. Xcode插件失效以后的处理方法
  14. python笔记十四(高阶函数——map/reduce、filter、sorted)
  15. 就算会用python画颗心,可你依然还是只单身狗
  16. JavaScript 系列博客(七)
  17. 【PHPStorm使用手册】php interpreter is not configured
  18. codeforces723----C. Polycarp at the Radio
  19. npm快速入门
  20. llvm 编译

热门文章

  1. kafka学习(八)
  2. kafka学习(二)
  3. 分享一个linux系统中循环遍历两个数组内容,并输出数组中的不同内容的shell脚本
  4. soot学习历程---(1)
  5. php 操作Redis发送短信
  6. express与koa对比
  7. 你不知道的props和state
  8. webpack配置--传统多页面项目
  9. vue中项目如何引入sass (vue-cli项目)
  10. input check复选框选择后修改&lt;a&gt;标签超链接href