Activiti7.0进阶学习(三):assignee的值用UEL的POJO实现

背景

  1. POJO, 这个概念其实来自Spring中,叫做增强型Java对象。因为Spring是非侵入式编程模式,我们开发者自定义的实体,既可以变成POJO类型的实体服务于Spring框架,这个变成的POJO类型的实体,在其他地方使用也没有任何影响。
  2. 其实就是这样的形式${holiday.num}, 表达式会调用一个getNum()方法。其实我们的JSP中也有这样的EL表达式知识。Mybatis的中占位符的表达式写法,其实也是Java代码调用getNum()方法。
  3. 要测试一个小知识,会稍微有些繁琐。因此,通过反复练习,达到熟练。
  4. 画流程定义图 -> 部署流程定义图 -> 实例化流程定义(初始化一个流程实例)-> 负责人处理任务。
  5. 在上面的一个过程中,assignee的赋值,我们需要考量赋值的方式是什么?赋值的时机又是什么?

过程

  • 流程定义图(${holiday.applyName} ${holiday.managerName})
    Activiti7.0进阶学习(三):assignee的值用UEL的POJO实现_第1张图片

  • 静态资源文件(png,bpmn)

  • POJO(需要实现序列化接口,Serializable)

public class Holiday implements Serializable {
    private String applyName;
    private String managerName;

    public String getApplyName() {
        return applyName;
    }

    public void setApplyName(String applyName) {
        this.applyName = applyName;
    }

    public String getManagerName() {
        return managerName;
    }

    public void setManagerName(String managerName) {
        this.managerName = managerName;
    }
}

  • 部署
@Test
    public void deploy() {
        //1. 通过工具类(ProcessEngines)获取引擎实例
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2. 得到RepositoryService实例
        RepositoryService repositoryService = processEngine.getRepositoryService();

        //3. 得到部署实例
        Deployment deployment = repositoryService.createDeployment()
                .name("测试pojo分配值")
                .addClasspathResource("bpmn/holiday09.bpmn")
                .addClasspathResource("bpmn/holiday09.png")
                .deploy();
        System.out.println("部署ID:" + deployment.getId());
        System.out.println("部署名称:" + deployment.getName());
    }
  • 实例化
@Test
    public void startProcessAndAssigneeValue() {
        //1. 通过工具类(ProcessEngines)获取流程引擎实例
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2. 得到RuntimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();

        //3. 设置assignee的取值,用户在界面上设置流程的执行人
        Map<String, Object> map = new HashMap<>();
        Holiday holiday = new Holiday();
        holiday.setApplyName("Ted");
        holiday.setManagerName("Karen");
        map.put("holiday", holiday);

        //4. 启动流程实例,同时还要设置流程定义的assignee的值
        runtimeService.startProcessInstanceByKey("myProcess_1", map);
    }

  • 数据库结果展示
    act_ru_identitylink
    在这里插入图片描述
    act_ru_task
    在这里插入图片描述
  • 当Ted处理完成任务后,会发生什么?(Ted完成请假表单的填写)
 @Test
    public void dealWithTaskByTed() {
        //1. 通过工具类(ProcessEngines)获取流程引擎实例
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2. 得到TaskService实例
        TaskService taskService = processEngine.getTaskService();

        //3. 根据流程定义的key,负责人assignee来实现当前用户的任务列表查询
        List<Task> taskList = taskService.createTaskQuery()
                .processDefinitionKey("myProcess_1")
                .taskAssignee("Ted")
                .list();

        //4. 任务处理
        for (Task task: taskList) {
            taskService.complete(task.getId());
        }
    }
  • 结果
    在这里插入图片描述

  • 任务处理

小结

  1. 记录操作步骤。assignee的值用UEL的POJO实现。

你可能感兴趣的:(Activiti)