下面的類在JBPM的FORK 的多個transition 中選擇部分transition . 值得參考 package %%%%%%%%%%%%%%.actionHandler;import %%%%%%%%%%%%.BpmTransition;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.jbpm.context.def.VariableAccess;import org.jbpm.graph.action.Script;import org.jbpm.graph.def.ActionHandler;import org.jbpm.graph.def.Transition;import org.jbpm.graph.exe.ExecutionContext;import org.jbpm.graph.node.Fork;import %%%%%%%%%%%%%.BpmContant;/*** @author * @version * @company * @version 1.0 */public abstract class ForkHandlerBase implements ActionHandler{private static final long serialVersionUID = 1L;public abstract String[] filterPaths(List<BpmTransition> bpmTransition,Map mapValues);public void execute(ExecutionContext context) throws Exception { String[] transitionNames=filterPaths(getBpmTransitions(context),getMapVaules(context)); if (transitionNames!=null){ Script script = new Script(); script.addVariableAccess(new VariableAccess("transitionNames", "write", null)); //轉換 轉移名稱數組 為符合jBPM運算式的字串 StringBuffer tn = new StringBuffer(); for(String transitionName : transitionNames){ tn.append(" transitionNames.add(\"").append(transitionName).append("\");"); } script.setExpression("transitionNames = new ArrayList();" + tn.toString() ); // put the script in the forkName handler Fork fork = (Fork)context.getNode(); fork.setScript(script); }}private Map getMapVaules(ExecutionContext context){return (Map)context.getContextInstance().getTransientVariable(BpmContant.BPM_BUSINESSDATE);//BpmContant.BPM_BUSINESSDATE只是流程臨時變數的key. 自訂的}private List<BpmTransition> getBpmTransitions(ExecutionContext context){ List<BpmTransition> transitionlist=new ArrayList<BpmTransition>(); List leavingTransitions=context.getNode().getLeavingTransitions(); BpmTransition workflowTransition=null;for (Object obj:leavingTransitions){Transition transition=(Transition)obj;workflowTransition=new BpmTransition();//BpmTransition只是封裝Transition的一個vo. workflowTransition.setFrom(transition.getFrom().getName());workflowTransition.setTo(transition.getTo().getName());workflowTransition.setTransitionName(transition.getName());transitionlist.add(workflowTransition);}return transitionlist;}}