activiti任务操作

来源:互联网 发布:成电医星软件怎么样 编辑:程序博客网 时间:2024/06/05 05:56

个人任务的操作

  • 使用流程变量
    • 在流程图中写入变量#{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 用户角色表