zoukankan      html  css  js  c++  java
  • Activiti-个人任务

    1.分配任务负责人

      1.1 固定分配

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

        

        在properties视图中,填写Assignee项为任务负责人;

        注意事项:由固定分配方式,任务只管一步一步执行任务,执行到每一个任务将按照bpmn的配置去分配任务负责人;

      1.2 表达式分配

        1.2.1 UEL表达式

          Activiti使用UEL表达式,UEL是java EE6规范的一部分,UEL即统一表达式语言,activiti支持两个UEL表达式:UEL-value和UEL-method;

          1.2.1.1 UEL定义如下:

            

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

            或:

            

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

          1.2.1.2 UEL-method方式如下:

            

            userBean是spring容器中的一个bean,表示调用该bean的getUserId()方法;

          1.2.1.3 UEL-method与UEL-value结合:

            ${ldapService.findManagerForEmployee(emp)}

            ldapService是spring容器的一个bean,findManagerForEmployee是该bean的一个方法,emp是activiti流程变量,emp作为参数传到ldapService.findManagerForEmployee方法中;

            流程变量,emp作为参数传到ldapService.findManagerForEmployee方法中;

          1.2.1.4 其他:

            表达式支持解析基础类型,bean,list,array和map,也可作为条件判断;

            如下:

              ${order.price>100 && order.price<250}

      1.3 使用流程变量分配任务

        1.3.1 定义任务分配流程变量

          

        1.3.2 设置流程变量

          在启动流程实例时设置流程变量,如下:   

    package com.wn.hoilday;
    
    import com.wn.entity.Hoilday;
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.RuntimeService;
    import org.activiti.engine.runtime.ProcessInstance;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /*启动流程*/
    public class StartInstance {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取RuntimeService
            RuntimeService runtimeService = processEngine.getRuntimeService();
            //设置流程变量
            Hoilday hoilday=new Hoilday();
            hoilday.setNum(3);
            //定义一个map集合,存放assignee的值
            Map<String ,Object> assMap=new HashMap<>();
            assMap.put("hoilday",hoilday);
            //启动一个流程实例
            ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("hoilday2", assMap);
            System.out.println("流程启动成功!");
        }
    }

      1.4 注意事项

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

      1.5 监听器分配

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

        

        create:任务创建后触发;

        Assignment:任务分配后触发;

        Delete:任务完成后触发;

        All:所有事件发生后触发;

        定义任务监听类,且类必须实现org.activiti.engine.delegate.TaskListener接口;

    package com.wn.entity;
    
    import org.activiti.engine.delegate.DelegateTask;
    import org.activiti.engine.delegate.TaskListener;
    
    public class MyTaskListener implements TaskListener {
        @Override
        public void notify(DelegateTask delegateTask) {
            //这里执行任务负责人
            delegateTask.setAssignee("zhangsan");
        }
    }

      1.6 注意事项

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

    2. 查询任务

      查询任务负责人的代办任务;

    package com.wn.hoilday;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.TaskService;
    import org.activiti.engine.task.Task;
    
    import java.util.List;
    
    /*查看代办任务*/
    public class GetTask {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取一个TaskService对象
            TaskService taskService = processEngine.getTaskService();
            //查询代办业务 createTaskQuery查询任务  taskCandidateOrAssigned查询任务执行者    processDefinitionKey执行查看流程
            //查看hoilday流程中zhangsan代办的任务
            //taskCandidateOrAssigned匹配规则: 1.Assigned   2.配置bpmn文件中定义的值
            /*List<Task> list = taskService.createTaskQuery().taskCandidateOrAssigned("zhangsan").processDefinitionKey("hoilday").list();*/
            //taskAssignee查看当前指定人的指定任务
            List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").processDefinitionKey("hoilday").list();
            for (Task task:list){
                System.out.println("任务名称:"+task.getName());
                System.out.println("任务执行人:"+task.getAssignee());
                System.out.println("任务ID:"+task.getId());
                System.out.println("流程实例ID:"+task.getProcessInstanceId());
            }
        }
    }

    3. 关联businessKey

      在activiti实际应用时,查询待办任务可能要显示出业务系统的一些相关信息,比如:查询待审批请假单任务列表需要将请假单的日期,请假天数等信息显示出来,而并没有在activiti数据库中存在,所以是无法通过activiti的api查询到请假天数等信息;

      实现:在查询待办任务时,通过businessKey关联查询业务系统的请假单表,查询出请假天数等信息;

        

    4.办理任务

      指定任务ID,调用TaskService完成任务;

    package com.wn.hoilday;
    
    import org.activiti.engine.ProcessEngine;
    import org.activiti.engine.ProcessEngines;
    import org.activiti.engine.TaskService;
    
    /*任务处理
    * `act_hi_identitylink`     历史参与者信息
    * `act_hi_taskinst`         历史任务信息
    * `act_ru_execution`        任务执行信息
    * `act_ru_task`             任务信息
    * 当所有任务处理完毕,对应当前流程实例信息删除,但是可以在历史中查看该信息
    * */
    public class CompleteTask {
        public static void main(String[] args) {
            //获取ProcessEngine
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
            //获取TaskService对象进行流程部署
            TaskService taskService = processEngine.getTaskService();
            //任务处理
            taskService.complete("7502");
        }
    }

        

  • 相关阅读:
    XMPP核心协议客户端
    平安中国
    读写XML的API们
    IM只是可以用来玩的东西
    再骂自己一句
    淡定
    自己打造SAX和DOM Parser
    Nickel Instant Messeging System
    XMPP RFC阅读笔记(二)
    think in java 笔记
  • 原文地址:https://www.cnblogs.com/wnwn/p/12641760.html
Copyright © 2011-2022 走看看