复习步骤16- BPMN任务(1)用户任务

 

 

 

一、测试 分配任务候选人 (Task1这个任务的候选人有angus,候选组有managenment,以及boss  )


 1.1 新建候选人candidate.bpmn 在这个bpmn文件中直接用 potentialOwner配置(Task1这个任务的候选人有angus,候选组有managenment,以及boss  )

1.2  修改candidate.bpmn 指定 Task1这个任务的候选人有user(angus),候选组有group(managenment),以及boss(候选组)

其中 angus, managenment,boss 均是数据库ID,对应的JAVA代码

Group managementGroup = identityService.newGroup("management");

Group bossGroup = identityService.newGroup("boss");

User angus = identityService.newUser("angus");

 

1.3 测试代码

//测试 分配任务候选人 Task1这个任务的候选人有angus,候选组有managenment,以及boss 

     public static void testCandidate(){

        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

           // 存储服务

           RepositoryService rs = engine.getRepositoryService();

           // 运行时服务 用户组的管理服务 TaskService 任务管理TaskService

           RuntimeService runService = engine.getRuntimeService();

           IdentityService identityService = engine.getIdentityService();

           TaskService taskService = engine.getTaskService();

          

           // identityService 添加 managementboss两个组--id,和angus-id这个人

           Group managementGroup = identityService.newGroup("management");

           managementGroup.setName("管理组");

          

           Group bossGroup = identityService.newGroup("boss");

           bossGroup.setName("老板组");

          

           User angus = identityService.newUser("angus");

           angus.setFirstName("MsLiu");

          

           identityService.saveGroup(managementGroup);

           identityService.saveGroup(bossGroup);

           identityService.saveUser(angus);

          

           // 启动服务

           Deployment dep = rs.createDeployment().addClasspathResource("candidate.bpmn").deploy();

           ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

           ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

           //查询当前流程节点即Task1 的候选人及组是不是我们定义的 <formalExpression>user(angus), group(management), boss

           Task managementTask = taskService.createTaskQuery().taskCandidateGroup("management").singleResult(); //参数ID

           Task bossTask = taskService.createTaskQuery().taskCandidateGroup("boss").singleResult(); //参数ID

           Task angusTask = taskService.createTaskQuery().taskCandidateUser("angus").singleResult();//参数id

           System.out.println("管理组可以认领的任务有 "+managementTask.getName());

           System.out.println("老板组可以认领的任务有 "+bossTask.getName());

           System.out.println("候选人MsLiu可以认领的任务有 "+angusTask.getName());

       /*   

           输出结果:

           管理组可以认领的任务有 Task1

           老板组可以认领的任务有 Task1

           候选人MsLiu可以认领的任务有 Task1

           可以看到 我们在candidate.bpmn 设置 <formalExpression>user(angus), group(management), boss managementboss两个组--id,和angus-id这个人

           均有认领权限了

           */

     }

 

二、测试 分配任务代理人,和测试 分配任务候选人,一样只是bpmn Task1代理人用的便签不一样,而且代理人于任务是一对一的关系,所以只能指定一个(bpmn中标签中放代理人的数据库id)

 

2.1  新建代理人Assignee.bpmn在这个bpmn文件中直接用 humanPerformer标签配置

2.2 修改Assignee.bpmn ,指定Task1任务代理人为deputy1

 

2.3 测试代码

//测试 分配代理人 (指定Task1这个任务的代理人是deputy1

     public static void testAssignee(){

        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务 用户组的管理服务 TaskService 任务管理TaskService

        RuntimeService runService = engine.getRuntimeService();

        IdentityService identityService = engine.getIdentityService();

        TaskService taskService = engine.getTaskService();

        

        // identityService 添加deputy1这个人

         

        

        User deputy1 = identityService.newUser("deputy1");

        deputy1.setFirstName("MsLiu");

        

        identityService.saveUser(deputy1);

        

        // 启动服务

        Deployment dep = rs.createDeployment().addClasspathResource("Assignee.bpmn").deploy();

        ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

        ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

        //查询当前流程节点即Task1 的候选人及组是不是我们定义的 <formalExpression>user(angus), group(management), boss

      

        Task deputy1Task = taskService.createTaskQuery().taskAssignee("deputy1").singleResult();//查询deputy1 代理的任务

        System.out.println("代理人MsLiu代理任务有 "+deputy1Task.getName());

        /*   

           输出结果:

           代理人MsLiu代理任务有 Task1

         */

     }

 

 

