(二)Decision package kellerdu.jbpm.delegation;
import org.jbpm.delegation.*; import kellerdu.jbpm.LogsFactory; import org.apache.commons.logging.Log; import kellerdu.jbpm.Constants;
public class ChiefDecision implements DecisionHandler { public ChiefDecision() { }
/** * 判断是否需要主管批准,决定下一个要进行的transition * * @param executionContext ExecutionContext * @return String * @todo Implement this org.jbpm.delegation.DecisionHandler method */ public String decide(ExecutionContext executionContext) { Log log=LogsFactory.getLogInstance(this.getClass()); String ac=(String)executionContext.getVariable(Constants.USER_NAME); if(ac!=null&&(ac.equals("dali")||ac.equals("wang"))){ log.info(ac+"需要老板批准!"); return "BossApprove"; }else{ log.info(ac+"需要先经主管批准"); return "ChiefApprove"; } } } ======================= (三)fork package kellerdu.jbpm.delegation;
import org.jbpm.*; import org.jbpm.delegation.*; import org.jbpm.model.execution.*; import java.util.*;
public class DecidedJoin implements JoinHandler { public DecidedJoin() { }
/** * fork,只要一个分支到达,即可进行下一步操作,同时取消其它同时进行的分支。 * 这里就是用户如果取消,请假就取消。如果用户请假批准,则用户不能取消。 * * @param forkContext ForkContext * @throws ExecutionException * @todo Implement this org.jbpm.delegation.ForkHandler method */ public void join(JoinContext joinContext) throws ExecutionException { Iterator it=joinContext.getConcurrentTokens().values().iterator(); Token arrivingToken = joinContext.getToken(); while(it.hasNext()){ Token to=(Token)it.next(); if(to.getId().equals(arrivingToken.getId())){ //取消其它执行的Token joinContext.getExecutionService().cancelToken(to.getId()); } } // reactivate the parent token. joinContext.reactivateToken( arrivingToken.getParent() ); } }

|