この記事で解説している内容
GoogleDriveなどのファイルストレージサービスにファイルをアップロードする際に、直面する以下のようなケースに対応できるシナリオの作成方法について解説しています。
・すでに指定フォルダが存在する場合はそのフォルダ内にファイルを保存
・指定フォルダが存在しない場合は、フォルダを作成してからそのフォルダ内にファイルを保存
失敗パターン
まずは、やってしまいがちな失敗パターンをご紹介します。
このフローでは、kintoneのwebhookから受け取った“顧客No”を使用してフォルダを作成し、作成したフォルダ内に取得した画像ファイルをアップロードしています。
一見問題なさそうですが、同じ“顧客No”から複数回実行され場合、GoogleDrive内のフォルダは以下のような状態になります。
「Create a Folder」のモジュールは常に新しいフォルダを作成します。(同一名のフォルダが存在しているかどうかのチェックはしません。)
成功パターン
今回のような、
・すでに指定フォルダが存在する場合はそのフォルダ内にファイルを保存
・指定フォルダが存在しない場合は、フォルダを作成してからそのフォルダ内にファイルを保存
をMakeで実現する場合は以下のようなシナリオを組む必要があります。
シナリオの解説
簡単に解説すると以下のような処理を行っています。
1.まずは「Search for Files/Folders」を使用し、同じフォルダ名が存在するかどうかを確認しています。
2.Routerの1stは「Search for Files/Folders」の取得結果(Total number of bundles)が0の場合のみ処理し、フォルダを新規で作成します。
3.その後、改めて「Search for Files/Folders」を使用し、ファイルを格納するフォルダのIDを取得します。
4.最後にファイルをアップロードします。
各モジュールの設定について
「Search for Files/Folders」(1回目)
kintoneから受け取った顧客Noとフォルダ名が完全一致するフォルダを検索しています。
Router 1stのフィルター
「Search for Files/Folders」の取得結果が0の場合、つまり、kintoneから受け取った顧客Noのフォルダが存在しない場合のみ実行されるようにフィルターを設定しています。
「Create a Folder」
kintoneから受け取った顧客Noで新たにフォルダを作成します。
「Search for Files/Folders」(2回目)
ファイルをアップロードするフォルダの情報を取得するために、改めてkintoneから受け取った顧客Noと一致するフォルダを検索しています。
「Upload a File」
「Search for Files/Folders」(2回目)で取得したフォルダにファイルをアップロードしています。
※一見非効率に見えるかもしれませんが、最後の「Upload a File」に参照するアップロード先のフォルダを確実に指定するため、格納先のフォルダ名が確実に存在する状態を作ってから格納先のフォルダ情報を取得し、ファイルをアップロードするという流れを作っています。
シナリオをテスト実行
実際に同じ顧客Noで複数回シナリオを実行してみると、フォルダは1つだけ生成されれ、フォルダ内に複数回分の画像ファイルが格納されている事が確認できます。