• Activiti学习笔记


    activiti入门

    1. activiti官网
    2. pom.xml文件
      <!-- activiti -->
       <dependency>
         <groupId>org.activiti</groupId>
         <artifactId>activiti-engine</artifactId>
         <version>5.18.0</version>
       </dependency>
       <dependency>
         <groupId>org.activiti</groupId>
         <artifactId>activiti-spring</artifactId>
         <version>5.18.0</version>
       </dependency>
       <!-- activiti结束 -->
      
    3. 安装activiti插件
      CSDN教程
    4. 创建bpm图
      bpmn图
      1.开始点
      2.结束点
      3.任务
      4.执行人
      5.流程id,流程名
    5. 部署流程

       public class Test {
           // getDefaultProcessEngine会读取activiti.cfg.xml
           ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
      
           /**
            * 部署流程
            */
           @org.junit.Test
           public void deploy() {
               //读取资源文件部署
               Deployment deploy = processEngine.getRepositoryService().createDeployment()
                       .addClasspathResource("bpmn/helloWorld.bpmn").addClasspathResource("bpmn/helloWorld.png").deploy();
               // act_re_deployment部署对象表
         // act_re_procdef 流程定义表
         // act_ge_bytearray 资源文件表
               System.out.println(deploy.getId());
               System.out.println(deploy.getName());
           }
       }
      
    6. 启动流程

      /**
      * 启动流程实例
      */
      @org.junit.Test
      public void run() {
       // key值对应bpmn中流程的id 默认按最新版本启动
       ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey("helloWorld");
       // 流程实例id
       System.out.println(pi.getId());
       // 流程定义id
       System.out.println(pi.getProcessDefinitionId());
      
      }
      
    7. 查询任务

      /**
      * 查询任务
      */
      @org.junit.Test
      public void task() {
       // 通过执行人进行查询
       List<Task> list = processEngine.getTaskService().createTaskQuery().taskAssignee("李四").list();
       for (Task task : list) {
         // 任务id
         System.out.println(task.getId());
         // 任务名
         System.out.println(task.getName());
         // 任务创建时间
         System.out.println(task.getCreateTime());
         // 流程实例id
         System.out.println(task.getProcessInstanceId());
         // 流程定义id
         System.out.println(task.getProcessDefinitionId());
      
       }
      
      }
      
    8. 完成任务
      /**
      * 完成任务
      */
      @org.junit.Test
      public void complete() {
       // 查询李四的所有任务
       List<Task> list = processEngine.getTaskService().createTaskQuery().taskAssignee("李四").list();
       for (Task task : list) {
         System.out.println(task.getId());
         // 通过任务id进行完成
         processEngine.getTaskService().complete(task.getId());
       }
      }
      
    9. 查询所有部署
         /**
          * 查询所有部署
          */
         @org.junit.Test
         public void findDeploy() {
           List<Deployment> deploymentList =
               processEngine.getRepositoryService().createDeploymentQuery().list();
           for (Deployment deployment : deploymentList) {
             System.out.println(deployment.getId());
             System.out.println(deployment.getName());
           }
         }
      
    10. 删除流程定义

       /**
         * 删除部署
         */
      
        @org.junit.Test
        public void deleteDeploy() {
          String deployString = "20001";
          // 部署表,流程定义表,资源表内容删除
          // 普通删除:如果本流程定义正在运行会抛出异常
          // 多级删除: 删除与本流程定义所关联的所有信息
          processEngine.getRepositoryService().deleteDeployment(deployString);
          System.out.println("删除部署成功");
      
        }
      
    11. 获得部署资源文件

        /**
         * 获得部署的资源文件
         * 
         * @throws IOException
         */
        @org.junit.Test
        public void getResources() throws IOException {
          // 部署对象id
          String id = "7501";
          // 查询出当前部署的所有资源文件png+bpm
          List<String> deploymentResourceNames =
              processEngine.getRepositoryService().getDeploymentResourceNames(id);
          String png = null;
          for (String name : deploymentResourceNames) {
            // 获得png文件名
            if (name.indexOf(".png") >= 0) {
              png = name;
            }
          }
          System.out.println(png);
          // 获得当前文件流
          InputStream resourceAsStream =
              processEngine.getRepositoryService().getResourceAsStream(id, png);
          File file = new File("d:/" + png);
          FileUtils.copyToFile(resourceAsStream, file);
      
        }
      
    12. 获得最新版本的流程定义
        /**
         * 查询最新坂本流程定义
         */
        @org.junit.Test
        public void queryLatestVersion() {
          // 查询流程定义按版本排序
          List<ProcessDefinition> list = processEngine.getRepositoryService()
              .createProcessDefinitionQuery().orderByProcessDefinitionVersion().asc().list();
          // 创建一个map用于存放最新版本的流程定义
          Map<String, ProcessDefinition> map = new HashMap<String, ProcessDefinition>();
          // 遍历流程定义集合
          for (ProcessDefinition processDefinition : list) {
            map.put(processDefinition.getKey(), processDefinition);
          }
          // 遍历最新版本流程定义获得信息
          for (ProcessDefinition processDefinition : map.values()) {
            System.out.println("id:" + processDefinition.getId());
            System.out.println("name:" + processDefinition.getName());
            System.out.println("key:" + processDefinition.getKey());
            System.out.println("version:" + processDefinition.getVersion());
          }
        }
      
    13. 查询流程状态
        /**
         * 查询流程状态
         */
        @org.junit.Test
        public void processState() {
          // 流程实例
          String pid = "47501";
          // 通过流程实例id进行查询返回唯一结果
          ProcessInstance singleResult = processEngine.getRuntimeService().createProcessInstanceQuery()
              .processInstanceId(pid).singleResult();
          // 判断结果不为空
          if (singleResult != null) {
            System.out.println("未完成");
            System.out.println(singleResult.getActivityId());
          } else {
            System.out.println("流程结束");
          }
        }
      
    14. 查询历史任务
        /**
         * 查询历史任务
         */
        @org.junit.Test
        public void getHistoryTasks() {
          // 历史任务办理人
          String assignee = "张三";
          // 通过历史任务办理人进行查询
          List<HistoricTaskInstance> list = processEngine.getHistoryService()
              .createHistoricTaskInstanceQuery().taskAssignee(assignee).list();
          // 遍历历史任务
          for (HistoricTaskInstance historicTaskInstance : list) {
            // 任务id
            System.out.println(historicTaskInstance.getId());
            // 任务办理人
            System.out.println(historicTaskInstance.getAssignee());
            // 任务名
            System.out.println(historicTaskInstance.getName());
            // 任务流程实例
            System.out.println(historicTaskInstance.getProcessInstanceId());
          }
        }
      
    15. 查询历史流程定义

        /**
         * 查询历史流程实例
         */
        @org.junit.Test
        public void historyProcessInstance() {
          // 通过流程定义key进行查询
          List<HistoricProcessInstance> list = processEngine.getHistoryService()
              .createHistoricProcessInstanceQuery().processDefinitionKey("helloWorld").list();
          // 遍历结果集
          for (HistoricProcessInstance historicProcessInstance : list) {
            System.out.println(historicProcessInstance.getId());
            // 启动时间
            System.out.println(historicProcessInstance.getStartTime());
            // 结束时间
            System.out.println(historicProcessInstance.getEndTime());
            // 持续时间
        System.out.println(historicProcessInstance.getDurationInMillis());
            System.out.println(historicProcessInstance.getName());
            System.out.println(historicProcessInstance.getProcessDefinitionKey());
          }
      
        }
      
    16. 设置与获取流程变量

        /**
         * 设置获取流程变量
         */
        @org.junit.Test
        public void setGetVariables() {
          String pi = "47501";
          String person = "李四";
          TaskService taskService = processEngine.getTaskService();
          Task task =
              taskService.createTaskQuery().processInstanceId(pi).taskAssignee(person).singleResult();
          String taskId = task.getId();
          // 设置流程变量
          taskService.setVariable(taskId, "审核意见", "同意");
          taskService.setVariable(taskId, "备注", "路上注意安全");
            /**
          * setVariable和setVariableLocal的区别
          * setVariable:流程变量名称相同的时候,后一次的值替换前一次的值,而且可以看到TASK_ID的字段不会存放任务ID的值
          * setVariableLocal:一个流程中存在2个活动节点,流程变量的名称相同,后一次的版本的值也不会替换前一次版本的值
          * 使用setVariableLocal说明流程变量绑定了当前的任务,当流程继续执行时,下个任务获取不到这个流程变量
          */
          // 变量存在javaBean前提要让javaBean实现序列化
          LeaveInfo leaveInfo = new LeaveInfo();
          leaveInfo.setId("1");
          leaveInfo.setLeaveMsg("test");
          taskService.setVariable(taskId, "javaBean", leaveInfo);
          // 获取流程变量
          String shyj = (String) taskService.getVariable(taskId, "审核意见");
          String bz = (String) taskService.getVariable(taskId, "备注");
          System.out.println(shyj);
          System.out.println(bz);
          // 同时要求流程变量对象的属性不能发生发生变化,否则抛出异常
          LeaveInfo javaBean = (LeaveInfo) taskService.getVariable(taskId, "javaBean");
          System.out.println(javaBean.getId());
          System.out.println(javaBean.getLeaveMsg());
        }
      

      流程变量

      1. RuntimeService对象可以设置流程变量和获取流程变量
      2. TaskService对象可以设置流程变量和获取流程变量
      3. 流程实例启动的时候可以设置流程变量
      4. 任务办理完成的时候可以设置流程变量
      5. 流程变量可以通过名称/值的形式设置单个流程变量
      6. 流程变量可以通过名称/值的形式设置单个流程变量
      • Map集合的key表示流程变量的名称
      • Map集合的value表示流程变量的值
    17. 查询历史流程变量

        /**
         * 查询历史流程变量
         */
        @org.junit.Test
        public void historyVariable() {
          HistoricVariableInstance variable =
              processEngine.getHistoryService().createHistoricVariableInstanceQuery().variableName("审核意见")
                  .processInstanceId("47501").singleResult();
          // 流程变量名
          System.out.println(variable.getVariableName());
          // 流程变量的值
          System.out.println(variable.getValue());
        }
      

      17.根据流程变量走不同的流程

      1. 流程图
        重要的
        不重要的
      2. 代码:

         package com.cjrj.bootactividemo;
        
         import java.util.HashMap;
         import java.util.Map;
         import org.activiti.engine.ProcessEngine;
         import org.activiti.engine.ProcessEngines;
         import org.activiti.engine.repository.Deployment;
         import org.activiti.engine.runtime.ProcessInstance;
         import org.activiti.engine.task.Task;
         import org.junit.Test;
        
         /**
          * 
          * 审核附加流程变量
          * 
          * @author Jamin
          *
          */
         public class Test2 {
           ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        
           @Test
           public void test() {
             // 部署
             Deployment deploy = processEngine.getRepositoryService().createDeployment()
                 .addClasspathResource("bpm/test.bpmn").addClasspathResource("bpm/test.png").name("test")
                 .deploy();
             // 启动
             ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey("myProcess");
             Task task = processEngine.getTaskService().createTaskQuery().taskAssignee("张三")
                 .processInstanceId(pi.getId()).singleResult();
             // 审批附加流程变量
             Map<String, Object> map = new HashMap<String, Object>();
             map.put("message", "重要");
             processEngine.getTaskService().complete(task.getId(), map);
             // 查询李四的任务
             Task task1 = processEngine.getTaskService().createTaskQuery().taskAssignee("李四")
                 .processInstanceId(pi.getId()).singleResult();
             // 如果message是重要task1不为空,如果message是不重要的task为空
             if (task1 != null) {
               System.out.println(task1.getName());
             } else {
               System.out.println("结束");
             }
           }
         }
        
    18. 排他网关
      排他网关图

      • 代码:

          package com.cjrj.bootactividemo;
          import java.util.HashMap;
          import java.util.Map;
          import org.activiti.engine.ProcessEngine;
          import org.activiti.engine.ProcessEngines;
          import org.activiti.engine.repository.Deployment;
          import org.activiti.engine.runtime.ProcessInstance;
        import org.activiti.engine.task.Task;
        
          /**
           * 排他网关
           * 
           * @author Jamin
           * 
           */
          public class Test3 {
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        
            @org.junit.Test
            public void test() {
              // 部署
              Deployment deployment = processEngine.getRepositoryService().createDeployment()
                  .addClasspathResource("reimburse/MyProcess.bpmn")
                  .addClasspathResource("reimburse/MyProcess.png").deploy();
              // 启动
              ProcessInstance processInstance =
                  processEngine.getRuntimeService().startProcessInstanceByKey("reimburse");
              // 查询任务
              Task task = processEngine.getTaskService().createTaskQuery().taskAssignee("张三")
                  .processInstanceId(processInstance.getId()).singleResult();
              System.out.println("------------------------------------------------");
              System.out.println(task.getId());
              System.out.println("-------------------------------------------------");
              // 完成任务,附带流程定义
              Map<String, Object> map = new HashMap<String, Object>();
              map.put("money", 10000);
              processEngine.getTaskService().complete(task.getId(), map);
              // 李四的任务
              Task lisi = processEngine.getTaskService().createTaskQuery().taskAssignee("李四")
                  .processInstanceId(processInstance.getId()).singleResult();
              Task wangwu = processEngine.getTaskService().createTaskQuery().taskAssignee("王五")
                  .processInstanceId(processInstance.getId()).singleResult();
              Task zhaoliu = processEngine.getTaskService().createTaskQuery().taskAssignee("赵六")
                  .processInstanceId(processInstance.getId()).singleResult();
              if (lisi == null) {
                System.out.println("李四没有任务");
              }
              if (wangwu == null) {
                System.out.println("王五没有任务");
              }
              if (zhaoliu == null) {
                System.out.println("赵六没有任务");
              }
            }
        }
        
    19. 接收任务
      接收任务

      • 代码:

          package com.cjrj.bootactividemo;
        
          import org.activiti.engine.ProcessEngine;
          import org.activiti.engine.ProcessEngines;
          import org.activiti.engine.repository.Deployment;
          import org.activiti.engine.runtime.Execution;
          import org.activiti.engine.runtime.ProcessInstance;
        
          /**
           * 接受任务(启动流程实例 执行查询执行对象 查询不到第一个)
           *
           * @author Jamin
           * @date 2019年7月16日 下午8:08:15
           * 
           */
          public class Task5 {
            ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
        
            @org.junit.Test
            public void test() {
              // 部署
              Deployment deploy = processEngine.getRepositoryService().createDeployment()
                  .addClasspathResource("message/message.bpmn").addClasspathResource("message/message.png")
                  .deploy();
              // 启动
              ProcessInstance processInstance =
                  processEngine.getRuntimeService().startProcessInstanceByKey("message");
              System.out.println(processInstance.getId());
              // 查询执行对象
              Execution execution = processEngine.getRuntimeService().createExecutionQuery()
                  .processInstanceId(processInstance.getId()).activityId("receivetask1").singleResult();
              System.out.println("当前执行对象");
              System.out.println(execution.getActivityId());
              System.out.println("end当前执行对象");
              processEngine.getRuntimeService().signal(execution.getId());
              ProcessInstance pi = processEngine.getRuntimeService().createProcessInstanceQuery()
                  .processInstanceId(processInstance.getId()).singleResult();
              System.out.println("查询实例是否结束");
              System.out.println(pi);
              // 查询执行对象
              Execution execution2 = processEngine.getRuntimeService().createExecutionQuery()
                  .processInstanceId(processInstance.getId()).activityId("receivetask2").singleResult();
              System.out.println("当前执行对象");
              System.out.println(execution2.getActivityId());
              System.out.println("end当前执行对象");
              processEngine.getRuntimeService().signal(execution2.getId());
              ProcessInstance pi2 = processEngine.getRuntimeService().createProcessInstanceQuery()
                  .processInstanceId(processInstance.getId()).singleResult();
              System.out.println("查询实例是否结束");
              System.out.println(pi2);
            }
          }
        

        20.个人任务
        1.直接指定办理人
        2.通过流程变量指定办理人

      • bpmn图
        通过流程变量指定办理人

      • 代码

              /**
                 * 通过流程变量指定办理人
                 * 
                 * @author Jamin
                 * @date 2019年7月17日下午4:18:30
                 * @return void
                 */
                @org.junit.Test
                public void test() {
                  // 部署
                  Deployment deploy = repositoryService.createDeployment()
                      .addClasspathResource("personVariables/personVariables.bpmn")
                      .addClasspathResource("personVariables/personVariables.png").deploy();
                  // 启动并设定流程变量,指定组办理人
                  HashMap<String, Object> map = new HashMap<String, Object>();
                  map.put("userId", "张三");
                  ProcessInstance processInstance =
                      runtimeService.startProcessInstanceByKey("personVariables", map);
                  System.out.println("流程实例:" + processInstance.getId());
                  // 查询个人任务
                  List<Task> list = taskService.createTaskQuery().taskAssignee("张三").list();
                  for (Task task : list) {
                    System.out.println(task.getId());
                    System.out.println(task.getName());
                    System.out.println(task.getExecutionId());
                    System.out.println(task.getAssignee());
                  }
              }
        
      1. 通过类指定办理人

        1. 创建一个实现了TaskListener的类

              package com.cjrj.bootactividemo;
          
                    import org.activiti.engine.delegate.DelegateTask;
              import org.activiti.engine.delegate.TaskListener;
          
                    /**
                     * 实现TaskListener接口完成指定办理人
                     * 
                     * @author Jamin
                     * @date 2019年7月17日 下午4:23:30
                     * 
                     */
              public class TaskListenerImpl implements TaskListener {
          
                      @Override
                      public void notify(DelegateTask delegateTask) {
                        // 指定办理人
                        String person = "张三";
                        // 设置办理人
                        delegateTask.setAssignee(person);
                }
          
                    }
          
        2. bpmn图绑定监听
        3. 测试代码

                  /**
                   * 通过类指定办理人
                   * 
                   * @author Jamin
                   * @date 2019年7月17日下午4:20:31
                   * @return void
                   */
                  @org.junit.Test
                  public void test2() {
                    TaskListenerImpl taskListenerImpl = new TaskListenerImpl();
                    // 部署
                    Deployment deploy = repositoryService.createDeployment()
                        .addClasspathResource("personVariables/personClass.bpmn")
                        .addClasspathResource("personVariables/personClass.png").deploy();
                    // 启动并设定流程变量,指定组办理人
                    HashMap<String, Object> map = new HashMap<String, Object>();
                    map.put("userId", "张三");
                    ProcessInstance processInstance =
                        runtimeService.startProcessInstanceByKey("personVariables", map);
                    System.out.println("流程实例:" + processInstance.getId());
                    // 查询个人任务
                    Task task = taskService.createTaskQuery().taskAssignee("张三")
                        .processInstanceId(processInstance.getId()).singleResult();
                    System.out.println("张三任务:" + task.getName());
                    // 转交任务
                    taskService.setAssignee(task.getId(), "李四");
                    Task task1 = taskService.createTaskQuery().taskAssignee("李四")
                        .processInstanceId(processInstance.getId()).singleResult();
                    System.out.println("李四的任务:" + task1.getName());
          
                  }
          
    20. 组任务

      1. 直接指定

      2. 使用流程变量

      3. 使用类

      • 代码

              package com.cjrj.bootactividemo;
        
              import java.util.List;
              import org.activiti.engine.ProcessEngine;
              import org.activiti.engine.ProcessEngines;
              import org.activiti.engine.RepositoryService;
              import org.activiti.engine.RuntimeService;
              import org.activiti.engine.TaskService;
              import org.activiti.engine.history.HistoricIdentityLink;
              import org.activiti.engine.repository.Deployment;
              import org.activiti.engine.runtime.ProcessInstance;
              import org.activiti.engine.task.IdentityLink;
              import org.activiti.engine.task.Task;
        
              /**
               * 组任务
               * 
               * @author Jamin
               * @date 2019年7月17日 下午5:12:21
               * 
               */
              public class Test7 {
                ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
                RepositoryService repositoryService = processEngine.getRepositoryService();
                RuntimeService runtimeService = processEngine.getRuntimeService();
                TaskService taskService = processEngine.getTaskService();
        
                /**
                 * 直接指定
                 * 
                 * @author Jamin
                 * @date 2019年7月17日下午5:13:02
                 * @return void
                 */
                @org.junit.Test
                public void test() {
                  // 第一种
                  /*
                   * // 部署 repositoryService.createDeployment().addClasspathResource("group/first.bpmn")
                   * .addClasspathResource("group/first.png").deploy(); // 启动 ProcessInstance processInstance =
                   * runtimeService.startProcessInstanceByKey("first"); System.out.println("流程实例id:" +
                   * processInstance.getId());
                   */
                  // 第二种
        
                  /*
                   * Deployment deploy =
                   * repositoryService.createDeployment().addClasspathResource("group/second.bpmn")
                   * .addClasspathResource("group/second.png").deploy(); HashMap<String, Object> map = new
                   * HashMap<String, Object>(); map.put("userId", "张三,李四,王五"); ProcessInstance processInstance =
                   * runtimeService.startProcessInstanceByKey("second", map);
                   */
                  // 第三种
                  Deployment deploy = repositoryService.createDeployment()
                      .addClasspathResource("group/third.bpmn").addClasspathResource("group/third.png").deploy();
                  ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("third");
                  System.out.println("流程实例id" + processInstance.getId());
                  // 查询组任务
                  List<Task> list = taskService.createTaskQuery().processInstanceId(processInstance.getId())
                      .taskCandidateUser("张三").list();
                  System.out.println("组任务:" + list);
                  String taskId = null;
                  for (Task task : list) {
                    System.out.println(task.getName());
                    System.out.println(task.getAssignee());
                    System.out.println(task.getId());
                    taskId = task.getId();
                  }
                  // 查询组成员
                  List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(taskId);
                  for (IdentityLink identityLink : identityLinksForTask) {
                    System.out.println(identityLink.getGroupId());
                    System.out.println(identityLink.getUserId());
                  } // 查询历史组成员列表
                  List<HistoricIdentityLink> historicIdentityLinksForTask =
                      processEngine.getHistoryService().getHistoricIdentityLinksForTask(taskId);
                  for (HistoricIdentityLink historicIdentityLink : historicIdentityLinksForTask) {
                    System.out.println(historicIdentityLink.getUserId());
                    System.out.println(historicIdentityLink.getGroupId());
                  }
                  // 组任务转个人可以是任何人
                  taskService.claim(taskId, "张11");
                  Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId())
                      .taskAssignee("张11").singleResult();
                  System.out.println("组任务转个人任务名:" + task.getName());
                  // 个人任务转组(必须任务以前是组任务)
                  taskService.setAssignee(task.getId(), null);
                  // 检测是否转组任务成功,
                  List<Task> list1 = taskService.createTaskQuery().processInstanceId(processInstance.getId())
                      .taskCandidateUser("张三").list();
                  String taskId1 = null;
                  for (Task task1 : list) {
        
                    System.out.println("转组任务:" + task1.getName());
                    System.out.println("转组任务:" + task1.getAssignee());
                    System.out.println("转组任务:" + task1.getId());
                    taskId1 = task.getId();
                  }
                  // 添加人员
                  taskService.addCandidateUser(taskId1, "qiqi");
                  // 查询参与人员
                  List<IdentityLink> identityLinksForTask2 = taskService.getIdentityLinksForTask(taskId1);
                  for (IdentityLink identityLink : identityLinksForTask2) {
                    System.out.println("添加人员后" + identityLink.getUserId());
                  }
        
                  // 删除人员张三
                  taskService.deleteCandidateUser(taskId1, "张三");
                  List<IdentityLink> identityLinksForTask3 = taskService.getIdentityLinksForTask(taskId1);
                  for (IdentityLink identityLink : identityLinksForTask3) {
                    System.out.println("删除人员后:" + identityLink.getUserId());
                  }
                  // 完成任务
                  taskService.complete(taskId);
        
                }
              }
        
    21. 分配任务给一个角色

      • bpmn图
      • 代码:

          /**
             * 分配任务负责的组<br>
             * 可以分配给多个角色<br>
             * 三种方式都可
             * 
             * @author Jamin
             * @date 2019年7月18日上午8:28:12
             * @return void
             */
            @org.junit.Test
            public void four() {
              // 部署
              Deployment deploy = repositoryService.createDeployment().addClasspathResource("group/four.bpmn")
                  .addClasspathResource("group/four.png").deploy();
              IdentityService identityService = processEngine.getIdentityService();
              // 创建组与用户并关联
              /*
               * identityService.saveGroup(new GroupEntity("部门经理")); identityService.saveGroup(new
               * GroupEntity("总经理")); identityService.saveUser(new UserEntity("张三"));
               * identityService.saveUser(new UserEntity("李四")); identityService.createMembership("张三",
               * "部门经理"); identityService.createMembership("李四", "总经理");
               */
              // 使用流程变量设置角色
              /*
               * HashMap<String, Object> map = new HashMap<String, Object>(); map.put("group", "部门经理,总经理");
               */
        
              // 启动
              ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("four");
              // 查询个人任务
              Task task = taskService.createTaskQuery().processInstanceId(processInstance.getId())
                  .taskCandidateUser("李四").singleResult();
              System.out.println(task.getName());
            }
            // 查询执行任务的组
          List<IdentityLink> identityLinksForTask = taskService.getIdentityLinksForTask(task.getId());
          for (IdentityLink identityLink : identityLinksForTask) {
        System.out.println(identityLink.getGroupId());
        
    • 总结:
      • 流程步骤
        1. bpmn
        2. 使用bpmn图或zip部署
        3. 启动流程
        4. 查询个人任务或组任务
      • 实现办理人的三种方式:
        1. 直接指定
        2. 使用流程变量,启动时指定
        3. 使用监听器
      • 21点与22点: 21点是指定多人,可以是任意一个人,以人为单位,22点必须创建角色,执行人是角色中的任意一个,以角色为单位,都可以进行任务转让,添加删除
    作者: JaminYe
    版权声明:本文原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
  • 相关阅读:
    学习之路
    cordova配置icon和splash
    cardova-android打包
    数组元素最大差值的问题
    病毒攻击
    STL模板中List
    Direct3D API函数
    Direct3D雾化效果浅析
    Direct3D中顶点声明格式
    DirectX9.0 Direct3D Graphics Pipeline 总结
  • 原文地址:https://www.cnblogs.com/JaminYe/p/11205171.html
Copyright © 2020-2023  润新知