项目中整合bpmn.js做流程设计器,如果流程设计器是专业人员使用,哪ok,没问题;如果要求普通用户也能使用流程设计器做一些常用流程,这里就会有问题,如图:
这里是角色编码,对于普通用户而言不可能知道表中部门经理的编码是多少,这样的话流程设计器就无用,如何解决?我的方案如下
- 设计一张表保存每个userTask的审核人,key表示哪个流程,act_id表示哪个活动
- 页面对这个表做操作:选中某个userTask,然后分配用户
- 给userTask配置一个create类型的任务监听器
/** | |
* 用户任务配审核人 | |
* | |
* @author dengry | |
*/ | |
public class UserAssignListerner implements TaskListener { | |
private final FlowService flowService; | |
public UserAssignListerner(FlowService flowService) { | |
this.flowService = flowService; | |
} | |
public void notify(DelegateTask delegateTask) { | |
String actId = delegateTask.getTaskDefinitionKey(); | |
String processDefinitionId = delegateTask.getProcessDefinitionId(); | |
String key = processDefinitionId.split(":")[0]; | |
UserAssignment userAssignment = flowService.getUserAssignmentByKeyAndActId(key, actId); | |
String type = userAssignment.getType(); | |
String val = userAssignment.getVal(); | |
switch (type) { | |
case "Candidate groups": | |
String[] groups = val.split(","); | |
for (String group : groups) { | |
delegateTask.addCandidateGroup(group); | |
} | |
break; | |
case "Candidate users": | |
String[] users = val.split(","); | |
for (String user : users) { | |
delegateTask.addCandidateUser(user); | |
} | |
break; | |
case "Assignee": | |
String applyUserId = (String) delegateTask.getVariable("applyUserId"); | |
delegateTask.setAssignee(applyUserId); | |
break; | |
} | |
} | |
} |
- 从而比较完美解决,更多操作可以访问 82.157.68.9/ 操作详情见 www.bilibili.com/video/BV1184y1q7g...