「例外処理」を使いこなす!予測できるエラーは回避して、止まらないシナリオを作成する(WinActor)
エラー対策関係のお話は「エラー対策」「シナリオファイル呼び出し」に続き3本目です。それだけ方法もいろいろ考えられますし、お話は尽きません。そんなシリーズ第三弾のテーマは「”例外処理”を使いこなす✨」です。
例外処理については、以前の記事でも少し触れました。
今回掘り下げていろいろな使い方など、ご紹介したいと思います。
「例外処理」いろいろな使い方
例外処理の主な使い方として3つご紹介します。
1.シナリオ全体に対して組み込む
2.部分的に例外処理を使用する
3.監視ルールの対処種別として使用する
ではこの3パターンについてそれぞれ下記シナリオを例にみていきましょう。
1.シナリオ全体に対して組み込む
例外処理の使い方として最もポピュラーなパターンです。
作成したフローをそのまま正常系の中へ配置します。
シナリオを実行中にエラーが発生したら異常系へとび、例えばエラー情報を収集しメールで担当者に通知させるような場合です。
シナリオが一通り完成した後、最後に実装することが多いです。
このパターンを使うとき、シナリオ実行中いつエラーが起きても処理がそこで止まらないようにしておくという目的であることが多いため、異常系の中にはエラーが起きたときの情報を取得しメールで通知したり、ログを記録するといった、そのあと改修するための工程を置くことが多いです。
なお、「処理の途中でエラーが発生した場合、どこまで処理が終わったかを把握できるようなフローになっているか」ということに注意してください。【エラー情報収集】ノードはエラーを起こしたノードのノードIDやノード名等を取得するものであって、実際にどこまで処理が済んでいるといった内容を取得するものではありません。(もちろん、どこまで処理が進んだか推測するための情報の一つなので重要ではあるのですが)
例を挙げると、エクセルからデータの数だけシステムに入力する、といった繰り返しの工程では「繰り返しの何回目でエラーが起きたのか」ということをぱっと見て把握するのが難しい場合があります。
またエラーを修正した後、実行し直すにしても処理が済んだデータについてはスキップしたいということもあるかと思います。
では【エクセルの該当列の値(下記図でいうと「備考」の右側)が空白なら処理をおこない、処理が完了したら”済”と記入させる】という方法はいかがでしょう。
これならたとえ途中で処理が止まってしまって最初から実行し直すとしても”済”の分はスキップすることができます。
もちろんこのやり方だけではありません。シナリオの内容や業務の運用によって様々方法が考えられると思います。エラーを通知させるところまで作ったら、ぜひその先、再開するときのしやすさも織り込んでシナリオ作成に挑戦してみてください!
2.部分的に例外処理を使用する
例外処理はフローの一部にのみ使用することもあります。
単に工程の一部分のみのエラー対策として使ったり、操作するアプリケーションの挙動を利用して分岐のように使うこともあります。
例外処理2の例では、「入庫登録ボタンのクリック」という工程のみを例外処理に組み込んでいます。1回目のクリックで失敗したときに時間をおいて再度クリックさせるためです。
動作確認をしていると、特定のノードで毎回ではなく時々失敗する、ということがあります。もちろん別のノードに置き換える、直前の待機時間を延ばす等、別の対策を取ることもありますが、そういった対策の一つとして例外処理を使い、失敗したら再度チャレンジさせるという使い方をすることがあります。
続いて例外処理3の図では、アプリケーションの挙動を利用して処理を分岐させるために例外処理を使用しています。
チェックボックスへチェックを入れる工程の繰り返し処理において、チェックボックスのindexをカウントアップして次のチェックボックスをクリックしていき、indexが存在しない数字に達したら「チェックボックス」ノードがエラーを起こすので異常系へ処理がとび繰り返しを終了させています。
⭐ つじつまが合うように作るべし!
1・2の場合とも「つじつまを合わせる」ことを意識してください。
正常系のみを通った場合/異常系へとんだ場合、どちらを通ったとしても例外処理を抜けたあと問題なく実行していけるようなフローである必要があります。
【例外処理1】の例では、異常系にとんだ場合「ウィンドウを閉じる」ノードを通らないためシナリオ終了時システムは開きっぱなし、ということになります。それでよいのか、よくないのか、気にして作成する必要がありますね。
【例外処理3】の例でいうと、異常系にとんだ場合は二つのカウントアップを通らずに繰り返しを抜けて続きの処理にいくことになりますがそれで問題ないか?確認しておきましょう。
異常系に飛んだ処理は異常系内の処理をすべて終えたら正常系の終わりの地点に合流します。
WinActorの変数値やアプリケーションの画面や操作状況において、正常系内を処理したときと異常系内を処理したときで整合性が取れていないと再びエラーを起こすことになりかねませんので十分に注意が必要です。
⭐ エラー回避を連続で行いたい場合はどうする?
「正常系内を実行中にエラーが発生したら異常系へとぶ」ところまでは良しとして、異常系内で更にエラーが起きたときはどうなるでしょうか。例外処理ノードのプロパティ画面を見てみると、異常系を追加できることに気づきます。
しかしこのように設定しても「異常系内でエラーが起きたら隣の異常系へとぶ」という動き方はしません。異常系の中でエラーが発生したら、例外処理がないときと同様にエラーメッセージが出てそこで処理が止まります。
エラーが起きたら異常系へとぶ構造を連続で作成したいときは下記の図のように正常系の中に例外処理を複数置くことになります。
このような作りにすることで、異常系内でエラーが起きても外側の異常系へ飛ばすことができるようになります。
3.監視ルールの対処種別としての例外処理
では、異常系の追加はどういったときに使うものなのでしょうか。
それが「監視ルール機能」です。
監視ルールの対処種別は「例外処理」以外に「シナリオを停止させる」と「サブルーチンを実行する」もありますがここでは割愛します。
監視ルールで「例外を発生させる」設定をしておくと、シナリオ実行中に設定したウィンドウが出現したら、登録されている例外処理の異常系へ処理がとびます。
上の図では、「名前を付けて保存」ウィンドウで「保存」をクリックしたとき、既に同名のファイルが存在しているために「上書きしますか?」という確認のウィンドウが表示されたら2つ目の異常系へとぶ、ということになります。
なお監視ルールは、登録しているウィンドウが出現しているか探すのに少し時間がかかるためシナリオの作り方次第では反応しないということが起こります。
また、監視ルールをたくさん登録するとシナリオ全体の実行速度が遅くなりますのでその点も考慮が必要です。
「例外処理」の深掘りのお話、いかがでしたでしょうか。
ぜひ有効的に使って、運用・保守の時期に入ってからの手間もなるべく省き業務の効率化を目指してくださいね!
最後までお読みいただきありがとうございました。
また次回お楽しみに☆
ワークスアイディ キャンスタ編集部 RPAエンジニアのすずでした。