work flow http://i61.tinypic.com/qxt10z.png
我正在设计一个工作流程到目前为止,我已经能够像上面那样设计它。 我的问题是
到目前为止,为了实现这一点,我在完成和归档之前引入了用户任务new,并添加了两个名为archive的表单变量,并以boolean完成。
根据他选择填写的表格变量,我继续进行。
但在这种情况下,我不能根据用户是否拥有存档和完整权限来限制用户,并且所有用户都将显示两个选项。
有没有其他方法可以实现这一点我对于activiti和工作流程以及bpmn一般都是新手。 任何帮助将提前感谢
答案 0 :(得分:3)
直接将转换设置为任务并根据此模式设置转换ID:
<task_id>_<transition_id>
在这种情况下意味着: newTask_archive 和 newTask_complete 。然后,您可以从任务定义中读取所有转换,并从ID解析后缀并发送到可能转换的用户列表(完整,存档)。您的bussines图层可以根据用户权限删除任何转换。
// Source: http://forums.activiti.org/content/how-get-all-possible-flows-current-activity
public List<String> getPossibleTransitionIds(long processInstanceId, String taskId) {
RepositoryServiceImpl repoServiceImpl = (RepositoryServiceImpl) repositoryService;
List<String> possibleTransitionIds = new ArrayList<String>();
ReadOnlyProcessDefinition processDef = repoServiceImpl.getDeployedProcessDefinition(processInstance.getProcessDefinitionId());
PvmActivity activity = processDef.findActivity(taskId);
for (PvmTransition pvmTransition : activity.getOutgoingTransitions()) {
String transitionId = extractTransitionId(pvmTransition);
if (transitionId != null) {
possibleTransitionIds.add(transitionId);
}
}
return possibleTransitionIds;
}
用户选择一个呈现的转换ID。 Bussines层检查用户的权限并移动进程。将选定的转换设置为处理变量并解决任务。
Map<String, Object> variableMap = new HashMap<String, Object>();
variableMap.put("selectedTransition", selectedTransition);
taskService.resolveTask(taskId, variableMap);
在每个过渡中都必须设置条件表达式${selectedTransition == '<transition_id>'}
。在这种情况下, $ {selectedTransition =='完成'} 和 $ {selectedTransition =='存档'}
<sequenceFlow id="newTask_complete" name="Complete" sourceRef="newTask" targetRef="completeTask">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${selectedTransition == 'complete'}]]></conditionExpression>
</sequenceFlow>