一个用户任务只允许有一个代理人。为一个任务分配代理人后act_ru_task表的
ASSIGNEE_
字段会被设置为响应的值。
审批任务设置assignee
变量,表示是该任务的负责人:
<userTask id="sid-9253B2C0-D7CF-49C9-BE00-3B68D87413D4" name="审批" activiti:assignee="${assignee}">userTask>
启动流程分配代理人:
// 启动流程分配代理人
Map<String,Object> map = new HashMap<>();
map.put("assignee", "zhangsan");
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave", map);
查询任务指定代理人:
// 可通过代理人查询任务列表
List<Task> list = taskService.createTaskQuery().taskAssignee("zhangsan").list();
一个任务可以设置多个候选人,候选人在业务上指的是有权对该任务进行操作的群体。
某个候选人签收后,其他候选人就看不到该任务。
可以使用activiti:candiateUsers=”用户 1,用户 2,用户 3”的这种方式来实现设置一组候选人
直接赋值多个候选人示例:
<userTask activiti:candidateUsers="zhangsan,lisi,wangwu" activiti:exclusive="true" id="_3" name="审批"/>
动态设置候选人变量 candidateUsers
:
<userTask id="sid-31845D76-A308-4442-AE19-4AA4238DB39A" name="审批" activiti:candidateUsers="${candidateUsers}"></userTask>
这里的candidateUsers是一个流程变量,以list的形式存放了候选人列表。
注意任务和候选人的关系存储在act_ru_identitylink表中
启动流程分配候选人:
// 启动流程分配候选人
List<String> candidateUsers = new ArrayList<>();
candidateUsers.add("zhangsan");
candidateUsers.add("lisi");
Map<String,Object> variableMap = new HashMap<>();
variableMap.put("candidateUsers", candidateUsers);
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("leave", variableMap);
用来把一个群体的人指定为一个任务的权限人,对应的是activiti中的用户组,分配一个用户组id到某个任务上,可以指定整个组的人为该任务的候选人。
属于该候选组的用户就可以签收然后办理该任务。
如果候选组中存在多个用户,那么只有其中的某个用户签收了任务,那么其它用户就看不到该任务。
只要任务还未被签收,候选组内的任意用户都可以签收该任务;一旦任务被签收,候选组内的其他用户就无法查看与签收该任务咯。
可以使用activiti:candidateGroups=”用户组1,用户组2,用户组3”的这种方式来实现设置一组候选人
动态设置候选组变量candidateGroup
:
<userTask id="juel-candidateGroup" name="审批" activiti:candidateGroups="${candidateGroup}">userTask>
这里的candidateGroup也是一个流程变量,其中存放了用户组id的lsit集合。
注意任务和候选组的关系存储在act_ru_identitylink表中
启动流程分配候选组:
// 启动流程分配候选组
Map<String,Object> map = new HashMap<>();
List<String> groupList = new ArrayList<>();
groupList.add("项目经理");
groupList.add("测试");
map.put("candidateGroup",groupList);
runtimeService.startProcessInstanceByKey("leave", map);
办理流程:
表达式支持解析基础类型、 bean、 list、 array 和 map,也可作为条件判断。
如下:${order.price > 100 && order.price < 250}
Map<String, Object> map = new HashMap<>();
map.put("applyUserId", "zhangsan");
User user = new User();
Map<String, Object> map = new HashMap<>();
map.put("user", user);