一個JBPM工作流管理示例(三)


(二)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() );
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章