はじめてのBlue Prism(3)― 例外処理

はじめてのBlue Prism

お久しぶりです、ビンちゃんです。

前回はBlue Prismのワークキューのアイテムを追加・取得する手順で出てきた疑問について書きました。今回は、Blue Prismの例外処理で出てきた疑問について書いていこうと思います。

ご存知の通り、Blue Prismでは、リンクを使ってステージを繋ぎます。一般的に、どんなステージにもそのステージへのリンクがあるはずですが、1つだけ特殊なステージがあります。それが復元ステージです。なぜなら、復元ステージは例外発生時にその例外に対処する処理を実行するステージだからです。なお、例外を発生させることを「例外のスロー」、例外が起こった時に専用の処理で対処することを「例外のキャッチ」と呼びます。

例外が発生するかどうかあらかじめ判断することはできないため、Blue Prismのスタジオでは復元ステージにリンクを繋ぐことができません。最初は復元ステージと再開ステージが似ていると思いましたが、役割はそれぞれ異なります。再開ステージは復元ステージがキャッチした例外の処理後に通常の処理に戻るステージなので、必ず復元ステージよりも後に配置されます。したがって復元ステージと異なり、再開ステージには手前からのリンクが必要です。復元ステージと再開ステージの見た目は最近の日本語環境では図1のようになりますが、英語環境ではステージ名が英語(Recover/Resume)になります。

図1 復元ステージと再開ステージ

復元・再開ステージ関連でよく使われる用語が「リカバリーモード」(復旧モード)です。BP公式サイトの資料によると、復元ステージを通るとBPはリカバリーモードになり、再開ステージを通るとリカバリーモードが終了します。公式テンプレートのリトライ処理の最初には復元ステージがあって、最後には再開ステージがあるので、BPはリトライ処理(図2)の間リカバリーモードになることが分かります。

図2 公式テンプレートのリトライ周辺+判断ステージの計算式

なぜリトライ処理はリカバリーモード中に行うのでしょうか。リトライ処理は、「Retry?」という判断ステージ、「Throw」という例外ステージや「Count」という計算ステージからなっています。「Retry?」の式は図3のようになり、論理積ANDの左と右の条件を同時に満たされなければなりません。ここで、「Retry Limit」はデフォルトで3を設定されているので、左の式がFalseにはなるのは「Retry Count」が3以上のときです。Exception Type()の条件には、system exceptionとinternalしか挙げられていないので、それ以外の例外タイプの場合はFalseになります。「Retry Limit」を設定しないと無限ループになってしまうので、左の式は分かりやすいです。

Exception Type()が、system exceptionとinternalの場合だけリトライ処理をするのは、この2つ以外、例えばbusiness exceptionはシステムの問題ではなく、人が入力したデータなどに問題があって発生した例外のため、リトライしても解消しないからです。

図3 「Retry?」判断ステージ

この右の式に、リトライをリカバリーモードで実施する理由があります。例外タイプ情報はリカバリーモードの中でしか取得できないのです。BPはリカバリーモードに入ったとき原因となった例外の情報を一時的に保存しますが、リカバリーモードが終わるとその情報を破棄してしまいます。

次に、例外ステージ(「Throw」)についても疑問点がいくつかありました。1つは、なぜ例外ステージはリカバリーモードの中にあるかです。もう1つは、例外ステージの「現在の例外のタイプと詳細を保持」チェックボックスの役割についてです。ただ1つ目の理由は前の段落と同じでした(例外情報を例外メッセージにも使うので、消える前に取得が必要)。
2つ目の疑問に関するチェックボックスは、図4(例外ステージの中身)の真ん中付近にあります。チェックボックスの役割はその名の通り、例外タイプと詳細を保持することです。この例外ステージで起こった例外は呼び出し元のページに送られますが、もしこのチェックボックスをチェックしないとどうなるでしょうか。呼び出し元ページに伝わる例外情報は例外ステージに記載した通りになるため、そもそもこの例外処理のきっかけになった例外(復元ステージでキャッチしたもの)に関する情報を受け渡すにはExceptionType()関数などを使用して例外メッセージを生成する必要があります。
また例外タイプには式を設定できないため、元の例外タイプを残すことはできなくなります。最初にキャッチした例外の情報を呼び出し元に伝えるには、このような「例外情報の保存」機能が必要なのです。

図4 例外ステージの中身

例外処理の話は、ちょっと難しいと感じています。でも重要な部分なので、しっかり取り組みたいです。
次回はデータ型について書く予定です。

  \入門者におすすめ!/

この記事をシェアする

前の記事

Power Automate Desktop無償版と有償版のちがい

次の記事

次世代のRPA活用とは―Blue Prism・マイクロソフトに聞く 【後編】