前回は RPA の設計にフローチャートを描くのに便利なツールをご紹介しました。今回は、前々回のユーザーにエスカレーションを行う RPA をベースに、「ユーザーが異常だと認めたら RPA を中断する」という処理を追加しながら、フローチャートを活用していきたいと思います。
中断を含む RPA をフローチャートを描きながら自作する
前々回は、ファイルの上書き確認ダイアログが表示された場合に、上書きするかどうか、ユーザーに選択してもらいました。この RPA を改造していくのでまだ作成していない方は目次ページから戻って作成してみてくださいね。
さて、今回はこの「上書きするかどうかの確認」に更に「後の RPA の実行(マウスのドラッグ)をキャンセルして終了する」という選択を追加していきましょう。メッセージボックスはボタンを3個まで表示できることを覚えていると思います。3個のボタンの入力を判別するために、今回は[ElseIf]文を新しく学習します。
また、今回はフローチャートを実際の RPA にあわせて描いてみます。「フローチャートって実際どう使うか分からない!」という人も、一度見てみてください。Pulover’s Macro Creator でウィンドウがアクティブになったか、タイムアウトしただけなのかを判断する方法についても、フローチャートを用いて解説します。
この記事が役に立つ人
- Pulover’s Macro Creator で3つ以上の条件分岐の書き方を覚えたい人
- Pulover’s Macro Creator の RPA を途中で止める方法を知りたい人
- RPA でフローチャートをどう使うか知りたい人
関連記事
フローチャートを描いてみる
フローチャートは設計に便利なツールです。前回ご紹介したGitMind を利用して頭の中を整理する意味でもフローチャートを描きます。
前々回の RPA シナリオのフローチャート
では、フローチャートを描きます。前回の説明通り、「一般的なプロセス」テンプレートを使って新規作成します。スタイルをコピーするために、1色1つくらいずつ記号を残して、全て削除します。その上で、隅の方に凡例代わりに固めておきます。
「はい」「いいえ」記号は分岐の記号に便利なのでコピーできるようにおいておくといいでしょう。
ざっくりと描く
※クリックで大きな画像になります
フローチャートで分岐を整理して描くコツは、「本流」を縦方向か横方向に決めて、分岐をそれとは違う方向(本流が縦なら横)に広げると読みやすくなります。何より、 RPA のように「正しい流れ」がある処理の場合は、どの辺りが複雑になってしまっているのかがぱっと見て分かりやすいですね。
「ウィンドウがアクティブになるまで待つ」を記載するか?
今回記載した図では「ウィンドウがアクティブになるまで待つ、アクティブではなくなるまで待つ」といった処理は記載していません。というのも、そこで「分岐」を行っていないからです。サンプルでは、10秒経過したらウィンドウがアクティブにならなくても処理を継続するようにしています。
もし、10秒経過した後にウィンドウが表示されていない場合の処理を記載する場合は、大体以下のようになると思います。
上半分の「日」の字状になっている部分が、実際に「メモ帳がアクティブになるまで待つ」という処理になります(ループ構造といいます)。ウィンドウがアクティブになるか、10秒経過したかの判定は、Pulover’s Macro Creator が行ってくれているため、たった1アクションでこの2回の条件分岐を書けています。
一方、下半分は今まで出てこなかった分になります。Pulover’s Macro Creator では、「ウィンドウがアクティブになったか」、「タイムアウトの秒数が経過したか」を判断する方法は用意されていません。
そこで、Pulover’s Macro Creator では、If文を使い、あらためてメモ帳がアクティブになっているかどうかを記述することになります(フローチャートの下半分)。
通常の(フローチャートの)用途であれば、単純に下半分のみをチャートに記載するといいでしょう。もし、どうしてもタイムアウトの秒数が重要な場合や、何秒も待つ可能性があるということを明示しなければならない場合は、定義済みサブルーチン記号などを用いて、「ウィンドウがアクティブになるか、xx秒経過するまで待つ」という記号を記入するといいでしょう(処理ではないため)。
この辺りは記述する人や所属する組織によって変化する部分です。
今回作成する RPA のフローチャート
前々回の RPA シナリオを改変していきますので、
上図周辺を変えていけばよさそうです。「確認ダイアログ」の表示は1回だけですが、3つ以上の分岐には「条件判断」記号を複数接続して表現するのが正しい(とされる、伝統的な)フローチャートの描き方でした。
前々回は、
- 「はい」がクリックされた場合
- それ以外がクリックされた場合
という場合分けでした。今回は、
- 「はい」がクリックされた場合
- それ以外がクリックされた場合
- 「いいえ」クリックされた場合
- それ以外がクリックされた場合
とすると良さそうです。ではこれをフローチャートに起こしてみましょう。
※クリックで大きいサイズを開く
もう1つ分岐を追加しました。
「いいえがクリックされたか?」という問いが少し混乱しがちですが、落ち着いてどういう条件かを考えてみましょう。この場合は、ユーザーがクリックしたボタンが「いいえ」のときに「はい」の分岐に入ります。慣れるまで混乱しがちなので、条件分岐で混乱したらその部分だけでもフローチャートを描くと頭の中が整理できますよ。
フローチャートを元に RPA を改造する
では、描いたフローチャートを元に RPA を実際に書き換えていきます。完成形が見えているので作業しやすいですね。
前々回作成した RPA シナリオをまだ開いていない方は、開いてください。
メッセージボックスの変更
フローチャートでは改変しませんでしたが、ユーザーに表示するダイアログの改造から始めましょう。
現在は、「OK」「キャンセル」ボタンを表示するものですが、これを3つのボタンのものに変えます。
[MsgBox]アクションをダブルクリックして編集ダイアログを表示します。ボタンの中に、「はい/いいえ/キャンセル」というものがありますので、これがよさそうです。
また、タイトルはともかく、「メッセージ」がこのままだとユーザーを混乱させてしまう可能性があるので、以下のように書き換えました。
「上書き保存しますか? キャンセルで RPA を停止します」
Pulover’s Macro Creator ではメッセージボックスのボタン内容はパターンから選択方式になっています。また、そうでなくても、ダイアログのボタンは短い言葉で書く必要があります。
そのため、「多分分かるだろう」とか「常識的にはこう判断するよな」とか、勝手な判断はやめて、できるだけ「伝わるような」メッセージを書くように心がけましょう。こういったところでも RPA の品質は判断されますし、人的エラーを避けることができるようになります。
IfMessage Box の変更
MsgBoxに続くIfMessage Box も変更する必要があります。というのも、今までのメッセージボックスは「OK/キャンセル」でしたが、今は「はい/いいえ/キャンセル」となって文言が変わってしまっているためです。
まずはこれを修正していきましょう。IfMessage Boxをダブルクリックして、編集ダイアログを表示します。
今、OKとなっているところを「はい」に変更します。
ここまで出来たら、いったん RPA を動かして、「はい」ボタンで保存されることを確認します。
動作させてみると、「はい」と「OK」がどちらでも動く場合があります。しかし、リファレンスでは明確に違うものとして定義されているので、面倒臭がらずにMsgBoxの設定内容とIfMsgBoxの設定内容は合わせるようにしましょう。
ElseIfの追加
MsgBoxに対応したIf文は、MsgBoxと一緒に追加してしまいました。しかし、先ほど編集ダイアログを表示したように、独立したIf文として扱うことができます。それに、[MsgBox]をダブルクリックした際には、追加でElseIfを追加できそうではありませんでした。
RPA シナリオが記載されたパネルから[Else]を選択した状態にして、If文ボタン(F10)を押します。
まず、最初のドロップダウンリスト(if文の種類)を「メッセージボックスである場合」とします(翻訳が少しおかしいですが……)。さらに、最初のIf文で「はい」の場合にしたので、今度は「いいえ」の場合とします。
最後に、「Else If」にチェックをいれ、OKボタンでアクションを挿入します。
すると、アクションは[ElseIf]と[Else]が連続する形で挿入されます。このとき、Else Ifにチェックをいれた場合と違って、EndIfは挿入されないことに気をつけてください。
そして、さきほどまで「それ以外のとき」つまり、ElseからEndIfの間に実行していたアクションは、「いいえ」のときに実行したいので、[Else]をドラッグして1つめの[EndIf]の手前に移動します。[ElseIf]の条件が真のとき(ダイアログでいいえをクリックしたとき)は、[ElseIf]から[Else]の間が実行されます。
そして、「キャンセル」がクリックされたり、その他の要素で閉じられた場合(「はい」でも「いいえ」でもないその他の場合)は、[Else]と[EndIf]の間が実行されます。
ここで、If文の基本的なルールです。
ElseIfではEndIfが入力されませんでした。これは、EndIfはIf文につきひとつ、というルールがあるからです。
同じく、ElseもIf文にひとつです。
しかし、ElseIfについては、ひとつのIf文に対して、いくつでも設定することができます。
例えば、
- ダイアログで1が入力された場合(If)
- 1以外で2が入力された場合(ElseIf)
- それ以外(Else)
を考えてみましょう。問題無く成立しますね。ただし、「それ以外のそれ以外」は成立しないことが分かります。Else は 「1と2」の補集合であり、「1と2」の補集合の補集合は「1と2」に他ならないからです。
次に、
- ダイアログで1が入力された場合(If)
- 1以外で2が入力された場合(ElseIf)
- 1と2以外で3が入力された場合(ElseIf)
- それ以外(Else)
を考えて見ます。これも成立しそうです。「それ以外」が「1と2と3」の補集合に縮小されました。
最後に、
- ダイアログで1が入力された場合(If)
- 1以外で2が入力された場合(ElseIf)
- 偶数が入力された場合(ElseIf)
- それ以外(Else)
を考えてみましょう。条件としては成立します。では、ダイアログで2が入力されたとき、2つめの「ElseIf」の中身は実行されるでしょうか? されませんね。何故なら、ElseIfは常に「それ以外の場合」を含むため、「2以外」という条件が含まれてしまうのです。2しか実行しない処理をしつつ、偶数の処理も2のときに行いたい場合、ElseIfではなく、Ifの入れ子を設定する必要があります。
Else の処理( RPA の中断 )を実装する
ElseとEndIfを並べたら、今度はEndIfの手前にアクションを入力するために、1つめのEndIfを選択します(2つめのEndIfを選択するとまったく違う動作になります!)。
そうしたら「実行/ファイル/文字列/その他」ボタン(F8キー)を押します。
コマンドの一番下にExitApp というコマンドがあります。
このコマンドにオプションはありませんので、OKをクリックしてアクションを追加します。
[Else]と[EndIf]の間にアクションが追加されたことを確認したら、「必ず保存してから」 RPA を実行してみましょう。どうでしょうか? 期待通りの動作でしょうか? 確かに RPA の実行は強制的に止まりましたが、Pulover’s Macro Creator まで終了していましました。これでは困りますね(全自動 RPA のショートカットキーの設定ミスや暴走などで本当に止めたい緊急事態が想定される場合は、これを仕込んでもいいかもしれません!)。
単に RPA のタブ1つから抜ける場合にはReturnを使う
ではPulover’s Macro Creator を開いて先ほどまで編集していた PMC ファイルを開いてください。もし、ファイルを保存しなくても、Pulover’s Macro Creator がバックアップファイルを開くか訊ねてくるので、それを開けば大体の場合、復旧できます(便利ですね)。
では、ExitApp アクションをダブルクリックして編集ダイアログを表示します。コマンドから「Return」を選択して、OKで戻ります。このアクションにも、今のところはオプションはありません。
これを実行すると、「キャンセル」をクリックするとその場で RPA の動作が止まり(リストにはまだアクションが記述されているのに)、また、「はい」「いいえ」もちゃんと動作することが分かります。
Return コマンドは、サブルーチンや関数から戻るときにも利用しますが、このように1つのシナリオから離脱する場合にも使用します。意外に中断することや、分岐の先で終わることは多いので、覚えておきましょう。
終わりに
If文による処理の分岐は、プログラミングにおいては基本の基本です。しかし、それだけに、「ちゃんとIfの条件を決められる」かどうかが初心者と初級者を分けるといってもいいくらい重要な要素です(一方で、一見高度なことができるプログラマーでも、こういった条件の設定が甘くてバグが発生する……なんていうこともあります)。
RPA においても、複雑な状況をきちんと条件分けして切り分けていければ、時間はかかりますがびっくりするくらい高機能な RPA にまで成長させることもできます。このチュートリアルのように、少しずつ拡張していくことも可能ですからね。
ぜひ、ご自分でも条件を自分で設定して実験してみてください。混乱したら、フローチャートを描くのも忘れずに。