Power Automateでkintoneの添付ファイルにアップロードする方法
免責事項
本記事の内容は情報提供を目的としており、正確性や完全性を保証するものではありません。記事を参考にした開発や運用は、すべてご自身の責任で行ってください。本記事の利用により生じた損害について、著者は一切の責任を負いません。
また、本記事に記載された情報が最新であることを保証するものではありません。
はじめに
この記事では、Microsoft Power Automateのクラウドフロー(以下「Power Automate」)を使って、ファイルをkintoneの添付ファイルフィールドにアップロードする方法を解説します。
本記事では、特に、日本語ファイル名を文字化けさせずにアップロードするためのPower Automateの設定方法に焦点を当てています。
参考記事
本記事の作成にあたり、Zennで公開されている「Power Automateでkintoneに添付ファイルをアップロードしてみた」が大変参考になりました。この場を借りて感謝を申し上げます。
本記事は、「日本語ファイル名の文字化け問題」に焦点を当てて、追加で調査・実装した内容を補足するものになります。
手順
事前準備
その上で、次の準備を行います:
- kintoneアプリの作成
- [添付ファイル]フィールドを追加し設定します。
- アプリIDを確認します。
- アプリIDは、Power Automateでkintoneコネクタを使用する際に必要です。
- APIトークンの発行
- kintoneアプリの[設定画面]から[カスタマイズ/サービス連携]→[APIトークン]を選択しトークンを発行します。
- トークンには[レコード閲覧]と[レコード編集]の権限が必要です。
Power Automateの設定
主なステップ
- (アップロードしたいファイルの[ファイルコンテンツの取得]を行う)
- 本記事では、Sharepointのドキュメントライブラリ内のファイルをkintoneの添付ファイルフィールドに移すフローを作成しました
- ファイルをkintoneの一時保管領域にアップロードして
fileKey
を取得する - アップロードしたファイルの
fileKey
とレコードを関連付ける
1. ファイルをkintoneの一時保管領域にアップロードしてfileKeyを取得する
以下の画像を参考に設定して下さい。
Body
の"Content-Disposition"
の、filename*
の設定が重要です。
ここでfilename
に日本語ファイル名をだけ与えてしまうと文字化けした状態でkintone上にアップロードされてしまいました。filename
は省略せずに、filename*
と一緒にセットしてあげると、文字化けなしでうまく行きました。
filename*
には、utf-8''
に続いてURLエンコードした日本語ファイル名をセットしてください。Power Automateでは、uriComponent()
関数でURLエンコードできます。
URI
https://(サブドメイン名).cybozu.com/k/v1/file.json
Method
POST
Headers
{
"X-Cybozu-API-Token": "API_TOKEN"
}
- 上記の画像の
apiToken
は、[変数を初期化する]アクションに設定した変数を呼び出しています。
Body
{
"$content-type": "multipart/form-data",
"$multipart": [
{
"body": @{body('パスによるファイル_コンテンツの取得')},
"headers": {
"Content-Disposition": "form-data; name=file;filename=@{triggerBody()?['{FilenameWithExtension}']};filename*=utf-8''@{uriComponent(triggerBody()?['{FilenameWithExtension}'])}"
}
}
]
}
- 上記の画像の
本文
は、[パスによるファイルコンテンツの取得]アクションの返り値の配列から呼び出しています。 - 上記の画像の
拡張子付きのファイル名
は、(見切れてて見えませんが)[ファイルが作成されたとき(プロパティのみ)]トリガーの返り値の配列から呼び出しています。
参考:
補足;kintoneの公式ページで言及されているRFC7578の記載とは競合する内容かもしれません。
2. アップロードしたファイルのfileKeyとレコードを関連付ける
以下の画像を参考に設定して下さい。
URI
https://(サブドメイン名).cybozu.com/k/v1/record.json
Method
PUT
Headers
{
"X-Cybozu-API-Token": "API_TOKEN",
"Content-Type": "application/json"
}
- 上記の画像の
apiToken
は、[変数を初期化する]アクションに設定した変数を呼び出しています。
Body
{
"app": @{variables('アプリID')},
"id": @{variables('kintoneのレコード番号')},
"record": {
"file1": {
"value": [
{
"fileKey": @{variables('fileKey')}
}
]
}
}
}
- 上記の画像の
file1
は、kintoneアプリの添付ファイルフィールドで使用している「フィールドコード」なのでご自身の環境に合わせて変更して下さい。
上書きせずに追加したい場合は、下記の「1件のレコードを取得する」をHTTPコネクタで実行して、目的の「フィールドコード」に格納されいるfileKey
の配列を取得して、上記のfileKey
の配列と結合してから添付ファイルフィールドを更新すると良いかと思います。本記事では詳細は割愛します。
最後に
本記事で紹介した例では、(やや動作が不安定/遅い気がしますが)SharePointドキュメントライブラリに追加したファイルを、kintoneの添付ファイルフィールドに転送することができました。
この記事が参考になれば幸いです!🙇♂️
Discussion