Activiti-个人任务

摘要:
1.分配任务所有者1.1固定分配在业务流程建模期间指定固定任务所有者;在properties视图中,填写Assignee项作为任务所有者;注:通过固定分配方法,任务是逐步执行的,任务负责人将根据bpmn的配置分配给每个任务;1.2表达式分配1.2.1 UEL表达式Activiti使用UEL表达式,UEL是javaEE6
1.分配任务负责人

  1.1 固定分配

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

    Activiti-个人任务第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定义如下:

        Activiti-个人任务第2张

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

        或:

        Activiti-个人任务第3张

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

      1.2.1.2 UEL-method方式如下:

        Activiti-个人任务第4张

        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 定义任务分配流程变量

      Activiti-个人任务第5张

    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逻辑或表达式;

    Activiti-个人任务第6张

    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关联查询业务系统的请假单表,查询出请假天数等信息;

    Activiti-个人任务第7张

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");
    }
}

    

免责声明:文章转载自《Activiti-个人任务》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JS前端数据多条件筛选(商品搜索)差分方程的零输入响应与零状态响应下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Activiti如何替换已部署流程图

  首先交代下背景:我们有一个已经上线的activiti工作流系统,对于流程图的操作已经封装好部署,查看,删除的接口。此时客户提出要修改个别流程图里的节点名称。   我的第一个想法就是本地修改流程图bpmn文件,然后去客户端先调用删除接口删除旧流程图,然后调用部署接口添加修改后的流程图,然而事实上,因为系统已经上线,此时存在大量运行中的工作流数据,一旦执行...

IDEA创建Activiti工作流开发

一、 安装Activiti插件 1. 首先打开FIle的setting功能,搜索Plugins:    2. 输入actiBPM,然后点击搜索: 3. 点击安装、应用: 安装好之后点击apply(应用),之后重启idea 二、 创建Activiti工作流并导出流程图图片 1. 重启IDEA之后,点击File文件中的New下的BpmnFile:...

eclipse安装Activiti Designer插件(转载:http://blog.csdn.net/qq_33547950/article/details/54926435)

为了完成毕业设计,需要学习Activiti。万事开头难,果然刚开始就遇到了问题。《Activiti实战》和视频教程里提供的安装Activiti Designer插件方法(即下文方法一)不能成功安装。各种百度之后大概有以下方法,其中方法二(改)实测安装成功,感谢网上的无名大神们。 方法一:在线安装(可能因网络等原因安装失败) 打开eclipse,在Hel...

jbpm 6 vs activities 5评估(持续更新、亲测实际项目评估)

最近我们有个使用了jbpm 6.2(6.2是一个较大的里程碑)的批处理模块,因为大BOSS一直觉得太重了,希望有更加轻量级的解决方案,因为我们基本上没有真正意义上流程的概念,只有静态的流程图,因为一直忙于其他事情,于是这周才正式开始研究jbpm的一些细节(前几年很多支持的项目中也接触过,不过更多的是解决一些故障类问题,本身对流程类的不感冒)。顺便研究了下j...

Spring boot 整合Activiti中遇到的问题

Pom.xml 配置<!-- activiti --> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter-basic</artifactId> <vers...

Activiti 开发案例之动态指派任务

流程图 以上是一个请假的流程图,以下为流程任务节点描述: 员工发起请假流程 部门经理审批 同意则进入人事审批 拒绝则调整申请或者直接结束流程 人事审批通过则进入销假环节 人事审批拒绝则调整申请或者直接结束流程 员工销假结束流程 任务分配 员工发起申请 ProcessInstance process = runtimeService.startPro...