前回、特定の時間帯だけしか動かないワークフローをAMPエンジンオンの状態で作りました。今回はAMPオフの場合について見ていきたいと思います。
基本的な考え方(おさらい)
基本的には、現在日時ツールを使います。

これにより、ワークフロー実行時の日時を取得することができます。これに対して、実行可能時間帯リストと比較し、ワークフローを実行していいかどうか判断をします。オッケーであれば、そのまま何もしませんし、NGであればワークフローを止めます。この止め方のところでAMPオン、オフ、およびインプットしないようにするのか、出力しないようにするのか、で異なるのですが、今回はAMPオフの場合を取り扱います。
実行時間帯チェック
実行時間帯チェックは前回と同様です。

詳細は前回の記事をご覧ください。
それでは今回の主題に移ります。
AMPエンジンオフの場合
AMPエンジンをオフにして旧来のエンジン(E1)を使う場合はどうすれば実現できるでしょうか?オリジナルエンジンではワークフローを実行する順序の制御には多少の工夫が必要です。また、入力と出力でそれぞれ対応が異なります。
出力の場合
特定の時間帯に出力しないようにしたい場合、つまりデータベースへの書き込みを制限したいような場合は、以下のようにします。

さらに、ワークフロー設定にて「エラー時のワークフローの実行をキャンセルする」オプションをオンにします。

その他のポイントとして、メッセージツールの出力をフィールド付加ツールでテキスト入力ツールに付加していますが、ここが重要なポイントです。

この接続がない場合は、勝手に右下部分も実行されてしまいます。この接続のおかげで、テキスト入力ツールの入力結果に対して「実行時間チェック」がすべて行われた結果がフィールド付加ツールで付与されるまでその後のデータ出力ツールが動かない、という動きになっています。つまり、実質的にメッセージツールにてエラーが起こった場合は、ワークフローの実行がキャンセルされるためそれ以降のデータ出力ツール部分が動かない、ということになります。
なお、「エラー時のワークフローの実行をキャンセルする」オプションをオフにしてもうまく動きそうですが、メッセージツールのオプション「このツールを通過するレコードを停止する」を使っていても、0レコードのまま動き続け、最終的にレコードが0のファイルを生成したり(ヘッダのみのファイル)、0件でDBへ書き込んだりします。つまり、完全な抑制ができないため必ず「エラー時のワークフローの実行をキャンセルする」オプションをオンにしましょう。

ここで注目すべき点ですが、「実行したいワークフロー」のデータ入力部分(今回はテキスト入力)はこの方法では制御ができません。たいてい今のように組めば、そのまま赤枠内が先に実行されるケースは多いですが、長大なワークフローを作っているような場合、赤枠外のデータ入力が先に走ったりします。そのため、データ入力を動かしたくない、ということがこの方法ではできないことがあります。
入力の場合
上記のケースでうまくいけばそのまま使えばいいのですが、厳密にやるにはどうしたらよいのでしょうか?ここまで来るともうマクロ(バッチマクロ)を使うしかありません。これを実現するために非常に簡単なマクロにしてみましょう。
実行したいメインのワークフロー部分を切り出しバッチマクロ化します。コントロールパラメータ入力はダミーなのでどこにも接続しなくてオッケーです。気になる人は、実行を制御したい部分をまるごとコンテナに入れてカウントが0の場合はDisableにする、という方法を取ることも可能です(より確実な方法ではあるかと思います)。ちなみに、コントロールパラメータ入力がマクロ内の実行回数を制御しているため、データがNull(まったく来なかった場合)の場合はバッチマクロ内はまったく実行されません。※ですので、基本以下の形で問題ないのですが、たまにバグなどが発生するので、より慎重な方法を取るのであれば、コンテナに入れてDisableというのもまぁありかもしれないですね・・・

これを呼び出すためのワークフローは以下のようになります。

この方法であれば、AMPエンジンでも利用可能です。面倒ではありますが、コントロールコンテナが使えない場合はこの方法を取ることになります。なお、この方法ではバッチマクロのコントロールパラメーター入力への入力でバッチマクロの動作を制御しているため、「エラー時のワークフローの実行をキャンセルする」オプションをオフにしても正常に動作します。
まとめ
- 特定の時間帯しか動作しないワークフローの作り方を前回に続いて解説しました
- 今回はAMPオフの場合の手法について説明しました。この中でもバッチマクロを使う方法は、コントロールコンテナを利用できない2020.2~2022.3でもAMPオンで使うことができます。
サンプルワークフローダウンロード
次回
次回はワークフローの実行順制御のお話をしたいと思います。
コメント