三、activiti 的权利分配扩展方式来分配候选人和代理人,标签如下

 

 

四、使用任务监听器进行权限分配

      如何配置任务监听器,在bpmn xml的 userTask任务节点的标签中配置任务监听的JAVA类,在上图的监听JAVA类代码中指定任务的候选人,候选组,代理人等即可

 

 

五、使用JUEL 表达式分配权限

  5.1  新建候选人juel.bpmn

 

   5.2 修改 juel.bpmn

在这个bpmn文件中 参考上上图直接用 我们在java代码的bean--authSevice 的自定义方法来获取指定 Task1这个任务的候选人, 而候选组,以及代理人就不测了,参照上上图在userTask换个activiti的扩展属性就可以了

5.3 java代码

AuthService.java

package com.xiangshuai.act.c19;

 

import java.io.Serializable;

import java.util.ArrayList;

import java.util.List;

 

 

public class AuthService implements Serializable {

         /**

          *

          */

         private static final long serialVersionUID = 1L;

        

         public List<String>  getCandidateUsers(){

                  List<String> result=new ArrayList<String>();

                  result.add("userA");

        result.add("userB");

        return result;

         }

 

}

 

  测试方法

/*

     测试  JUEL 表达式分配权限-- 将我们自定义的JAVABEAN AuthSevice在流程启动时,

     ByKey这个方法,然后将 "authService",new AuthSevice() 这个key,valuemap作为参数加入,如下java代码,然后在juel.bpmn中及可识别了

     Map<String, Object> vars=new HashMap<String, Object>();

        vars.put("authService",new AuthService());

        ProcessInstance pi = runService.startProcessInstanceByKey(pd.getKey(), vars);

     */

     public static void testJuel(){

        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务 TaskService 任务管理TaskService

        RuntimeService runService = engine.getRuntimeService();

        TaskService taskService = engine.getTaskService();

      

        // 启动服务

        Deployment dep = rs.createDeployment().addClasspathResource("juel.bpmn").deploy();

        ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

        /*

           百度RuntimeService  API

           startProcessInstanceByKey(String processDefinitionKey, String businessKey)

           Starts a new process instance in the latest version of the process definition with the given key.

           */

        Map<String, Object> vars=new HashMap<String, Object>();

        vars.put("authService",new AuthService());

        ProcessInstance pi = runService.startProcessInstanceByKey(pd.getKey(), vars);

       //查询userA 候选的任务--AuthService已定义好      <userTask id="usertask3" name="Task1" activiti:candidateUsers="${authService.getCandidateUsers()}">  

        Task userATask = taskService.createTaskQuery().taskCandidateUser("userA").singleResult();

        System.out.println("候选人userA认领的任务有 "+userATask.getName());

        /*   

           输出结果:

           候选人userA认领的任务有 Task1

         */

     }

   

 

 

总测试类 UserTaskTest1.java

package com.xiangshuai.act.c19;

 

import java.util.HashMap;

import java.util.Map;

 

import org.activiti.engine.IdentityService;

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.identity.Group;

import org.activiti.engine.identity.User;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.repository.ProcessDefinition;

import org.activiti.engine.runtime.ProcessInstance;

import org.activiti.engine.task.Task;

 

 

/**

 * @author lqx

 *  文件在 E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤16- BPMN任务(1)用户任务

 * 我的网盘\我的笔记\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤16- BPMN任务(1)用户任务

 *  任务的代理人,候选人,候选组,及指定代理人,候选人,候选组的多种方式

 */

public class UserTaskTest1 {

    public static void main(String[] args) {

       //testCandidate();

       //testAssignee();

       testJuel();

    }

   

    //测试 分配任务候选人 Task1这个任务的候选人有angus,候选组有managenment,以及boss 

