JS7® JobSchedulerワークフロー間連携

#1. はじめに
JS7®JobSchedulerは独SOS社(Software- und Organisations-Service GmbH)によって開発されている、ジョブ管理システムです。
OSSジョブ管理ツールの定番JobSchedulerをリニューアルし、従来より耐障害性、大規模環境対応を強化し、ミッションクリティカルな要求に対応しています。
本記事では、ワークフロー間連携の方法を記載しています

詳細な情報については、以下をご覧下さい。

- ナレッジベース（英語）　https://kb.sos-berlin.com/display/PKB/JS7
- 日本語紹介資料 https://www.ossl.co.jp/
- フォーラム　https://groups.google.com/forum/?hl=ja#!forum/jobscheduler-ja
- Facebook https://www.facebook.com/Jobscheduler-Japan-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97-594469610565511/timeline/
- 日本JobSchedulerユーザーグループ https://sites.google.com/site/jobschedulerja/
- JIRA（英語） 　https://change.sos-berlin.com/secure/Dashboard.jspa
- User Forum（英語）　http://sourceforge.net/projects/jobscheduler/forums/forum/486122
- SOS社ホームページ　http://www.sos-berlin.com

#２. 前提条件

JS7® JobScheduler V.2.1以上がインストール済みであること
JS7® JobSchedulerの概要及びインストール方法、ワークフロー実行については以下を参照ください
Dockerでのインストール手順　https://qiita.com/satoruf/items/360fee5293611433ed33
Windowsでのインストール手順　https://qiita.com/Yoshitami/items/6804584592956a483364
Linux/CLIでのインストール手順　https://qiita.com/satoruf/items/fa9846f4376d1a50a67e
JS7® JobSchedulerクイックスタート https://qiita.com/satoruf/items/96f21ef25bcb35e47b21

#3. ワークフロー間連携とは

ワークフローとは一連のジョブを依存関係によって連続的に実行するひとかたまりの手続きですが、JS7®JobSchedulerではワークフロー間連携によってワークフローの依存関係も作成できます。
あるワークフローの次に自動的に別のワークフローを起動したり、結果と実行条件によって別のワークフローを起動することができます。

##(1) あるワークフローから他のワークフローを実行する場合（強い依存関係、同期実行）

あるワークフローから他のワークフローを実行するには「AddOrder命令」を使用します。
ワークフローの任意の位置で「AddOrder命令」で実行するワークフロー名を指定すると、即座に指定したワークフローにオーダーが発行され実行、変数を引き渡すことができます。

https://kb.sos-berlin.com/display/PKB/JS7+-+AddOrder+Instruction

*サンプルワークフロー：14_Sequencing*
![スクリーンショット 2021-12-08 15.32.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/9355c6cd-058d-eaf1-8c56-40c444c29e29.png)
AddOrder命令はワークフローの任意の位置で実行でき、サンプルのようにIf命令で囲むと前のジョブの結果によってオーダー発行が可能です。
AddOrder命令で引数を指定すれば、次のワークフローのオーダー変数に値を引き渡すことができます。
![スクリーンショット 2021-12-08 16.01.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/fef264e5-ba9b-0c60-c447-e1a0fc4b18fc.png)
終了時は留まるにチェックを入れると、発行したオーダーによって次のワークフローが完了しても上画面のようにオーダーが残り確認できるようになります。

##(２) あるワークフローを、他のワークフローの結果やタイミングによって実行する場合（弱い依存関係、非同期実行）

他のワークフローの結果やタイミングを非同期に組み合わせてワークフローを実行する場合は「通知ボード」を使用します。
通知ボードはワークフロー間で共有できるイベントのパブリッシュ・サブスクリプションの仕掛けです。

https://kb.sos-berlin.com/display/PKB/JS7+-+Notice+Boards

*サンプルワークフロー：13_Synchronization*

###1. 通知ボードの作成

まずワークフロー間で共有する通知ボードを作成します。
ジョブ定義画面のインベントリーの通知ボード新規を選択し、オブジェクト名を入力、登録します。
![スクリーンショット 2021-12-08 17.45.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/2a31d55d-138b-68fe-dcf6-08488473cbc1.png)
ワークフローのPostNotice/ExpectNotice命令は通知IDを使用しますので、通知IDは実行計画日・オーダー名一致にしておきます。
**通知有効期限**は、通知の有効期限を指定します。有効期限はPostNotice命令によって通知が作成されてからカウントされます。

###2. PostNotice命令

ワークフローから通知ボードに書き込むには、PostNotice命令を使用します。

https://kb.sos-berlin.com/display/PKB/JS7+-+PostNotice+Instruction

PostNotice命令はワークフローの任意の場所から、通知ボード名を指定して何回でも実行できます。PostNotice命令を実行後そのままワークフローの実行を継続します。
![スクリーンショット 2021-12-21 15.20.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/8c02c88c-e00c-6928-9ddf-ad62fb51d5b1.png)
通知ボードには、実行計画日時、または実行計画日＋オーダー名の組み合わせによる通知IDが登録されます。
通知ボードに書き込まれた通知IDは、同じワークフローからでも、複数の異なるワークフローからでも、参照できます。

###3. ExpectNotice命令

ワークフローから通知を待ち受けるには、ExpectNotice命令を使用します。

https://kb.sos-berlin.com/display/PKB/JS7+-+ExpectNotice+Instruction

ExpectNotice命令はワークフローの任意の場所から、通知ボード名を指定して何回でも実行できます。ExpectNotice命令は、指定した通知ボードに書かれる読み取り条件に合致する、有効期限内の通知IDを待ち受けます。
![スクリーンショット 2021-12-21 15.29.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52445/5461b2a8-378e-ff91-e5f5-31db25c0cdd1.png)
ワークフローの最初にExpectNotice命令がある場合、オーダー実行後合致する通知IDがなければ、それ以降のジョブは実行されず実行計画日の間通知を待ち続けます。