Salesforceは「メモ」や「ファイル」周辺が本当にややこしい。。。
特にどのオブジェクトにファイルの情報が格納されているのかなんかは何度も忘れてしまいます。
というわけで、備忘録も兼ねて、Salesforceの「メモ」や「ファイル」周辺のオブジェクト構成や情報の取得方法をまとめてみました。
自分も探り探りなので温かい目で見てやってください。
ちなみに今回はLightningを対象としていますので悪しからず。
メモとファイルとメモ & 添付ファイル
ファイルやメモの関連リストを取引先詳細画面に表示すると以下のように3つの関連リストが表示できました。
![](https://atsudayo.com/wp-content/uploads/2022/08/cf268dce444acc4050c1482ad24b35f8.jpg)
- メモ
- ファイル
- メモ & 添付ファイル
ちなみに「メモ」はメモの設定から「メモを有効化」を選択することで使用や関連リストに表示することができます。
![](https://atsudayo.com/wp-content/uploads/2022/08/7c29dce77e15834ac1787e5242d2b11f.jpg)
さて、まずは「メモ」と「ファイル」と「メモ & 添付ファイル」の違いからざっくり整理してみます。
メモ
レコードにメモを登録することができます。
![](https://atsudayo.com/wp-content/uploads/2022/08/7a8d06eb020ce77b996f49becd6cf772.jpg)
関連先に取引先1が指定されているので、取引先1レコードに関連づいたメモってことですね。
「共有」からユーザやグループを指定することで関連先を追加できます。
ファイルとメモ & 添付ファイル
どちらもレコードにファイルを添付できます。
というかどちらか一方にファイルをアップロードすると両方の関連リストに反映されました。
格納先が同じみたいですね。
![](https://atsudayo.com/wp-content/uploads/2022/08/78c7989ff1f864443c62c451618f2fdb.jpg)
違いとしてはこんな感じらしいです↓
種類 | インターフェイス | 添付可能ファイルのサイズ |
---|---|---|
ファイル | Lightning | 2GB |
メモ & 添付ファイル | Lightning(Classic時代から存在) | 25MB(Classicの場合) 2GB(Lightningの場合) |
「メモ & 添付ファイル」はClassicの名残みたいな印象なのでとりあえず「ファイル」を使用しておけば問題なさそうですね。
オブジェクト構成
さて、メモやファイル周辺のオブジェクト構成ですが図のようになっています。
![](https://atsudayo.com/wp-content/uploads/2022/08/aa5cb1b167c0bccc988215fb026615f8-1.jpg)
「ContentDocument」に紐づく形で、「ContentVersion」と「ContentDocumentLink」があるんですね。
それとは別に「ContentNote」というオブジェクトもありました。
オブジェクト | 説明 |
---|---|
ContentDocument | アップロードされたドキュメントなどの添付ファイルを格納。 |
ContentVersion | アップロードされた添付ファイルのバージョン情報を格納。 (※添付ファイルをアップロードすると自動で作成される) |
ContentDocumentLink | アップロードされた添付ファイルがどのレコードに添付されているかや、どのユーザと共有されているかの情報を格納。 共有のタイプ情報も格納。 (※添付ファイルをアップロードすると自動で作成される) |
ContentNote | メモ情報を格納。 |
ちなみに「メモ」に登録した情報は、「ContentNote」だけでなく、「ContentDocument」にも格納されます。(※ただし、本文情報は「ContentVersion」と「ContentNote」に格納されます。ややこしい。。。)
メモ・ファイル情報を取得する
それでは、レコードに登録されたメモ・ファイル情報をSOQLで取得してみます。
![](https://atsudayo.com/wp-content/uploads/2022/08/4121d448cd40f90d207ae76e525af567.jpg)
ContentNoteから取得
まずは、「ContentNote」からメモ情報を取得してみます。
![](https://atsudayo.com/wp-content/uploads/2022/08/099b384f0a7345e8b51be958eb20ed5f.jpg)
SELECT Id, Title, FileType, TextPreview FROM ContentNote
メモの本文も「TextPreview」項目として保持されていますね。
ただ、どのレコードに登録されているメモかは特定できません。
ContentDocumentとContentDocumentLinkから取得
次は、「ContentDocument」と「ContentDocumentLink」からメモ・ファイル情報を取得してみます。
まずは、「ContentDocument」からメモ・ファイル情報を取得します。
![](https://atsudayo.com/wp-content/uploads/2022/08/3b6a716859b72083936646f234dc9272.jpg)
SELECT Id, Title, ParentId, FileType, SharingPrivacy FROM ContentDocument
この時点では、どのレコードに登録されているメモ・ファイルなのかは特定できません。
次に上記SOQLで取得したContentDocumentIdを使用してContentDocumentLinkを取得します。
![](https://atsudayo.com/wp-content/uploads/2022/08/f30a30f9f2ffcaf857dc5ea53632f51a.jpg)
SELECT Id, LinkedEntityId, LinkedEntity.Name, ContentDocumentId, ShareType FROM ContentDocumentLink Where ContentDocumentId = ‘取得したId’
Where句に先ほど取得したメモとファイルのContentDocumentIdを指定するとContentDocumentLinkレコードがそれぞれ2つずつ(計4つ)取得できました。
これは登録したメモとアップロードしたファイルがそれぞれ2つの共有先と共有されていることを意味します。
メモやファイルがどのレコードやユーザと共有されているかを表すLinkedEntityId(LinkedEntity.Name)を見ると、
「取引先1」と「メモとファイルの所有者」が設定されています。
これでメモやファイルがどのレコードに対して登録、アップロードされているか、またどのユーザと共有されているかが特定できますね。
- ContentDocumentの「FileType=’SNOTE’」はメモを表す
- ライブラリに登録されているファイルはContentDocumentの「ParentId」にライブラリのIdが設定される
- ContentDocumentLinkを取得する際はWhere句に「ContentDocumentId」もしくは、「LinkedEntityId」を指定する必要がある
まとめ
今回は、Salesforceの「メモ」や「ファイル」周辺のオブジェクト構成や情報の取得方法をまとめてみました。
以下、個人的に大事だなあと思ったことです。
- Lightningでは「メモ & 添付ファイル」ではなく「ファイル」を使用した方がよさそう
- メモやファイルを登録すると「ContentDocument」にレコードが作成される
- と、同時に「ContentDocumentLink」と「ContentVersion」にレコードができる
- メモやファイルがどのレコードに対して登録、アップロードされているか、またどのユーザと共有されているかは「ContentDocumentLink.LinkedEntityId」で分かる
また追加情報等ありましたら追加します。
おわり。
![](https://atsudayo.com/wp-content/uploads/2022/08/sample-300x183.jpg)
![](https://atsudayo.com/wp-content/uploads/2022/08/6-1-300x183.jpg)
![](https://atsudayo.com/wp-content/uploads/2022/08/6-2-300x183.jpg)
コメント