kintoneにアップロードした添付ファイルを一括でダウンロードするPower Automate for desktopフロー
2024年1月31日(水)開催のオンラインイベント「kintone縛りの自動化・RPA勉強会」で本記事のタイトルで登壇したので発表したフローを詳細を書いていきます。
フロー全体
フロー全体は下図の通りで、kintone REST APIを使用して添付ファイルのダウンロードを行っています。
APIトークンの準備
上で書いた通りkintoneのAPIを使うので、まずはアプリの設定画面からAPIトークンを生成します。アクセス権は「レコード閲覧」のみで大丈夫です。
以下、順番にフローの解説をしていきます。
APIトークンなどの変数設定
まずは取得したAPIトークンやサブドメイン、アプリIDや添付ファイルの保存先フォルダーのパスを変数として指定します。
APIトークンなど機密性の高い情報は「機密情報としてマーク」をチェックしておくと良いでしょう。
添付ファイルフィールドのフィールドコードをリストに設定
今回のフローでは一括ダウンロードする添付ファイルをフィールドコードで指定します。複数のフィールドに対応するため、リストの項目としてフィールドコードを追加します(今回の場合は「添付ファイル1」「添付ファイル2」)。
レコードの一括取得
ダウンロードに必要なファイルキーを取得するため、「Web サービスを呼び出します」アクションを使ってAPIを実行し、結果として返ってきたJSONをカスタムオブジェクトに変換します。
ただし、正しくAPIが実行されなかった場合(HTTPステータスコードが200でなかった場合)は、その時点でフローを停止します。
「Web サービスを呼び出します」アクション
URL:https://%SubDomain%.cybozu.com/k/v1/records.json?app=%AppID%
メソッド:GET
受け入れる:application/json
コンテンツ タイプ:%''%
カスタムヘッダー:X-Cybozu-API-Token: %APIToken%
要求本文をエンコードします:オフ
添付ファイル名とファイルキーをデータテーブルに格納
取得したレコード情報から、ファイルをダウンロードする際に必要となる添付ファイル名とファイルキーをデータテーブルに格納します。
その際、Windows上でファイル名として使用できない文字については「テキストを置換する」アクションを使って別の文字に置換しています。
「テキストを置換する」アクション
解析するテキスト:%Attachment['name']%
検索するテキスト:[<>:"/\|?*]
検索と置換に正規表現を使う:オン
大文字と小文字を区別しない:オフ
置き換え先のテキスト:%''%
エスケープ シーケンスをアクティブ化:オフ
「行をデータ テーブルに挿入する」アクション
データ テーブル:%DataTable%
挿入場所:データ テーブルの末尾
新しい値:%[AttachmentName, Attachment['fileKey']]%
データテーブルに格納されたファイル名とファイルキーを使ってファイルをダウンロード
データテーブルに格納されたファイルキーを使ってダウンロード用のAPIを実行し、結果として受け取ったファイルを指定した場所に保存します。
その際「ファイルが存在する場合」アクションを使って保存先に同名のファイルが存在しているかどうかを確認し、存在している場合は別名として保存(元のファイル名に (1~255までの数字) を追加)するようにしています。
「Web サービスを呼び出します」アクション
URL:https://%SubDomain%.cybozu.com/k/v1/file.json?fileKey=%CurrentItem['FileKey']%
メソッド:GET
受け入れる:%''%
コンテンツ タイプ:%''%
カスタムヘッダー:X-Cybozu-API-Token: %APIToken%
応答を保存します:ディスクに保存します (ファイル用)
ファイル名:完全なパス (宛先フォルダー + カスタム ファイル名) を指定します
宛先ファイルのパス:%SaveFilePath%
要求本文をエンコードします:オフ
フローのコード
Power Automate for desktopのフローはデザイナー(編集画面)でコピー&ペーストできます。
下記のコードをコピーして貼り付け、APIトークンやサブドメイン等の情報を環境に応じて変更すればそれぞれの環境でフローを動かすことができます。
(※フローの作成と動作確認はPower Automate for desktop バージョン 2.40 環境で行いました。その他環境では動作しない可能性がありますので、その点はご注意ください。)