流程文件如下:
<process name="Free" xmlns="http://jbpm.org/4.4/jpdl">
<start g="20,20,48,48">
<transition g="-23,-17" name="123" to="state1"/>
</start>
<state g="143,142,92,52" name="state1">
<transition g="-47,-17" name="to review" to="review"/>
</state>
<task assignee="#{a}" g="96,16,127,52" name="review">
<transition g="-53,-17" name="to task1" to="task1"/>
</task>
<task assignee="#{b}" g="348,86,92,52" name="task1">
<transition name="to end1" to="end1" g="-47,-17"/>
</task>
<end g="213,298,48,48" name="end1"/>
</process>
实现代码如下:
public void removeOutTransition(ProcessDefinitionImpl pd,String sourceName,String destName){
ActivityImpl sourceActivity = pd.findActivity(sourceName);
List<Transition> trans=(List<Transition>) sourceActivity.getOutgoingTransitions();
for(Transition tran:trans){
if(destName.equals(tran.getDestination().getName())){
trans.remove(tran);
break;
}
}
}
public void addOutTransition(ProcessDefinitionImpl pd,String sourceName,String destName){
ActivityImpl sourceActivity = pd.findActivity(sourceName);
ActivityImpl destActivity=pd.findActivity(destName);
TransitionImpl transition = sourceActivity.createOutgoingTransition();
transition.setName("to " +destName);
transition.setDestination(destActivity);
sourceActivity.addOutgoingTransition(transition);
}
public void testTaskAssignee() {
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("a", "johndoe");
variables.put("b", "xueyong");
ProcessInstance processInstance3 = executionService.startProcessInstanceByKey("Free",variables);
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery().processDefinitionId(processInstance3.getProcessDefinitionId()).uniqueResult();
addOutTransition((ProcessDefinitionImpl)pd,"state1","task1");
Execution executionInA = processInstance3.findActiveExecutionIn("state1");
processInstance3 = executionService.signalExecutionById(executionInA.getId(),"to task1");
removeOutTransition((ProcessDefinitionImpl)pd,"task1","state1");
Task task=taskService.findPersonalTasks("xueyong").get(0);
taskService.completeTask(task.getId());
/*Set<String> outcomes = taskService.getOutcomes(task1.getId());
List<HistoryActivityInstance> list = historyService.createHistoryActivityInstanceQuery().activityName("state1").list();
*/
}