【Blue Prism】例外処理の作成＜オブジェクト編＞

# はじめに
Blue Prismでは、人為的ミスや不具合などで動作が正常に終了しない場合があります。
そのため、Blue Prismで業務を自動化する際は動作の途中でエラーが起こることを想定し、それぞれのエラーに対応した例外処理を作成することが必要になります。
今回はそんな例外処理によく使うステージと作成例を紹介します。

# 例外ステージ
例外ステージでは例外のタイプや内容を記載し、ステージが例外に到達したとき、実行中の処理を「例外」として終了します。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/482ad3d4-6577-c1f6-9402-88652aeb6c07.png)
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/06689ff6-4b12-ae27-7774-d9aaed4ad5b2.png)
例外ステージで終了すると、例外のタイプと詳細が画面に表示されます。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/b15b63c2-092a-9b47-e94a-79bd732f954c.png)
# 復元ステージ
復元ステージは処理中に何かエラーが発生したときに自動で開始するステージです。
![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/2c3fd056-3ce4-ddf4-730e-110f41132769.png)
このステージの後に例外ステージや再試行用のプロセスを作るのが基本的な例外処理の形になります。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/2052d818-d0ec-c373-7fe8-e8e7a137be39.png)
復元から例外につなげる場合、「現在の例外のタイプと詳細を保持」にチェックをつけると、自分で入力しなくともBluePrismで発生したエラー内容をそのまま表示してくれます。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/a1d11cdc-c5e5-32e4-6017-560ed6708973.png)
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/991b9424-f5de-b389-1c79-85037a36107b.png)
注意点として、復元ステージはエラーが発生すると自動で開始するため、そのままにしておくと意図していないステージからのエラーを復元することがあります。
例えば下記の場合、操作１、２どちらでエラーが発生したとしても復元１が開始してしまいます。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/90c07abb-cc27-8b47-5693-296dc205e894.png)
そこで用いるのが「ブロック」です。
ブロックで処理と復元ステージを囲むと同じブロックの範囲でのみ起動するため、処理ごとに別々の復元処理を行うことができます。
下記の場合、操作１で起きたエラーは復元１に、操作２で起きたエラーは復元２が開始するようになります。
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/ec70369c-2e7c-4c36-45d1-29cbd6639c97.png)

# 再開ステージ
復元ステージからは例外だけでなく、別の処理を始めることができます。
しかし、このとき内部にはまだ例外が保持されており、その状態から更にエラーが発生した場合、復元ステージが開始せず処理が強制的に止まってしまいます。
![17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/b94e92db-1230-7e68-2a14-363cb196eb89.png)
そこで、再開ステージを経由することで保持している例外をリセットして処理を始めることができます。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/96193d8c-70eb-f268-02f8-829507798592.png)
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/3cb2d6ce-30af-9737-42ef-a8f0541d6210.png)
再開ステージを用いることで、例外とする前に別の処理（例外内容の取得やアプリの終了など）を行ったり、後で紹介する再試行処理を作成したりできます。
__※再開ステージで保持した例外がリセットされるため、その後ろの例外内容は自分で設定しなければなりません。__
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/a45067b3-76d2-d074-3f63-6f81bc36b479.png)

# 例外処理の作成
ここからは簡単な例外処理の例を紹介します。

・通常処理の後に待機ステージや判断ステージを用いて、処理結果が正常ではなかった場合に例外とすることができます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/614d2bfc-8811-ffc2-9055-bbb18cf352ac.png)
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/97d6ad99-4f99-56a5-7e2f-87fc256aa366.png)
・計算ステージや操作ステージなど、ステージ内でエラーが発生することがあるものは復元ステージを使い作成します。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/e6eefa8b-3904-5b84-ed6a-5631d73a209b.png)
・復元ステージ、再開ステージを用いて、再試行する処理を作ることができます。
このとき、下記のように計算ステージと判断ステージを活用して試行回数に制限を作ると無限ループを回避できます。
__※再試行処理はプロセスで作ることが推奨されているので、なるべくプロセスで作成しましょう。__
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/6a637ad9-0553-988f-37ce-a422e35d1b12.png)
複数作る場合は、ブロックで分割します。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2780594/28277a8d-0baf-9277-0aef-124a65aec8f5.png)

# まとめ
今回は例外についての簡単な説明と例を紹介しました。
このほかにも、例外メッセージを取得したり、キューを例外としてマークしたりなどパターンがありますので、そちらは次の機会に書こうと思います。
この記事が少しでも読んでくれた方の役に立ってくれますと幸いです。