見出し画像

「例外処理」を使いこなす!予測できるエラーは回避して、止まらないシナリオを作成する(WinActor)

 エラー対策関係のお話は「エラー対策」「シナリオファイル呼び出し」に続き3本目です。それだけ方法もいろいろ考えられますし、お話は尽きません。そんなシリーズ第三弾のテーマは「”例外処理”を使いこなす✨」です。

例外処理については、以前の記事でも少し触れました。
今回掘り下げていろいろな使い方など、ご紹介したいと思います。

「例外処理」いろいろな使い方

📝 例外処理(ノード -> フロー)
例外処理を使うことで、エラーが発生したときや特定の画面が表示されたときに、予め決めておいた動作を実行することができます。

「正常系」の中でエラーが発生したときに「異常系」へとぶ

例外処理の主な使い方として3つご紹介します。
1.シナリオ全体に対して組み込む
2.部分的に例外処理を使用する
3.監視ルールの対処種別として使用する

ではこの3パターンについてそれぞれ下記シナリオを例にみていきましょう。

Webシステムを起動し入庫データを登録していく


1.シナリオ全体に対して組み込む

 例外処理の使い方として最もポピュラーなパターンです。
作成したフローをそのまま正常系の中へ配置します。
シナリオを実行中にエラーが発生したら異常系へとび、例えばエラー情報を収集しメールで担当者に通知させるような場合です。
シナリオが一通り完成した後、最後に実装することが多いです。

▲例外処理1

 このパターンを使うとき、シナリオ実行中いつエラーが起きても処理がそこで止まらないようにしておくという目的であることが多いため、異常系の中にはエラーが起きたときの情報を取得しメールで通知したり、ログを記録するといった、そのあと改修するための工程を置くことが多いです。

なお、「処理の途中でエラーが発生した場合、どこまで処理が終わったかを把握できるようなフローになっているか」ということに注意してください。【エラー情報収集】ノードはエラーを起こしたノードのノードIDやノード名等を取得するものであって、実際にどこまで処理が済んでいるといった内容を取得するものではありません。(もちろん、どこまで処理が進んだか推測するための情報の一つなので重要ではあるのですが)

例を挙げると、エクセルからデータの数だけシステムに入力する、といった繰り返しの工程では「繰り返しの何回目でエラーが起きたのか」ということをぱっと見て把握するのが難しい場合があります。
またエラーを修正した後、実行し直すにしても処理が済んだデータについてはスキップしたいということもあるかと思います。

では【エクセルの該当列の値(下記図でいうと「備考」の右側)が空白なら処理をおこない、処理が完了したら”済”と記入させる】という方法はいかがでしょう。
これならたとえ途中で処理が止まってしまって最初から実行し直すとしても”済”の分はスキップすることができます。

【備考の右の列に値が入っていないときは処理をして終わったら”済”を記入させる】ようにシナリオを作成する

もちろんこのやり方だけではありません。シナリオの内容や業務の運用によって様々方法が考えられると思います。エラーを通知させるところまで作ったら、ぜひその先、再開するときのしやすさも織り込んでシナリオ作成に挑戦してみてください!

⭐ エラー発生後の工程としてよくある内容3選
 異常系の中で置く内容として、よくあるパターンとして下記があります。
 ・エラーが起きたことを社内の担当者宛にメールで通知
 ・エラー情報をエクセルなどの外部ファイルへ記録
 ・エラー発生時の画面キャプチャとエラー情報を社内担当者宛にメールで通知

⭐ エラー発生後の工程を部品化してしまおう
上記で挙げた内容は別シナリオとして作成しておき、「シナリオファイル呼び出し」を使って実行するようにしておくことで他のシナリオでも同じようにエラー時の工程としてすぐに実装することができ便利です。


2.部分的に例外処理を使用する

 例外処理はフローの一部にのみ使用することもあります。
単に工程の一部分のみのエラー対策として使ったり、操作するアプリケーションの挙動を利用して分岐のように使うこともあります。

▲例外処理2

 例外処理2の例では、「入庫登録ボタンのクリック」という工程のみを例外処理に組み込んでいます。1回目のクリックで失敗したときに時間をおいて再度クリックさせるためです。

動作確認をしていると、特定のノードで毎回ではなく時々失敗する、ということがあります。もちろん別のノードに置き換える、直前の待機時間を延ばす等、別の対策を取ることもありますが、そういった対策の一つとして例外処理を使い、失敗したら再度チャレンジさせるという使い方をすることがあります

▲例外処理3

 続いて例外処理3の図では、アプリケーションの挙動を利用して処理を分岐させるために例外処理を使用しています
