zoukankan      html  css  js  c++  java
  • Activiti的分配任务负责人(八)

    1分配任务负责人

    1.1 固定分配

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

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

    1.2 表达式分配

    1.2.1 UEL 表达式

    Activiti 使用 UEL 表达式, UEL java EE6 规范的一部分, UELUnified 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 容器的一个 beanfindManagerForEmployee 是该 bean 的一个方法, emp activiti
    流程变量, emp 作为参数传到 ldapService.findManagerForEmployee 方法中。
    其它
    表达式支持解析基础类型、 beanlistarray 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表达式比较多

  • 相关阅读:
    【shell脚本】批量修改扩展名===modifyExtension.sh
    【shell脚本】打印九九乘法表
    【shell脚本】显示进度条
    【Linux命令】Linux压缩及解压命令
    【Linux命令】ulimit设置最大文件打开数
    【mysql】修改mysql数据库密码
    【raid级别】RAID级别工作模式
    MyBatis之#{} and ${}
    MyBatis之foreach
    强制修改常量的值
  • 原文地址:https://www.cnblogs.com/dalianpai/p/11885810.html
Copyright © 2011-2022 走看看