UiPath Integration Service～Googleドライブトリガーの深掘り1

# はじめに
この記事はUiPathブログ発信チャレンジ2022サマーの13日目の記事です。
昨日は[Jun@Automation Journey](https://twitter.com/Jun96427231)さんの[【UiPath】Robot(UR)を共有して複数のユーザーがAssistantを利用する](https://qiita.com/Jun96427231/items/1a565f88eb91aa6d0ffd)、明日は[shuy](https://twitter.com/shuy_oooo)さんの記事です。

さて、今回の記事は先日投稿した下記の記事で例として挙げたGoogleドライブトリガーについて深掘りする内容の第1弾となります。第1弾ということは第2弾があるということです(たぶん)。

https://qiita.com/kou1209/items/1ea429929d108fb88031

# 前提条件
UiPath Integration Serviceの使い方を理解できていることを前提としています。
もし、UiPath Integration Serviceって何？という方は、はじめに記載した記事を先に読んだ後にこちらをご覧ください。

# 前回記事からの変更点
前回の記事を執筆時、Googleドライブトリガーのイベントは以下の3種類で、設定-記録でFile、Folderを指定する形でした。
* 既存のレコードの更新時
* 新しいレコードの作成時
* 既存のレコードの削除時

しかし、現在は、イベントは以下の9種類に増えていて、新しく増えたイベントに関しては、設定-記録はFile、Folderが一意に決められている形になっています（名前にfileやfolderと入っているので当たり前ですが）。
* 既存のレコードの更新時
* 新しいレコードの作成時
* 既存のレコードの削除時
* When a file is updated
* When a new file is created
* When a file is moved to trash
* When a folder is updated
* When a folder is created
* When a folder is moved to trash

全パターンのトリガーを設定し、実行してみたところ、結局のところ元々の3種類イベントのFileとFolderが分離されただけという結果となりました。今後は後発の分離された方が残っていくことになるのでしょうか（注視していこうと思います）。
* 既存のレコードの更新時(File) = When a file is updated
* 既存のレコードの更新時(Folder) = When a folder is updated
* 新しいレコードの作成時(File) = When a new file is created
* 新しいレコードの作成時(Folder) = When a folder is created
* 既存のレコードの削除時(File) = When a file is moved to trash
* 既存のレコードの削除時(Folder) = When a folder is moved to trash

# 深掘り
ここからが本題のGoogleドライブトリガーの深掘りです。
1回のトリガー監視周期内に複数のイベントが発生したらどうなるかを検証してみました。

## 【パターン1】2ファイル作成した場合
2つのファイルをGoogleドライブに格納した場合です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/bcbec847-3389-206a-74fc-7908e3ba1edf.png)
結果はファイルの数ぶんトリガーが飛ぶということが分かりました。ちなみにトリガー起動の順序については、オブジェクトID順になっているように思います（何度か実行してみた結果なので絶対ではないです）。

## 【パターン2】ファイル作成&変更した場合
1つのファイルをGoogleドライブに格納し、そのファイル名を更新した場合です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/04d8d6ac-a3f1-6397-d83d-676fec6c7386.png)
結果は、ファイル作成のトリガー(FILE_CREATED)とファイル変更のトリガー(FILE_UPDATED)が飛ぶことが分かりました。トリガー起動の順序は、FILE_CREATED、FILE_UPDATEDの順になるようです。

:::note warn
ただし、ファイル格納直後にファイル名を更新すると、FILE_CREATEDしか飛ばないみたいです。
格納後、数秒待ってからファイル名を更新する必要がありそうです、ご注意ください。
:::

## 【パターン3】ファイル作成&削除した場合
1つのファイルをGoogleドライブに格納し、そのファイルを削除した場合です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/b4464384-038f-37e2-9d1d-0ad503843a70.png)
結果は、ファイル削除のトリガー(FILE_TRASHED)しか飛ばないことが分かりました。ファイル作成&変更した場合は、FILE_CREATED、FILE_UPDATEDだったなら、ファイル作成&削除の場合は、FILE_CREATED、FILE_TRASHEDが整合性が取れている気がしますね。

## 【パターン4】ファイル変更&削除した場合
1つのファイルを変更し、そのファイルを削除した場合です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/8d7b16fa-e289-af80-f3f3-96ffe938a8dd.png)
結果は、ファイル作成&削除の場合と同様にファイル削除のトリガー(FILE_TRASHED)しか飛ばないことが分かりました。削除トリガー最強説ですね（笑）

