ロボットをタスク化して決まった時間に実行する

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る
UiPathで時間になったら自動実行するフロー

UiPathでもWindowsのタスクスケジューラーで決まった時刻に実行するができますが、今回はプロジェクト自体を繰り返し処理することによって、決まった時刻に実行する処理を作成してみました。受信メールの処理を行いたい場合など、リアルタイムで処理を実行させたい場合はこちらの方法が有効です。


タスクスケジューラから実行させたい場合は、「タスクスケジューラからプロジェクトを実行する」を参照してください。

タスク化の考え方

決まった時間に処理を実行させるようにするには、次のように処理します。

  1. プロジェクトをループさせる
  2. 遅延処理(Delay)を使い、実行される時間をコントロールする
  3. 条件に一致した場合のみ特定の処理を実行させる

プロジェクトをループさせる。

よくゲームなどでは、「While」を使って処理全体を無限ループさせ、特定の条件に一致した場合にのみ処理を実行する手法があります。
UiPathではフローチャートがありますので、最後のアクティビティの遷移先を最初に戻るように設定することで無限ループを実装することができます。

1.mainにフローチャートを配置する。

シーケンスでも同様の処理が可能ですが、フローチャートの方がわかりやすいため今回はこちらを使用します。
pointシーケンスの場合はWhileを使って条件を「1=1」とすることにより同様に無限ループとすることもできます。

2.現在時刻を取得する。

今回はタスク化ということで特定の時間になった場合に処理を実行するフローを作成します。
現在時刻を取得するためにAssignを配置します。

現在時刻を取得する方法と変数の型

Assignで左辺に文字列型の変数を、右辺に「System.DateTime.Now.ToString(“mm”)」を記入します。
このようにすることで、ローカルPCに設定されている時刻の「分」を取得することができます。

他にも他にも右辺を以下のようにすることで、時間や秒も取得できます。
秒:System.DateTime.Now.ToString(“ss”)
時間:System.DateTime.Now.ToString(“hh”)

3.メッセージボックスを配置する。

特定の時間になったら実行される処理として、今回はメッセージを表示するようにします。
UiPathで現在時刻を表示するフロー

4.無限ループを作成する。

メッセージボックスの遷移先をAssignとすることで無限にメッセージボックスが表示されるようになります。
(テスト実行した場合は、自動終了しないのでF12かUiPathStudio上のStopボタンを押しましょう)

メッセージを無限にループして表示するフロー

これで無限に処理が行われるフローを作成できました。
続いて、実際に実行される時間をコントロールするようにします。

遅延処理(Delay)を配置する。

遅延処理をスタート直後に置くことによって、ループする処理を「何分間に1回実行する」などのように調整することができます。

例えば遅延処理を1分間とすることによって次のように処理されます。

    1. ループ処理開始
    2. 遅延処理のため1分間待機
    3. 実行可否判定or1に戻る
    4. 目的の処理を実行

1に戻る

PointDelayの記載方法はミリ秒ではなく、「00:00:00」という形式ですのでご注意ください。

例:1分間の待機「00:01:00」

スタートの直後にDelayアクティビティを配置して「00:01:00」としましょう。
またメッセージボックスの遷移先をAssignからDelayに変更します。

無限ループ処理に遅延処理(Delay)を追加したフロー

このように設定することで1分間に1度無限に実行されるフローを作成できました。

条件判定する

毎分常に実行される処理であればこれで問題ないのですが、今回は特定の時間に実行される処理を行いたいため条件判定を追加します。

FlowDecisionアクティビティを使用して、現在時刻が特定の時間と一致しているかを判定します。
FlowDecisionをフローチャート上に配置後、「Condition」に「now = 00」と入力してください。
またFalse時の遷移先フローをdelayに、True時の遷移先フローをメッセージボックスに接続します。

実際のフローの完成形サンプル

これで、1分間に一度現在時刻のチェックを行い、現在時刻が「00」分の時だけメッセージを表示し、それ以外の時は何も処理を行わないというようにすることができます。

自動実行処理の結果を表示

注意点

当然メッセージを表示している箇所で別な処理を行いたい場合があります。

その場合、mainからシーケンス等の別な処理を呼び出せば問題ありませんが、コマンドプロンプトから別な処理を実行するような場合は、既にロボットが起動している旨のエラーが出され実行することはできません。

Robot already running for user ユーザ名

この場合はInvoke workflow fileでmain上から呼び出すようにしてください。

最後に

プロジェクトをループ化することでタスクスケジューラ―を使用しなくても、決まった時間に処理時を実行することができました。

無限に処理が行われるため、メモリの使用量等高そうに感じますがそれほどでもありません。もちろん環境や実行する処理によって異なるのですが、4GBのメモリでも1台のみであれば十分に動作するほどの使用量でした。

この処理を利用して、数分毎にメール受信を監視したり、今回のように指定の時間になったら特定の処理を実行するといったことが可能になります。

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

SNSでもご購読できます。