     public static void testCandidate(){

        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

           // 存储服务

           RepositoryService rs = engine.getRepositoryService();

           // 运行时服务 用户组的管理服务 TaskService 任务管理TaskService

           RuntimeService runService = engine.getRuntimeService();

           IdentityService identityService = engine.getIdentityService();

           TaskService taskService = engine.getTaskService();

          

           // identityService 添加 managementboss两个组--id,和angus-id这个人

           Group managementGroup = identityService.newGroup("management");

           managementGroup.setName("管理组");

          

           Group bossGroup = identityService.newGroup("boss");

           bossGroup.setName("老板组");

          

           User angus = identityService.newUser("angus");

           angus.setFirstName("MsLiu");

          

           identityService.saveGroup(managementGroup);

           identityService.saveGroup(bossGroup);

           identityService.saveUser(angus);

          

           // 启动服务

           Deployment dep = rs.createDeployment().addClasspathResource("candidate.bpmn").deploy();

           ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

           ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

           //查询当前流程节点即Task1 的候选人及组是不是我们定义的 <formalExpression>user(angus), group(management), boss

           Task managementTask = taskService.createTaskQuery().taskCandidateGroup("management").singleResult(); //参数ID

           Task bossTask = taskService.createTaskQuery().taskCandidateGroup("boss").singleResult(); //参数ID

           Task angusTask = taskService.createTaskQuery().taskCandidateUser("angus").singleResult();//参数id

           System.out.println("管理组可以认领的任务有 "+managementTask.getName());

           System.out.println("老板组可以认领的任务有 "+bossTask.getName());

           System.out.println("候选人MsLiu可以认领的任务有 "+angusTask.getName());

       /*   

           输出结果:

           管理组可以认领的任务有 Task1

           老板组可以认领的任务有 Task1

           候选人MsLiu可以认领的任务有 Task1

           可以看到 我们在candidate.bpmn 设置 <formalExpression>user(angus), group(management), boss managementboss两个组--id,和angus-id这个人

           均有认领权限了

           */

     }

     

     //测试 分配代理人 (指定Task1这个任务的代理人是deputy1

     public static void testAssignee(){

        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务 用户组的管理服务 TaskService 任务管理TaskService

        RuntimeService runService = engine.getRuntimeService();

        IdentityService identityService = engine.getIdentityService();

        TaskService taskService = engine.getTaskService();

        

        // identityService 添加deputy1这个人

        

        

        User deputy1 = identityService.newUser("deputy1");

        deputy1.setFirstName("MsLiu");

        

        identityService.saveUser(deputy1);

        

        // 启动服务

        Deployment dep = rs.createDeployment().addClasspathResource("Assignee.bpmn").deploy();

        ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

        ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

        //查询当前流程节点即Task1 的候选人及组是不是我们定义的 <formalExpression>user(angus), group(management), boss

      

        Task deputy1Task = taskService.createTaskQuery().taskAssignee("deputy1").singleResult();//查询deputy1 代理的任务

         System.out.println("代理人MsLiu代理任务有 "+deputy1Task.getName());

        /*   

           输出结果:

           代理人MsLiu代理任务有 Task1

         */

     }

     /*

     测试  JUEL 表达式分配权限-- 将我们自定义的JAVABEAN AuthSevice在流程启动时,

     ByKey这个方法,然后将 "authService",new AuthSevice() 这个key,valuemap作为参数加入,如下java代码,然后在juel.bpmn中及可识别了

     Map<String, Object> vars=new HashMap<String, Object>();

        vars.put("authService",new AuthService());

        ProcessInstance pi = runService.startProcessInstanceByKey(pd.getKey(), vars);

     */

     public static void testJuel(){

        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务 TaskService 任务管理TaskService

        RuntimeService runService = engine.getRuntimeService();

        TaskService taskService = engine.getTaskService();

      

        // 启动服务

        Deployment dep = rs.createDeployment().addClasspathResource("juel.bpmn").deploy();

        ProcessDefinition pd = rs.createProcessDefinitionQuery().deploymentId(dep.getId()).singleResult();

        /*

           百度RuntimeService  API

           startProcessInstanceByKey(String processDefinitionKey, String businessKey)

           Starts a new process instance in the latest version of the process definition with the given key.

           */

        Map<String, Object> vars=new HashMap<String, Object>();

        vars.put("authService",new AuthService());

        ProcessInstance pi = runService.startProcessInstanceByKey(pd.getKey(), vars);

       //查询userA 候选的任务--AuthService已定义好      <userTask id="usertask3" name="Task1" activiti:candidateUsers="${authService.getCandidateUsers()}">  

        Task userATask = taskService.createTaskQuery().taskCandidateUser("userA").singleResult();

        System.out.println("候选人userA认领的任务有 "+userATask.getName());

        /*   

           输出结果:

           候选人userA认领的任务有 Task1

         */

     }

     

}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值