activiti5.11跳转

activiti5.11的跳转问题,除了在流程定义文件中使用分支节点控制流程的转向外,在java程序代码中同样可以控制流程的转向。
如在流程定义文件中:
Java代码 复制代码 收藏代码
  1. <process id="process1" name="process1" isExecutable="true">
  2. <startEvent id="startevent1" name="Start"></startEvent>
  3. <sequenceFlow id="flow1" name="" sourceRef="startevent1" targetRef="serviceTask1"></sequenceFlow>
  4. <serviceTask id="serviceTask1" name="serviceTask1" activiti:class="com.activiti.testcase.turn.ServiceTask1Listener"/>
  5. <sequenceFlow id="s2" sourceRef="serviceTask1" targetRef="userTask2" ></sequenceFlow>
  6. <sequenceFlow id="s3" sourceRef="serviceTask1" targetRef="manualTask1" ></sequenceFlow>
  7. <userTask id="userTask2" name="userTask2" activiti:assignee="gonzo"></userTask>
  8. <manualTask id="manualTask1" name="manualTask1"></manualTask>
  9. <sequenceFlow id="s4" targetRef="userTask2" sourceRef="endevent1"></sequenceFlow>
  10. <sequenceFlow id="s5" targetRef="manualTask1" sourceRef="endevent1"></sequenceFlow>
  11. <endEvent id="endevent1" name="End"></endEvent>
  12. </process>

其中serviceTask 的类中是实现流程转向的具体代码。
首先说明:要使用serviceTask调用外部的java类,则该java类必须实现JavaDelegate或ActivityBehavior接口,若需要控制流程的转向则需实现 ActivityBehavior接口,因为该接口功能更强大。
来看ServiceTask1Listener类,该类只有一个execute方法:
Java代码 复制代码 收藏代码
  1. public class ServiceTask1Listener implements ActivityBehavior {
  2. public void execute(ActivityExecution execution) throws Exception {
  3. //流程定义id
  4. String procDefId = execution.getProcessDefinitionId();
  5. RepositoryServiceImpl repositoryService = (RepositoryServiceImpl)execution.getEngineServices().getRepositoryService();
  6. //流程定义的实现
  7. ProcessDefinitionImpl processDefinitionImpl = (ProcessDefinitionImpl)repositoryService.getDeployedProcessDefinition(procDefId);
  8. //当前执行的活动节点
  9. ActivityImpl ac = (ActivityImpl)execution.getActivity();
  10. //创建输出的执行路径
  11. TransitionImpl transition = ac.createOutgoingTransition("flow1");
  12. //设置输出路径的目标节点
  13. ActivityImpl destination = new ActivityImpl("serviceTask1", processDefinitionImpl);
  14. destination.setActivityBehavior(this);
  15. //设置目标节点
  16. transition.setDestination(destination);
  17. List<PvmTransition> pvms = execution.getActivity().getOutgoingTransitions();
  18. //[ s2,s3,flow1]
  19. //选用刚刚创建的执行路径
  20. execution.take(pvms.get(2));
  21. }
  22. }  
原文地址:https://www.cnblogs.com/bjanzhuo/p/3576031.html