Connect REST API を使ってファイルを操作してみる


まずは、ファイルの情報を取得してみます。

[File Information](https://developer.salesforce.com/docs/atlas.ja-jp.248.0.chatterapi.meta/chatterapi/connect_resources_files_information.htm)

Postmanにもありますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/ce26723a-7eed-da73-f7f0-97e32ce4189b.png)

ファイルのIdを確認します。
Salesforceでファイルを選んで開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/e8ed7b60-e6f8-8bdc-5644-7c9ef7e6b282.png)

この画面ではIdを確認できません
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/550b9bc5-dde5-2d29-db60-0860feb49a4c.png)

さらに詳細を開くとやっとIdを確認できます。069ではじまるのでContentDocumentオブジェクトですね。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/b81bc370-fa74-9ef5-5726-9069190fe3af.png)

Postmanで確認してみましょう。無事取得できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/2c3f0a16-c718-a09b-841d-fcc3aad8f3b9.png)

# ファイル自体ではなくContentDocumentの他の項目の更新

なかなかうまくいかなくて、３時間程悩みました。最終的にはブラウザのキャシュが悪さしていたのかもしれません。すぱっと諦めて作ったメッソドを削除して再作成したら動きました。

PATCHのメソッドが無かったんですよね。


```
{{_endpoint}}/services/data/v{{version}}/connect/files/:FILE_ID?title=A+New+Title
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/23d662ba-94a7-8e9a-b478-a19912252d47.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/1726fe61-fb38-4b60-7aed-5211d57e5e12.png)


# 新規のファイルをアップロードする

既存のファイルの新しいバージョンをアップロードするには、POST 要求を実行します。新しいバージョンを、マルチパート/フォームデータ要求のバイナリパートとしてアップロードします。「バイナリファイルのアップロード」を参照してください。新しいファイルを [ファイル] ホームにアップロードするには、/connect/files/users/me を使用します。

Postmanには　{{_endpoint}}/services/data/v{{version}}/connect/files/users/me　というメッソドが既にありました。

このUIから考えると、ここでファイルをアップロードできそうですね。他の項目も設定してみましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/05ef79d0-3a7e-040e-6949-19502a9bcda5.png)

こんな感じ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/96c2bdbe-07e5-6dc6-4bd2-4f30fd69da28.png)

成功した感じです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/f2bfa240-3659-c297-227b-e5a186387f4a.png)

登録できています

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d799d51a-9dfc-37f9-ebc8-5a300563d325.png)


# 既存のファイルの新しいバージョンをアップロード

既存のファイルの新しいバージョンをアップロードするには、POST 要求を実行します。新しいバージョンを、マルチパート/フォームデータ要求のバイナリパートとしてアップロードします。[「バイナリファイルのアップロード」](https://developer.salesforce.com/docs/atlas.ja-jp.248.0.chatterapi.meta/chatterapi/intro_input.htm#cc_upload_binary_files)を参照してください。

やり方がわからないな


# 資料

+ [Files Connect - Files Connect REST API を使用してドキュメントを作成する](https://help.salesforce.com/s/articleView?id=000387790&type=1)
* [Salesforce API 経由で Salesforce ファイルにアップロードするための最適なアプローチ](https://salesforce.stackexchange.com/questions/209695/best-approach-for-uploading-to-salesforce-files-via-a-salesforce-api)

ファイルを使用している場合は、Salesforce コンテンツを使用しています。実際、Chatter ファイルを追加すると、プラットフォームは、Chatter 投稿に加えて、それらのオブジェクトを直接使用している場合と同じように、ContentDocument/ContentVersion/ContentDocumentLink を生成します。

モデルは複雑に聞こえますが、REST API を使用してファイルを挿入するのは比較的簡単です。

ContentDocumentId フィールドが null の ContentVersion レコードを挿入すると、ContentDocument が自動的に作成されます。

ContentVersion を挿入するときに、ファイルを関連付けるレコードの ID を FirstPublishLocationId フィールドに入力すると、プラットフォームによって ContentDocumentLink レコードも作成されます。1 回の呼び出しでファイルを挿入して関連付けることができます。

https://developer.salesforce.com/docs/atlas.en-us.api.meta/api/sforce_api_objects_contentversion.htm

ファイルが 37.5 MB より大きい場合は、ファイル データをマルチパート メッセージで送信する必要があります。この方法で、最大 2 GB のファイルをアップロードできます。

これに関する詳細は、以下をご覧ください。

https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_insert_update_blob.htm