复习步骤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
    评论
### 回答1: Vue-BPMN-Element是一个基于Vue.js框架开发的业务流程建模工具。它提供了一套丰富的组件和功能,帮助开发人员快速搭建并定制化业务流程设计器。 Vue-BPMN-Element的主要特点包括: 1. 强大的可扩展性:Vue-BPMN-Element提供了丰富的组件和插件,允许开发人员根据项目需求进行定制化开发。这些组件和插件可实现诸如拖拽、连接线、节点属性编辑等功能,满足各种业务流程的建模需求。 2. 可视化编辑:Vue-BPMN-Element提供了直观的界面,允许用户通过拖拽和连接线的方式创建和编辑业务流程。用户可以通过可视化的界面来管理和优化业务流程,极大地提高了开发效率和用户体验。 3. 高度定制化:Vue-BPMN-Element提供了丰富的配置选项和事件钩子,可以完全适应不同的业务需求。开发人员可以根据具体项目需求,灵活地定制展示样式、交互方式等,实现个性化的业务流程建模工具。 4. 良好的兼容性:Vue-BPMN-Element基于Vue.js框架开发,具有良好的兼容性和扩展性。它可以与其他Vue.js插件和工具库无缝集成,为项目提供更加全面和高效的解决方案。 总之,Vue-BPMN-Element是一个强大、可定制化和易用的业务流程建模工具,通过它可以快速搭建和管理业务流程,提高开发效率和项目质量。无论是小型项目还是大型企业应用,Vue-BPMN-Element都是一个值得考虑的选择。 ### 回答2: vue-bpmn-element是一个基于Vue.js框架的BPMN(Business Process Model and Notation)流程图绘制组件库。BPMN是一种用于描述业务流程的图形化标准,可以方便地表示和分析企业的各个流程。 vue-bpmn-element提供了一系列可复用的组件,用户可以在自己的Vue应用中轻松地集成和使用这些组件。这个库的设计目标是提供一个简洁、易用且高度可定制的BPMN流程图绘制解决方案。 使用vue-bpmn-element,用户可以创建自定义的BPMN流程图,包括各种元素如任务、网关、事件等。这些元素可以通过拖拽、缩放和连接等操作进行编辑和布局。用户还可以为每个元素设置相关属性和约束条件,以便更好地描述和分析业务流程。 在vue-bpmn-element中,还提供了一些实用的功能,如历史记录、撤销恢复、导入导出等。这些功能可以帮助用户方便地管理和操作流程图,提高工作效率。 总之,vue-bpmn-element是一个功能丰富且易于使用的BPMN流程图绘制组件库,通过它,用户可以轻松地创建、编辑和管理自定义的业务流程,帮助企业提高业务流程的可视化管理水平,提高工作效率。 ### 回答3: vue-bpmn-element是一个基于Vue.js的开源项目,它提供了一组可在业务流程管理界面中使用的BPMN(Business Process Model and Notation)元素和功能。 首先,vue-bpmn-element具有良好的可定制性。它提供了一系列可自定义的BPMN元素,如任务、网关、边界事件等,使用户能够根据自己的需求进行灵活的配置和设计。此外,它还支持自定义样式和图标,让用户能够根据自己的品牌或用户界面的要求对BPMN流程进行个性化的呈现。 其次,vue-bpmn-element提供了丰富的交互功能。用户可以通过拖拽、缩放等操作来创建、修改和连接BPMN元素,实现业务流程的设计和调整。同时,它还支持多种事件,如点击、双击、鼠标悬停等,使用户能够对BPMN流程进行更加直观和便捷的操作。 此外,vue-bpmn-element还提供了一些实用的功能和工具。例如,它允许用户导入/导出BPMN文件,从而方便地与其他系统或工具进行集成。它还支持撤销/重做操作,保证用户在编辑过程中的操作精确和安全。另外,它也提供了一些常用的扩展,如条件流程、消息传递等,使用户能够更加灵活地定义和管理业务流程。 总之,vue-bpmn-element是一个功能强大且易于使用的BPMN元素集合,它为用户提供了一套完整的工具和功能,帮助用户进行业务流程的设计、管理和优化。无论是初学者还是有经验的开发者,都可以通过vue-bpmn-element轻松地搭建出高效和可扩展的业务流程管理系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值