2.4.3 先行ジョブの結果でそのあとの処理を動的に変える(判定ジョブを使ったジョブネットの定義例)
先行ジョブの終了結果,ファイルの有無,先行ジョブの引き継ぎ情報で,あとの処理内容が動的に変わるようなジョブネットの定義には,判定ジョブを使用します。
(1) 判定ジョブの使用例
JP1/AJS3には,前に実行された処理の終了結果によって次に実行する処理の振り分けができる判定ジョブというジョブがあります。この判定ジョブには,次に示す二つの判定パターンがあります。
-
リターンコードによる判定
-
ファイルの有無による判定
ここでは,この二つの判定パターンによる判定ジョブの使用例について説明します。
また,判定ジョブに関連づけられている従属ユニットが異常終了した場合の再実行方法についても説明します。
(a) リターンコードによる判定
リターンコードによる判定ジョブの使用例を次の図に示します。
「在庫チェックジョブの実行結果を判定して,在庫数が不足気味の場合は発注伝票を作成し,在庫数に問題がなければ受注伝票を作成する。」というジョブネットを定義する例で説明します。
「在庫チェック」は,在庫数が十分である場合は戻り値3以下,在庫数が不足気味の場合は戻り値4,在庫数が不足している場合は戻り値5以上を返すものとします。
上記の図のように処理フローを作成することで,次に示す処理が実行されます。
-
在庫数が十分な場合
リターンコードが「3」以下であるため,「発注伝票作成」をスキップして「受注伝票作成」を実行します。
-
在庫数が十分ではない場合
リターンコードが「4」であるため,「発注伝票作成」を実行してから「受注伝票作成」を実行します。
(b) ファイルの有無による判定
ファイルの有無による判定ジョブの使用例を次の図に示します。
上記の図のように処理フローを作成することで,「lenchk」という実行ファイル内で実行される,ほかの処理(命令)での異常も検知して,従属ジョブ「dataput」を実行できます。
なお,ファイルの有無による判定は,業務管理ホスト(JP1/AJS3 - Manager)がインストールされているホストのファイルを判定します。ただし,環境設定によっては他ホストのファイルの有無をチェックすることもできますが,通信障害などによって正しく判定できないおそれがあります。ファイルの有無によって判定する場合は,マネージャーホスト上のファイルを指定することを推奨します。詳細については,マニュアル「JP1/Automatic Job Management System 3 導入ガイド 3.1.1(1)(c) 判定ジョブ」を参照してください。
(2) 判定ジョブを使ったジョブネットの定義例
「在庫チェックジョブの実行結果を判定して,在庫数がやや不足気味の場合は発注伝票を作成し,在庫数に問題がなければ受注伝票を作成する。在庫数が完全に不足している場合,在庫チェックジョブは異常終了し,リカバリージョブを実行する。」というジョブネットを,判定ジョブを使って定義する例を次の図に示します。なお,リカバリージョブについては,「2.4.6 ジョブが異常終了したときに特定の処理を実行する(リカバリーユニットを使ったジョブネットの定義例)」を参照してください。
この例では,先行ジョブの戻り値で判定しています。「在庫チェック」は,在庫数が十分の場合は戻り値3以下,在庫数がやや不足気味の場合は戻り値4,在庫数が不足している場合は戻り値5以上を返すものとします。
まず,「在庫チェック」の[終了判定]を[しきい値による判定]と設定し,[警告しきい値]を「3」,[異常しきい値]を「4」とします。このように設定することで,「在庫チェック」は実行後に戻り値によって判定され,次の状態に遷移します。
-
戻り値が3以下:「正常終了」状態
-
戻り値が4:「警告終了」状態
-
戻り値が5以上:「異常終了」状態
判定ジョブの判定条件には,[終了コードが判定値と等しい]と設定し,[判定値]を「4」とします。
これによって,「在庫チェック」を実行すると,以降のジョブは次のように実行されます。
-
「在庫チェック」の戻り値が3以下の場合
判定ジョブでは,判定値4と「在庫チェック」の終了コードが合致しないため,従属ジョブの「発注伝票作成」は実行されないで「受注伝票作成」が実行されます。
-
「在庫チェック」の戻り値が4であった場合
判定ジョブの判定条件に合致するため,従属ジョブである「発注伝票作成」を実行します。「発注伝票作成」が正常終了したら「受注伝票作成」を実行します。
-
「在庫チェック」の戻り値が5以上の場合
リカバリージョブが実行されます。異常終了の場合,後続ジョブは実行されないため,リカバリージョブの実行後に「受注伝票作成」は実行されません。
なお,判定ジョブを連続して定義すると,先行ジョブの終了結果に対して,判定ジョブの数だけ処理を定義できます。判定ジョブを連続して定義した場合について,次に説明します。
(3) 判定ジョブを連続して定義した例
判定ジョブは連続して定義することもできます。
終了コード(戻り値)による判定条件を設定した判定ジョブを連続して定義した場合,2番目以降の判定ジョブの判定対象となるのは,始めに定義した判定ジョブの先行ジョブに設定された終了コードです。従属ユニットの終了コードではありません。
一方,ファイルの有無を判定条件として設定した判定ジョブを連続して定義した場合,2番目以降の判定ジョブの判定対象となるのは,始めに定義した判定ジョブが条件判定した時点でのファイル情報ではなく,自判定ジョブが条件判定する時点でのファイル情報です。
判定ジョブを連続して定義した場合の例を,次の図に示します。
各ユニットは次のように定義されているものとします。
-
標準ジョブA:[終了判定]は[しきい値による判定],[警告しきい値]は「5」
-
判定ジョブB:判定条件は[終了コードが判定値と等しい],[判定値]は「0」
-
判定ジョブC:判定条件は[終了コードが判定値と等しい],[判定値]は「4」
このジョブネットを実行した場合,標準ジョブAの戻り値によって,以降のジョブは次のように実行されます。
-
標準ジョブAの戻り値が0の場合
判定ジョブBの判定条件に合致するため,判定ジョブBの従属ジョブである標準ジョブB'が実行されます。続いて判定ジョブCで判定されます。判定ジョブCの判定条件には合致しないため,判定ジョブCの従属ジョブである標準ジョブC'は実行されないで標準ジョブDが実行されます。
-
標準ジョブAの戻り値が4の場合
判定ジョブBの判定条件には合致しないため,判定ジョブBの従属ジョブである標準ジョブB'は実行されません。続いて判定ジョブCで判定されます。判定ジョブCの判定条件に合致するため,判定ジョブCの従属ジョブである標準ジョブC'が実行されたあと,標準ジョブDが実行されます。
-
標準ジョブAの戻り値が0と4以外の場合
判定ジョブBの判定条件にも判定ジョブCの判定条件にも合致しないため,従属ジョブである標準ジョブB',標準ジョブC'は実行されません。この場合,標準ジョブDだけが実行されます。
(4) 判定ジョブを並列に定義した例
判定ジョブは並列に定義することもできます。
判定ジョブを並列に定義した場合の例を,次の図に示します。
各ユニットは次のように定義されているものとします。
- 標準ジョブA
-
[終了判定]:[しきい値による判定]
[警告しきい値]:30
- 判定ジョブX
-
判定条件:終了コードが判定値の範囲内
[下限値]:1以上
[上限値]:9以下
- 判定ジョブY
-
判定条件:終了コードが判定値の範囲内
[下限値]:10以上
[上限値]:19以下
- 判定ジョブZ
-
判定条件:終了コードが判定値の範囲外
[下限値]:1以上
[上限値]:19以下
それぞれの判定ジョブの判定値の範囲は,次のようになります。
このジョブネットを実行した場合,標準ジョブAの終了コードによって,以降のジョブは次のように実行されます。
-
標準ジョブAの終了コードが1以上9以下の場合
判定ジョブXの判定条件に合致するため,判定ジョブXの従属ジョブである標準ジョブBが実行されます。
-
標準ジョブAの終了コードが10以上19以下の場合
判定ジョブYの判定条件に合致するため,判定ジョブYの従属ジョブである標準ジョブCが実行されます。
-
標準ジョブAの終了コードが1より小さい,または19より大きい場合
判定ジョブZの判定条件に合致するため,判定ジョブZの従属ジョブである標準ジョブDが実行されます。
(5) 注意事項
判定ジョブの結果でルートジョブネットや先行ユニットを再実行する場合は,次の図に示すように再実行するジョブを従属ジョブとして定義してください。
再実行するジョブを従属ジョブネット配下に定義した場合,再実行されたジョブが終了するタイミングによっては,従属ジョブネットが再び実行されます。
このため,再実行する前にリカバリー処理などをする場合は,次の図の「■改善前の定義例」のように「リカバリー処理」と「再実行」を一つの従属ジョブネットの中に定義するのではなく,「■改善後の定義例」のように「リカバリー処理」を行う従属ジョブネットと「再実行」を行う従属ジョブとに分けて定義してください。