チェックボックスへチェックを入れる工程の繰り返し処理において、チェックボックスのindexをカウントアップして次のチェックボックスをクリックしていき、indexが存在しない数字に達したら「チェックボックス」ノードがエラーを起こすので異常系へ処理がとび繰り返しを終了させています。

チェックボックスの上から順番に✔を入れていく業務のイメージ

⭐ つじつまが合うように作るべし!

 1・2の場合とも「つじつまを合わせる」ことを意識してください。
正常系のみを通った場合/異常系へとんだ場合、どちらを通ったとしても例外処理を抜けたあと問題なく実行していけるようなフローである必要があります。

【例外処理1】の例では、異常系にとんだ場合「ウィンドウを閉じる」ノードを通らないためシナリオ終了時システムは開きっぱなし、ということになります。それでよいのか、よくないのか、気にして作成する必要がありますね。
【例外処理3】の例でいうと、異常系にとんだ場合は二つのカウントアップを通らずに繰り返しを抜けて続きの処理にいくことになりますがそれで問題ないか?確認しておきましょう。

異常系に飛んだ処理は異常系内の処理をすべて終えたら正常系の終わりの地点に合流します。
WinActorの変数値やアプリケーションの画面や操作状況において、正常系内を処理したときと異常系内を処理したときで整合性が取れていないと再びエラーを起こすことになりかねませんので十分に注意が必要です

⭐ エラー回避を連続で行いたい場合はどうする?

 「正常系内を実行中にエラーが発生したら異常系へとぶ」ところまでは良しとして、異常系内で更にエラーが起きたときはどうなるでしょうか。例外処理ノードのプロパティ画面を見てみると、異常系を追加できることに気づきます。

Ver.6系統では11個まで、Ver.7系統では無制限に追加できる

しかしこのように設定しても「異常系内でエラーが起きたら隣の異常系へとぶ」という動き方はしません。異常系の中でエラーが発生したら、例外処理がないときと同様にエラーメッセージが出てそこで処理が止まります

異常系内でエラーが起きても次の異常系へとぶわけではない

エラーが起きたら異常系へとぶ構造を連続で作成したいときは下記の図のように正常系の中に例外処理を複数置くことになります。

👆の場合、エラー①⇒エラー②⇒エラー③⇒待機ボックスの順で実行される

このような作りにすることで、異常系内でエラーが起きても外側の異常系へ飛ばすことができるようになります。

3.監視ルールの対処種別としての例外処理

 では、異常系の追加はどういったときに使うものなのでしょうか。 
それが「監視ルール機能」です。

📝 監視ルール(表示メニュー -> 監視ルール一覧より登録)
 
監視ルール一覧で予め登録しておいた特定のウィンドウがシナリオ実行中に出現したときに、設定の通りに処理を行うことができる機能です。

監視ルールの対処種別は「例外処理」以外に「シナリオを停止させる」と「サブルーチンを実行する」もありますがここでは割愛します。

「保存」をクリックして上書きするかの確認ウィンドウが表示されたら監視ルールがはたらき2つ目の異常系へとぶしくみ

 監視ルールで「例外を発生させる」設定をしておくと、シナリオ実行中に設定したウィンドウが出現したら、登録されている例外処理の異常系へ処理がとびます。
上の図では、「名前を付けて保存」ウィンドウで「保存」をクリックしたとき、既に同名のファイルが存在しているために「上書きしますか?」という確認のウィンドウが表示されたら2つ目の異常系へとぶ、ということになります。

 なお監視ルールは、登録しているウィンドウが出現しているか探すのに少し時間がかかるためシナリオの作り方次第では反応しないということが起こります。
また、監視ルールをたくさん登録するとシナリオ全体の実行速度が遅くなりますのでその点も考慮が必要です。

📝 画像マッチング+分岐でもOK
 
特定のウィンドウの出現有無によって処理内容を変えたいとき、「画像マッチング」や「ウィンドウ状態待機」で結果を取得、その結果によって分岐する方法もよく採られます。ウィンドウ出現のタイミングが決まっているのであればこちらの方が確実でしょう。いつ出現するかわからないウィンドウの処理に監視ルールは使うことが多いですが、「例外を発生させる」使い方に関しては、正常系内を実行中に出現した場合にしか使えないので使いどころが難しいかもしれません。

「例外処理」の深掘りのお話、いかがでしたでしょうか。
ぜひ有効的に使って、運用・保守の時期に入ってからの手間もなるべく省き業務の効率化を目指してくださいね!

最後までお読みいただきありがとうございました。
また次回お楽しみに☆
ワークスアイディ キャンスタ編集部 RPAエンジニアのすずでした。

みんなにも読んでほしいですか?

オススメした記事はフォロワーのタイムラインに表示されます!

最後まで読んでいただきありがとう御座います!Works ID_DXサイトも是非ご覧ください👍!