2018年7月3日火曜日

LogicFlow における Try-Catch-Finally パターン

Logic Apps や Flow では、エラー処理のためのパターンが利用できます。プログラムを書く方にはおなじみの Try-Catch-Finally な形式です。

想定通りの動きを作れるか試すために、以下のような LogicFlow を作成します。

image

上記のように、スコープを利用して Try 部、Catch 部、Finally 部を用意します。最初に適当な変数を作成していますが、これは後でエラーを発生させるためにも利用します。

image

次に Catch 部の設定を行います。右端をクリックすることで実行条件の設定を行えますので、「失敗」と「タイムアウト」にチェックをつけ他は外します。このような設定をすることで、処理が正常終了しなかった場合に対応することができます。場合によっては「スキップ」も設定してよいかもしれませんが、ここは Try 部分でスキップが発生するかどうかで分かれます。

image

次は Finally 部です。ここはここまでの処理がどうであれ、必ず実行を行う部分です。そのため実行条件としては、「成功」「失敗」「スキップ」「タイムアウト」すべてにチェックを付けます。

image

まずは正常パターンとなるように実行してみます。Try の中の処理は正常に実施できるよう、変数に値を 1 追加させるなど、問題なく動作するものを設定しています。

image

このように、Try 部と Finally 部が実行され、Catch 部がスキップされているのがわかります。これが正常処理時の流れとなります。

image

続いて処理でエラーをわざと発生させます。上記のように関数を利用することで、意図的にエラーを発生させることが可能です。

image

実行させると Try 部で関数がエラーとなり、Catch 部が実行され、Finally 部も実行されています。Catch 部ではこのようにエラーが発生した際の処理、例えば補正などを行うことになるかと思います。

image

最後に Catch 部の中でもエラーを発生させてみます。上記のように、Try 部、Catch 部それぞれでエラーとなっていますが、Finally 部は問題なく実施されています。

image

このような形で LogicFlow を実行できるのですが、一つ注意が必要です。このままだと、たとえエラーが発生したとしても LogicFlow の処理結果は「成功」となってしまいます。そのため、それぞれの部で、処理が終了したかどうかのステータスを変数に設定し、最終的にその値をもって成功か失敗かを返却する必要があります。

もちろんこの部分はケースバイケースで、たとえ途中でエラーが発生しても成功とするのがよしとされることもあります。必ずしもこう、というものではないので適宜変化させて利用してみてください。

0 件のコメント:

コメントを投稿