皆もすなるQiitaといふものを、儂もしてみむとてするなり。
と言う訳で、こん**は!はなっち!です。
【初めに】
前回、「トリガー スコープ」アクティビティの中に格納する、「ファイル変更トリガー」アクティビティを中心に記事を書きました。
ファイルをどうした時に、どんな変更を検出し、トリガー発動されるか。
今回は、トリガー発動ではなく、トリガーが発動されたあと、「トリガー スコープ」アクティビティで、どう動く、そして、どうロボットを終了させていくかを書いていこうと思います。
1)「トリガー スコープ」アクティビティのパラメタの設定
前回のフォルダ構成と同じ状態で、2つのテキストファイル、1つのEXCELファイルを、監視しているフォルダに移動します。
このロジックで、「スケジューリング モード」を変えて実行してみます。
1-1「スケジューリング モード」=「一回」
実行ログに、検出されたファイルの情報が吐かれています。
16:09:50.4946 Info {"message":"フォルダ監視トリガ の実行が開始されました。
16:09:58.3718 Trace {"message":"◆Start Monitoring◆
16:10:02.7509 Trace {"message":"Created
16:10:02.7621 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 Microsoft Excel ワークシート.xlsx
16:10:02.7629 Trace {"message":"CreationTime:20230415160955
16:10:02.7632 Trace {"message":"LastWriteTime:20230415160958
16:10:02.7634 Trace {"message":"Length:8587
16:10:02.7637 Trace {"message":"IsReadOnly:False
16:10:02.7709 Info {"message":"フォルダ監視トリガ の実行が終了しました。
3つのファイルをコピーしたのに、1ファイルしか検出されませんでした。
ただし、検出した後に、ロボットは即終了しています。
1-2「スケジューリング モード」=「順次」あるいは「同時」
実行ログに、検出されたファイルの情報が吐かれています。
16:25:58.7844 Info {"message":"フォルダ監視トリガ の実行が開始されました。
16:26:06.5367 Trace {"message":"◆Start Monitoring◆
16:26:11.7171 Trace {"message":"Created
16:26:11.7197 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 Microsoft Excel ワークシート.xlsx
16:26:11.7201 Trace {"message":"CreationTime:20230415162603
16:26:11.7205 Trace {"message":"LastWriteTime:20230415162606
16:26:11.7209 Trace {"message":"Length:8585
16:26:11.7212 Trace {"message":"IsReadOnly:False
16:26:11.7235 Trace {"message":"Changed
16:26:11.7269 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 Microsoft Excel ワークシート.xlsx
16:26:11.7273 Trace {"message":"CreationTime:20230415162603
16:26:11.7276 Trace {"message":"LastWriteTime:20230415162606
16:26:11.7278 Trace {"message":"Length:8585
16:26:11.7281 Trace {"message":"IsReadOnly:False
16:26:11.7302 Trace {"message":"Created
16:26:11.7341 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 テキスト ドキュメント_New.txt
16:26:11.7345 Trace {"message":"CreationTime:20230415162600
16:26:11.7348 Trace {"message":"LastWriteTime:20230415162601
16:26:11.7351 Trace {"message":"Length:34
16:26:11.7382 Trace {"message":"IsReadOnly:False
16:26:11.7389 Trace {"message":"Changed
16:26:11.7418 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 テキスト ドキュメント_New.txt
16:26:11.7424 Trace {"message":"CreationTime:20230415162600
16:26:11.7427 Trace {"message":"LastWriteTime:20230415162601
16:26:11.7429 Trace {"message":"Length:34
16:26:11.7432 Trace {"message":"IsReadOnly:False
16:26:13.5820 Trace {"message":"Deleted
16:26:13.5855 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 テキスト ドキュメント.txt
16:26:13.5859 Trace {"message":"CreationTime:20230415162558
16:26:13.5862 Trace {"message":"LastWriteTime:20230415162600
16:26:13.5865 Trace {"message":"Length:27
16:26:13.5867 Trace {"message":"IsReadOnly:False
16:26:13.5875 Trace {"message":"Created
16:26:13.5898 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 テキスト ドキュメント.txt
16:26:13.5901 Trace {"message":"CreationTime:20230415162558
16:26:13.5903 Trace {"message":"LastWriteTime:20230415162600
16:26:13.5906 Trace {"message":"Length:27
16:26:13.5909 Trace {"message":"IsReadOnly:False
16:26:13.5914 Trace {"message":"Changed
16:26:13.5942 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 テキスト ドキュメント.txt
16:26:13.5946 Trace {"message":"CreationTime:20230415162558
16:26:13.5948 Trace {"message":"LastWriteTime:20230415162600
16:26:13.5950 Trace {"message":"Length:27
16:26:13.5960 Trace {"message":"IsReadOnly:False
16:26:31.7918 Trace {"message":"Created
16:26:31.7950 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\追加のファイル.txt
16:26:31.7955 Trace {"message":"CreationTime:20230415162621
16:26:31.7959 Trace {"message":"LastWriteTime:20230415162621
16:26:31.7961 Trace {"message":"Length:0
16:26:31.7964 Trace {"message":"IsReadOnly:False
16:27:50.9520 Info {"message":"フォルダ監視トリガ の実行が終了しました。
巨大なログになってしまったのは、ご容赦。
重要なのは、3つのファイルを移動して、一連のトリガー発動が終了した18秒後に監視しているフォルダに格納した新ファイル追加のファイル.txt
が、ちゃんと検出されている、と言う点。
これは、「スケジューリング モード」=「順次」あるいは「同時」の場合は、 アクションを行った (この場合は検出したファイルの各種情報をログ出力した) のち、再び監視状態に戻るという事です。
となると、 ロボはずっと実行したままで、終了する事はありません 。
UiPath Studioから起動しているので、タスクバーから終了させると、
ログにもあるように、終了する事が出来ました。
自動化、効率化を実行するロボットが、人の手を借りなければ終了できないと言うのは、本末転倒なお話ですね。
1-2「スケジューリング モード」=「順次」あるいは「同時」どうするか(その1)
複数のトリガーが発動して、その回数分アクション側に制御が渡ってくる。その時に終了の条件を設定してあげて、終了条件を満たしたらロボを終了させてみましょう。
まず、終了させるための時刻(LimitTimeSpan
)の設定です。ここでは 現在時刻に2分後に終了させる よう、指定してみました。
LimitTimeSpan = New TimeSpan(now.Hour, now.Minute, now.Second).Add(New Timespan(0,2,0))
次に、現在時刻が、この終了させるための時刻(LimitTimeSpan
)を超えたら終了させるように(「トリガー スコープ」アクティビティを終了させる)ようにします。これには、「繰り返しを終了」アクティビティを使用します。
Condition:(Now.TimeOfDay).CompareTo(LimitTimeSpan).Equals(1)
これを実行した時のログです。
17:01:26.0560 Info {"message":"フォルダ監視トリガ の実行が開始されました。
17:01:33.7689 Trace {"message":"◆Start Monitoring◆
17:01:47.5350 Trace {"message":"Created
17:01:47.5378 Trace {"message":"Title:
17:01:47.5381 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 Microsoft Excel ワークシート.xlsx
17:01:47.5385 Trace {"message":"CreationTime:20230415170130
17:01:47.5388 Trace {"message":"LastWriteTime:20230415170133
17:01:47.5390 Trace {"message":"Length:8587
17:01:47.5393 Trace {"message":"IsReadOnly:False
Omission
17:01:49.3817 Trace {"message":"Changed
17:01:49.3844 Trace {"message":"Title:
17:01:49.3847 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 テキスト ドキュメント.txt
17:01:49.3850 Trace {"message":"CreationTime:20230415170126
17:01:49.3853 Trace {"message":"LastWriteTime:20230415170127
17:01:49.3857 Trace {"message":"Length:27
17:01:49.3860 Trace {"message":"IsReadOnly:False
17:04:08.6826 Trace {"message":"Created
17:04:08.6855 Trace {"message":"Title:
17:04:08.6858 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\追加のファイル.txt
17:04:08.6965 Trace {"message":"CreationTime:20230415162621
17:04:08.6971 Trace {"message":"LastWriteTime:20230415162621
17:04:08.6974 Trace {"message":"Length:0
17:04:08.6976 Trace {"message":"IsReadOnly:False
17:04:08.7037 Info {"message":"フォルダ監視トリガ の実行が終了しました。
17:01:33.7689
に終了させるための時刻(LimitTimeSpan
)の設定し、
17:03:33.7689
を超えたら終了する予定とします。
実際に実行させると、
17:04:08.6826
にトリガーが発動され、「条件分岐」アクティビティに記載の条件に合致し、繰り返しを終了。
17:04:08.7037
にロボが終了した事がわかります。
1-2「スケジューリング モード」=「順次」あるいは「同時」どうするか(その2)
トリガーが発動した時 に、終了させるための時刻(LimitTimeSpan
)を超えていたら終了するのはいいのですが、 トリガーが発動しなければ 、終了させるための時刻を超えているかの判定は行えません。と言う事は、 トリガーが発動しない時はロボは実行したまま です。
こういった場合は、「並列」アクティビティを利用してみます。
終了させるための時刻(LimitTimeSpan
)の設定は、前節と同じ。
「並列」アクティビティを配置し、その中に従来の「トリガー スコープ」アクティビティと、「繰り返し (後判定)」アクティビティを配置します。この時、「並列」アクティビティのパラメタ「条件」をTrue
にします(「並列」アクティビティの中のアクティビティのうち、いずれか一つが終了すると、「並列」アクティビティが終了するモード)。
左側に配した「トリガー スコープ」アクティビティの「アクション」にあった、時間条件は不要なので削除します・
右側に配した「繰り返し (後判定)」アクティビティの中に、「Delay」アクティビティを配し、更に条件に(Now.TimeOfDay).CompareTo(LimitTimeSpan).Equals(-1)
を設定します。
これは、今の時刻が、終了させるための時刻より小さい
の意味です。
これを実行した時のログです。
17:50:47.1071 Info {"message":"フォルダ監視トリガ の実行が開始されました。
17:50:52.9587 Trace {"message":"◆Start Monitoring◆
17:52:43.1910 Trace {"message":"Created
17:52:43.1943 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 Microsoft Excel ワークシート.xlsx
17:52:43.1947 Trace {"message":"CreationTime:20230416000051
17:52:43.1950 Trace {"message":"LastWriteTime:20230416000052
17:52:43.1954 Trace {"message":"Length:8589
17:52:43.1957 Trace {"message":"IsReadOnly:False
17:52:43.1978 Trace {"message":"Changed
17:52:43.2003 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 Microsoft Excel ワークシート.xlsx
17:52:43.2007 Trace {"message":"CreationTime:20230416000051
17:52:43.2010 Trace {"message":"LastWriteTime:20230416000052
17:52:43.2012 Trace {"message":"Length:8589
17:52:43.2015 Trace {"message":"IsReadOnly:False
17:52:43.2022 Trace {"message":"Created
17:52:43.2078 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 テキスト ドキュメント_New.txt
17:52:43.2083 Trace {"message":"CreationTime:20230416000048
17:52:43.2086 Trace {"message":"LastWriteTime:20230416000049
17:52:43.2089 Trace {"message":"Length:34
17:52:43.2091 Trace {"message":"IsReadOnly:False
17:52:43.2097 Trace {"message":"Changed
17:52:43.2121 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 テキスト ドキュメント_New.txt
17:52:43.2125 Trace {"message":"CreationTime:20230416000048
17:52:43.2128 Trace {"message":"LastWriteTime:20230416000049
17:52:43.2130 Trace {"message":"Length:34
17:52:43.2133 Trace {"message":"IsReadOnly:False
17:52:44.5011 Trace {"message":"Deleted
17:52:44.5038 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 テキスト ドキュメント.txt
17:52:44.5042 Trace {"message":"CreationTime:20230416000047
17:52:44.5045 Trace {"message":"LastWriteTime:20230416000048
17:52:44.5047 Trace {"message":"Length:27
17:52:44.5049 Trace {"message":"IsReadOnly:False
17:52:44.5056 Trace {"message":"Created
17:52:44.5079 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 テキスト ドキュメント.txt
17:52:44.5082 Trace {"message":"CreationTime:20230416000047
17:52:44.5085 Trace {"message":"LastWriteTime:20230416000048
17:52:44.5087 Trace {"message":"Length:27
17:52:44.5089 Trace {"message":"IsReadOnly:False
17:52:44.5093 Trace {"message":"Changed
17:52:44.5113 Trace {"message":"FullName:c:\\users\\HogeHoge\\desktop\\検証\\ファイル監視トリガー\\新規 テキスト ドキュメント.txt
17:52:44.5117 Trace {"message":"CreationTime:20230416000047
17:52:44.5119 Trace {"message":"LastWriteTime:20230416000048
17:52:44.5122 Trace {"message":"Length:27
17:52:44.5124 Trace {"message":"IsReadOnly:False
17:52:53.0871 Info {"message":"フォルダ監視トリガ の実行が終了しました。
17:50:52.9587
に終了させるための時刻(LimitTimeSpan
)の設定し、
17:52:52.0000
を超えたら終了する予定とします。
実際に実行させ、ファイルを移動すると、トリガーが発動されました。
17:52:53.0871
に「繰り返し (後判定)」アクティビティの条件を満たさなくなったため、「繰り返し (後判定)」アクティビティが終了し、ロボが終了した事がわかります。
【まとめ】
スケジューリング モード」=「一回」の場合
- 業務の入力ファイルは期間単位に1つ生成され、それを入力にする業務である
- 格納される時間をおおよそ決めてあるので、それ以前に一度だけロボットを起動させればよい。
「スケジューリング モード」=「順次」または「同時」の場合
- 業務の入力ファイルは期間単位に複数回生成され、それを入力にする業務である
- ずっと監視をし続けてしまうので、トリガー以外の、条件に応じて終了するアクティビティを、「並列」アクティビティ内に記述する。「並列」アクティビティの条件は
True
とする。 - トリガーが発動した場合に行われる後続業務処理で、 使用したファイルを監視フォルダ外に移動、あるいは監視フォルダより削除する。 移動あるいは削除しても、トリガーした情報は残っているので、
args.FileChangeInfo.FullPath
のファイルが実際に存在するかを判断する事で、 重複処理を防ぐ事が出来る 。
##おわりに
いかがでした?
今回も読んでいただきありがとうございました!
是非UiPathでのロボ開発の一助になればと思っています。
ありがとうございました!