天天看点

Activiti 学习笔记14:工作流定义的角色组

一、流程图

Activiti 学习笔记14:工作流定义的角色组

流程图中任务节点的配置:

Activiti 学习笔记14:工作流定义的角色组

分配任务负责的组

使用 candidate groups 属性指定 任务负责组

代码:

<userTask id=“usertask1” name=“审批” activiti:candidateGroups=“部门经理”>
</userTask>      

其中部门经理表示一个用户组的角色

二、测试代码

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

    /** 部署流程定义(从inputStream) */
    @Test
    public void deploymentProcessDefinition_inputStream() {
        InputStream inputStreamBpmn = this.getClass().getResourceAsStream("task.bpmn");
        InputStream inputStreamPng = this.getClass().getResourceAsStream("task.png");
        Deployment deployment = processEngine.getRepositoryService()// 与流程定义和部署对象相关的Service
                .createDeployment()// 创建一个部署对象
                .name("任务")// 添加部署的名称
                .addInputStream("task.bpmn", inputStreamBpmn)//
                .addInputStream("task.png", inputStreamPng)//
                .deploy();// 完成部署
        System.out.println("部署ID:" + deployment.getId());//
        System.out.println("部署名称:" + deployment.getName());//
        /** 添加用户角色组 */
        IdentityService identityService = processEngine.getIdentityService();//
        // 创建角色
        identityService.saveGroup(new GroupEntity("总经理"));
        identityService.saveGroup(new GroupEntity("部门经理"));
        // 创建用户
        identityService.saveUser(new UserEntity("张三"));
        identityService.saveUser(new UserEntity("李四"));
        identityService.saveUser(new UserEntity("王五"));
        // 建立用户和角色的关联关系
        identityService.createMembership("张三", "部门经理");
        identityService.createMembership("李四", "部门经理");
        identityService.createMembership("王五", "总经理");
        System.out.println("添加组织机构成功");
    }

    /** 启动流程实例 */
    @Test
    public void startProcessInstance() {
        // 流程定义的key
        String processDefinitionKey = "task";
        ProcessInstance pi = processEngine.getRuntimeService()// 与正在执行的流程实例和执行对象相关的Service
                .startProcessInstanceByKey(processDefinitionKey);// 使用流程定义的key启动流程实例,key对应helloworld.bpmn文件中id的属性值,使用key值启动,默认是按照最新版本的流程定义启动
        System.out.println("流程实例ID:" + pi.getId());// 流程实例ID
        System.out.println("流程定义ID:" + pi.getProcessDefinitionId());// 流程定义ID
    }

    /** 查询当前人的个人任务 */
    @Test
    public void findMyPersonalTask() {
        String assignee = "小A";
        List<Task> list = processEngine.getTaskService()// 与正在执行的任务管理相关的Service
                .createTaskQuery()// 创建任务查询对象
                /** 查询条件(where部分) */
                .taskAssignee(assignee)// 指定个人任务查询,指定办理人
                // .taskCandidateUser(candidateUser)//组任务的办理人查询
                /** 排序 */
                .orderByTaskCreateTime().asc()// 使用创建时间的升序排列
                /** 返回结果集 */
                .list();// 返回列表
        if (list != null && list.size() > 0) {
            for (Task task : list) {
                System.out.println("任务ID:" + task.getId());
                System.out.println("任务名称:" + task.getName());
                System.out.println("任务的创建时间:" + task.getCreateTime());
                System.out.println("任务的办理人:" + task.getAssignee());
                System.out.println("流程实例ID:" + task.getProcessInstanceId());
                System.out.println("执行对象ID:" + task.getExecutionId());
                System.out.println("流程定义ID:" + task.getProcessDefinitionId());
                System.out.println("########################################################");
            }
        }
    }

    /** 查询当前人的组任务 */
    @Test
    public void findMyGroupTask() {
        String candidateUser = "李四1";
        List<Task> list = processEngine.getTaskService()// 与正在执行的任务管理相关的Service
                .createTaskQuery()// 创建任务查询对象
                /** 查询条件(where部分) */
                .taskCandidateUser(candidateUser)// 组任务的办理人查询
                /** 排序 */
                .orderByTaskCreateTime().asc()// 使用创建时间的升序排列
                /** 返回结果集 */
                .list();// 返回列表
        if (list != null && list.size() > 0) {
            for (Task task : list) {
                System.out.println("任务ID:" + task.getId());
                System.out.println("任务名称:" + task.getName());
                System.out.println("任务的创建时间:" + task.getCreateTime());
                System.out.println("任务的办理人:" + task.getAssignee());
                System.out.println("流程实例ID:" + task.getProcessInstanceId());
                System.out.println("执行对象ID:" + task.getExecutionId());
                System.out.println("流程定义ID:" + task.getProcessDefinitionId());
                System.out.println("########################################################");
            }
        }
    }

    /** 完成我的任务 */
    @Test
    public void completeMyPersonalTask() {
        // 任务ID
        String taskId = "7504";
        processEngine.getTaskService()// 与正在执行的任务管理相关的Service
                .complete(taskId);
        System.out.println("完成任务:任务ID:" + taskId);
    }

    /** 查询正在执行的任务办理人表 */
    @Test
    public void findRunPersonTask() {
        // 任务ID
        String taskId = "6204";
        List<IdentityLink> list = processEngine.getTaskService()//
                .getIdentityLinksForTask(taskId);
        if (list != null && list.size() > 0) {
            for (IdentityLink identityLink : list) {
                System.out.println(identityLink.getTaskId() + "   " + identityLink.getType() + "   "
                        + identityLink.getProcessInstanceId() + "   " + identityLink.getUserId());
            }
        }
    }

    /** 查询历史任务的办理人表 */
    @Test
    public void findHistoryPersonTask() {
        // 流程实例ID
        String processInstanceId = "6201";
        List<HistoricIdentityLink> list = processEngine.getHistoryService()//
                .getHistoricIdentityLinksForProcessInstance(processInstanceId);
        if (list != null && list.size() > 0) {
            for (HistoricIdentityLink identityLink : list) {
                System.out.println(identityLink.getTaskId() + "   " + identityLink.getType() + "   "
                        + identityLink.getProcessInstanceId() + "   " + identityLink.getUserId());
            }
        }
    }

    /** 拾取任务,将组任务分给个人任务,指定任务的办理人字段 */
    @Test
    public void claim() {
        // 将组任务分配给个人任务
        // 任务ID
        String taskId = "7504";
        // 分配的个人任务(可以是组任务中的成员,也可以是非组任务的成员)
        String userId = "张三";
        processEngine.getTaskService()//      

三、分配任务负责的组(IdentityService)

/**在部署流程定义和启动流程实例的中间,设置组任务的办理人,向Activiti表中存放组和用户的信息*/
IdentityService identityService = processEngine.getIdentityService();//认证:保存组和用户信息
identityService.saveGroup(new GroupEntity("部门经理"));//建立组
identityService.saveGroup(new GroupEntity("总经理"));//建立组
identityService.saveUser(new UserEntity(“小张”));//建立用户
identityService.saveUser(new UserEntity("小李")); //建立用户
identityService.saveUser(new UserEntity("小王")); //建立用户
identityService.createMembership("小张", "部门经理");//建立组和用户关系
identityService.createMembership("小李", "部门经理");//建立组和用户关系
identityService.createMembership(“小王”, “总经理”);//建立组和用户关系      

表结构介绍:

act_id_group:角色组表

act_id_user:用户表:

act_id_membership:用户角色表

指定组任务的办理人,查询组任务

String userId = “张三”;//张三,李四可以查询结果,王五不可以,因为他不是部门经理角色
List<Task> list = processEngine.getTaskService()//
                .createTaskQuery()//
                .taskCandidateUser(userId)//指定组任务查询
                .list();      

四、activiti 小结

Activiti 学习笔记14:工作流定义的角色组

继续阅读