2.2.4. ゲートウェイの進行先ノード判定ロジックを変更する方法

2.2.4.1. 進行先ノードの判定制御ロジックの実装

FlowProceedCondition インタフェースを実装することで、進行先ノードの判定制御としてPJ固有のロジックを用いることが出来る。

実装例(CM111004Component.java)

以下は、FlowProceedCondition を実装したコンポーネントの一部であり、ローン申請の内部自動審査後の条件分岐 (ワークフロー定義 の④に対応)のための 業務ロジックを実装している。

このコンポーネントは、内部自動審査後のXORゲートウェイから流出するすべてのシーケンスフローのフロー進行条件として 設定されているため、評価対象のシーケンスフローがどのタスクに進行するシーケンスフローかに応じて返却する値を変える必要がある。

仕様

パラメータから LoanApplicationEntity を取得(キー:loanApplication)し、 年収及びローン申請額を元に進行先を決定する。

ローン申請額が年収の半分以下の場合は「調査」タスクに進行し、半分より大きい場合は「却下」タスクに進行する。

実装方法

ローン申請額が年収の半分以下で、評価対象の SequenceFlow (引数として渡されている sequenceFlow )の 進行先が「調査」タスクの場合に true を返却する。

それ以外の場合には false を返却する。

@Override
public boolean isMatch(String instanceId, Map<String, ?> param, SequenceFlow sequenceFlow) {
    LoanApplicationEntity loanApplication = (LoanApplicationEntity) param.get("loanApplication");

    int annualSalary = loanApplication.getAnnualSalary().intValue();
    int loanAmount = loanApplication.getLoanAmount().intValue();

    if ((loanAmount * 2) <= annualSalary) {
        // 審査OKの場合、調査タスクが遷移先の場合に進行先とする。
        return sequenceFlow.getTargetFlowNodeId().equals(SURVEY_TASK_ID);
    } else {
        // 審査NGの場合、調査タスク以外(ワークフロー定義上、却下のみ)が遷移先の場合に進行先とする。
        return !sequenceFlow.getTargetFlowNodeId().equals(SURVEY_TASK_ID);
    }
}