activiti任务操作

本文详细介绍了Activiti中个人任务和组任务的操作,包括使用流程变量、TaskListener接口以及直接在流程图中设置办理人。个人任务的分配方式包括在bpmn文件中直接指定assignee或通过流程变量,而组任务则通过candidate-users属性或流程变量配合Candidate groups来分配。此外,还提到了角色组的概念及其在流程图中的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人任务的操作

  • 使用流程变量
    • 在流程图中写入变量#{userID}
    • 设置流程变量
    • 代码:
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("userID", "张翠三");
ProcessInstance pi = processEngine.getRuntimeService().startProcessInstanceByKey("taskProcess",variables);
System.out.println("pid:" + pi.getId());
  • 使用listener
    • 不需要指定办理人
    • 添加listener
    • listener代码
public class TaskListenerImpl implements TaskListener {

    /**指定个人任务和组任务的办理人*/
    @Override
    public void notify(DelegateTask delegateTask) {
        String assignee = "张无忌";
        //指定个人任务
        delegateTask.setAssignee(assignee);
    }

}
  • 认领任务
    • 代码:
@Test
    public void setAssigneeTask(){
        //任务ID
        String taskId = "3408";
        //指定认领的办理者
        String userId = "周芷若";
        processEngine.getTaskService()//
                    .setAssignee(taskId, userId);
    }

总结

  • 个人任务及三种分配方式:
    • 在taskProcess.bpmn中直接写 assignee=“张三丰”
    • 在taskProcess.bpmn中写 assignee=“#{userID}”,变量的值要是String的。
      使用流程变量指定办理人
    • 使用TaskListener接口,要使类实现该接口,在类中定义:delegateTask.setAssignee(assignee);// 指定个人任务的办理人

组任务的操作

分配个人任务

  • 直接指定办理人
    • 在流程图中Candidate users中设置办理人
    • 查询个人任务列表
List<Task> list = processEngine.getTaskService()//
                        .createTaskQuery()//
                        .taskAssignee(userId)//指定个人任务查询
                        .list();
- 查询组任务列表
List<Task> list = processEngine.getTaskService()//
                        .createTaskQuery()//
                        .taskCandidateUser(userId)//指定组任务查询
                        .list();
- 查询组任务成员列表
String taskId = "3709";
        List<IdentityLink> list = processEngine.getTaskService() .getIdentityLinksForTask(taskId);
- 将组任务分配给个人任务,拾取任务
String userId = "小B";
        processEngine.getTaskService()//
                    .claim(taskId, userId);
- 将个人任务回退到组任务(前提:之前组任务)
String taskId = "5508";
        processEngine.getTaskService()//
                    .setAssignee(taskId, null);
- 向组任务中添加成员
processEngine.getTaskService()//
                    .addCandidateUser(taskId, userId);
- 从组任务中删除成员
processEngine.getTaskService()//
                    .deleteCandidateUser(taskId, userId);
  • 使用流程变量
    • 在流程图中Candidate users中设置#{userIDs}
    • 设置流程变量指定组任务的办理人
    • variables.put(“userIDs”, “大大,小小,中中”);
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey("taskProcess",variables);
- 在开发中,可以在页面中指定下一个组任务的办理人,通过流程变量设置下一个任务的办理人

- 使用listener
- 不要指定任务的办理人
- TaskListenerImpl类,用来设置任务的办理人

public class TaskListenerImpl implements TaskListener {

    /**指定个人任务和组任务的办理人*/
    @Override
    public void notify(DelegateTask delegateTask) {
        String userId1 = "A";
        String userId2 = "B";
        //指定组任务
        delegateTask.addCandidateUser(userId1);
        delegateTask.addCandidateUser(userId2);
    }

总结

  • 组任务及三种分配方式:
    • 在taskProcess.bpmn中直接写 candidate-users=“小A,小B,小C,小D”
    • 在taskProcess.bpmn中写 candidate-users =“#{userIDs}”,变量的值要是String的。
      使用流程变量指定办理人
      Map

角色组

  • 在流程图中设置Candidate groups(部门经理)
  • 代码
/**在部署流程定义和启动流程实例的中间,设置组任务的办理人,向Activity表中存放组和用户的信息*/
        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("小王", "总经理");//建立组和用户关系

        // 2 启动流程
        ProcessInstance pi = processEngine.getRuntimeService()//
                            .startProcessInstanceByKey("taskProcess");
        System.out.println("pid:" + pi.getId());
  • 查询组任务列表
//查询组任务列表
    @Test
    public void findGroupList(){
        String userId = "小李";//小张,小李可以查询结果,小王不可以,因为他不是部门经理
        List<Task> list = processEngine.getTaskService()//
                        .createTaskQuery()//
                        .taskCandidateUser(userId)//指定组任务查询
                        .list();
  • 表结构关系
  • act_id_group 角色组表
  • act_id_user 用户表
  • act_id_membership 用户角色表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值