Martin Pradny [http://community.jboss.org/people/mpradny] replied to the discussion
"Manual reroute in Jbpm 4.3" To view the discussion, visit: http://community.jboss.org/message/547600#547600 -------------------------------------------------------------- THANK YOU :) This works. In case anyone is looking for something similar, here si the code. import org.jbpm.api.ProcessDefinitionQuery; import org.jbpm.api.ProcessEngine; import org.jbpm.api.ProcessInstance; import org.jbpm.api.cmd.Environment; import org.jbpm.api.model.Event; import org.jbpm.pvm.internal.client.ClientExecution; import org.jbpm.pvm.internal.cmd.AbstractCommand; import org.jbpm.pvm.internal.model.ActivityImpl; import org.jbpm.pvm.internal.model.ExecutionImpl; import org.jbpm.pvm.internal.model.ProcessDefinitionImpl; import org.jbpm.pvm.internal.model.TransitionImpl; import org.jbpm.pvm.internal.model.op.AtomicOperation; import org.jbpm.pvm.internal.processengine.ProcessEngineImpl; import org.jbpm.pvm.internal.session.DbSession; import org.jbpm.pvm.internal.task.TaskImpl; public class RerouteCmd extends AbstractCommand<ProcessInstance> { /** * */ private static final long serialVersionUID = 1L; private static final String REROUTE = "#reroute#"; private String executionId; private String newActivityName; private String taskId; public RerouteCmd(String executionId, String newActivityName, String taskId){ this.executionId=executionId; this.newActivityName=newActivityName; this.taskId=taskId; } @Override public ProcessInstance execute(Environment environment) throws Exception { ExecutionImpl execution = null; DbSession dbSession = environment.get(DbSession.class); execution = (ExecutionImpl) dbSession.findExecutionById(executionId); ProcessDefinitionImpl pd=execution.getProcessDefinition(); ActivityImpl endActivity=pd.getActivity(newActivityName); ActivityImpl startActivity=execution.getActivity(); TransitionImpl trans=startActivity.createOutgoingTransition(); trans.setDestination(endActivity); trans.setName(REROUTE); if (taskId==null){ execution.signal(REROUTE); }else{ TaskImpl task=dbSession.get(TaskImpl.class, Long.parseLong(taskId)); if (task!=null){ task.complete(REROUTE); dbSession.delete(task); } } startActivity.removeOutgoingTransition(trans); return null; } } I have tried to casue minimal damage to existing logic. May be the signal and complete operations could be done again using commands, but I wasn't able to get processEngine (and didn't bother too much, since this works). -------------------------------------------------------------- Reply to this message by going to Community [http://community.jboss.org/message/547600#547600] Start a new discussion in jBPM at Community [http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034]
_______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user