在工作流程活动中定义多个可能的路径

时间:2014-03-06 06:04:45

标签: workflow activiti bpmn

work flow http://i61.tinypic.com/qxt10z.png

我正在设计一个工作流程到目前为止,我已经能够像上面那样设计它。 我的问题是

  1. 我开始工作。
  2. 提供执行两个可能操作之一的用户选项(存档并在图表中完成)
  3. 我还需要授权他是否可以存档或完成或两者兼而有之。
  4. 用户可以选择其中一个选项。
  5. 基于采取的工作流程之一。
  6. 到目前为止,为了实现这一点,我在完成和归档之前引入了用户任务new,并添加了两个名为archive的表单变量,并以boolean完成。

    根据他选择填写的表格变量,我继续进行。

    但在这种情况下,我不能根据用户是否拥有存档和完整权限来限制用户,并且所有用户都将显示两个选项。

    有没有其他方法可以实现这一点我对于activiti和工作流程以及bpmn一般都是新手。 任何帮助将提前感谢

1 个答案:

答案 0 :(得分:3)

1。如何向用户呈现可能的转换:

直接将转换设置为任务并根据此模式设置转换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;
 }

2。如何按选定的转换移动流程:

用户选择一个呈现的转换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>