なお、フォルダに対しても上記4パターンを実施してみたところ、結果は同じでした。

この先はフォルダとファイルの組み合わせです。

## 【パターン5】フォルダ作成&ファイル作成した場合
1つのフォルダを作成し、そのフォルダの中にファイルを格納した場合です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/4aad9d59-28c5-9065-8900-aa1917620950.png)
結果は、ファイル作成のトリガー(FILE_CREATED)、フォルダ作成のトリガー(FOLDER_CREATED)の順にトリガーが飛ぶようです。作成順序から考えたら逆な気がしますが、なぜでしょう…。ちなみに、1つのフォルダを作成し、そのフォルダの中でないところにファイルを格納した場合も、FILE_CREATED、FOLDER_CREATEDの順にトリガーされました。

## 【パターン6】ファイルが格納されているフォルダを削除した場合
フォルダの中にファイルが格納されている状態で、フォルダを削除した場合です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/8624ccf5-028c-1d34-8ca1-fb26a1afef12.png)
結果は、フォルダ削除のトリガー(FOLDER_TRASHED)、ファイル削除のトリガー(FILE_TRASHED)の順にトリガーが飛ぶようです。作成とは逆の順序になりました。ちなみに、ファイルを削除した後でフォルダーを削除した場合も、FOLDER_TRASHED、FILE_TRASHEDの順にトリガーされました。

## 【パターン7】フォルダ作成&フォルダの中にフォルダ作成した場合
1つのフォルダを作成し、そのフォルダの中にフォルダを作成した場合です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/7f455c2c-0822-095a-e95b-fb1fa7834529.png)
結果は、フォルダ作成のトリガー(FOLDER_CREATED)、フォルダ作成のトリガー(FOLDER_CREATED)の順にトリガーが飛びます。

:::note warn 
パターン1でも書いた通り順序がオブジェクトID順と思われるため、トリガー順序が、フォルダ内に作ったフォルダのトリガーが先に飛ぶ場合がありますので注意が必要です。
:::

## 【パターン8】フォルダ内のファイルを別のフォルダに移動した場合
ファイルをフォルダ間移動した場合です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2218396/6d9e4f1a-d222-a425-8f9d-b088e076fc3f.png)
結果は、ファイル作成のトリガー(FILE_CREATED)のみ飛びました。このトリガーはかなり微妙ですね。本当に新規に作成したファイルと移動したファイルで違いが分かりません。

## 【パターン9】フォルダ内のフォルダを別のフォルダに移動した場合
フォルダをフォルダ間移動した場合です。
パターン8のフォルダ版なので、フォルダ作成のトリガー(FOLDER_CREATED)が飛ぶと思いきや、なんと、トリガーは一切飛びませんでした。移動したフォルダが空フォルダだったからかと思い、ファイルが格納されたフォルダを移動してみましたが、トリガーは飛ばす。ファイル単独の移動の場合はFILE_CREATEDが飛ぶのに、フォルダごとファイルを移動した場合はトリガーが飛ばないという結果となりました。

## その他諸々
* ファイルを選択し、右クリックで表示される「プレビュー」を実行すると、FILE_CREATEDが飛びます(謎)。
* ファイルを選択し、右クリックで表示される「共有」を実行すると、トリガー飛ばず。
* ファイルを選択し、右クリックで表示される「リンクを取得」を実行すると、トリガー飛ばず。
* ファイルを選択し、右クリックで表示される「ドライブへのショートカットを追加」を実行すると、FILE_CREATEDが飛びます(オブジェクトIDはショートカット自体のIDみたいです)。
* ファイルを選択し、右クリックで表示される「スターを追加/解除」を実行すると、FILE_CREATEDが飛びます(謎)。
* ファイルを選択し、右クリックで表示される「版を管理」を実行すると、トリガー飛ばず。
* ファイルを選択し、右クリックで表示される「コピーを作成」を実行すると、FILE_CREATEDが飛びます。
* ファイルを選択し、右クリックで表示される「ダウンロード」を実行すると、トリガー飛ばず。

# まとめ
ファイルやフォルダの作成、変更、削除でそれに対応したトリガーが飛ぶことが確認できました。組み合わせやファイル操作の内容によっては、飛んで欲しいトリガーが飛ばなかったり、飛んでほしくないトリガーが飛んだりする場合があることも分かりました。それらを踏まえて、実行されたプロセス側で処理が必要かどうかを判定することが必要かもしれません。