Automation Anywhereで長時間実行タスクを処理する方法
RPAにて「特定の条件が満たされるまでウェイトをかけてボットの動作を再開する」ということはよくあると思います。無人モードのロボットで夜間にボットを実行して他のシステムを呼び出し結果を待つ、もしくは有人モードのロボットで反応時間を最適化するために、このウェイト/待機は使われます。しかし、うまく設計しないとロボットの利用率/ライセンスを無駄にしてしまう可能性があります。この記事では、ウェイトをかける際のベストプラクティスについて見て行きましょう。
目次
効率が悪いボットの例~ループで条件を満たすまで待機する
通常考えられる方法は、以下のフローのように、長くかかる処理を起動した後にループを回し、処理が終了するまで待つ方法です。
しかし、この方法では、処理を起動してから完了処理を行うまで長時間にわたりボットが実行中となり、ボットとライセンスが占有されてしまいます。(赤い時間の間は占有されてしまいます) ボットが占有されている間は、他のボットの実行はできなくなってしまいます。
効率を上げるための工夫
Automation Anywhereではトリガー機能やスケジュール実行機能が標準でついています。これらを使うとボットの占有時間を短くすることができます。
特定条件を満たしたらボットを開始するには「トリガー」を使う
Automation Anywhereのトリガー機能は、特定の条件が発生 (キー入力、ファイル/フォルダーの条件、メール受信、画面の変化等) したときにボットを開始することが可能です。
処理の途中で特定条件を満たすまで待機する必要がある場合
しかし、処理を起動してから完了するまで待つ場合は、少し工夫が必要です。処理を起動するまでのボットと、処理が完了したときに発生する条件を検知するトリガー付きのボットの2つにわけることができれば、非同期処理となり占有時間が減ります。
「ステートマシン」実装とControl Roomからの繰り返しスケジュール実行
もう一つの方法は、状態 (ステート) を保存しておく仕組みを使って、その状態を元に異なる動作をするロジック (ステートマシン)を実装し、定期的に実行する方法です。
状態をあらわすフラグを外部データベース等に保持し、0なら処理を起動して1に変更、1なら処理の実行中、処理が終了したら2に変更して、2なら次の完了処理を行う、といった具合です。そして、このボットをたとえば1分置きとかに定期的に実行するようにします。
時系列に落とすと以下の通りになります。
参考記事