ContentDocumentLink
Salesforce CRM Content ドキュメントや Salesforce ファイルと、それを共有する場所とのリンクを表します。Salesforce CRM Content ドキュメントおよび Salesforce Files では、バージョン 21.0 以降でこのオブジェクトを使用できます。
サポートされているコール
create()、delete()、describeSObjects()、query()、retrieve()、update()
特別なアクセスルール
- カスタマーポータルユーザおよびパートナーポータルユーザが、アクセス権を持つライブラリのコンテンツをクエリするには、「ポータルのコンテンツの参照」権限が必要です。
- ユーザ (「すべてのデータの参照」権限を持つユーザを含む) は、自分がアクセス権を持つファイルに対してのみクエリを実行できます。次に例を挙げます。
- ライブラリの権限に関係なく、自分がメンバーであるライブラリと個人ライブラリのすべての Salesforce CRM Content ファイル (API バージョン 17.0 以降)。
- 自分が所有しているか、プロファイルに投稿したか、参照可能なグループに投稿したか、直接共有しているすべての Salesforce Files (API バージョン 21.0 以降)。
- API バージョン 33.0 以降では、フィードで追跡可能なレコードタイプの LinkedEntityId で ContentDocumentLink オブジェクトを作成および削除できます。そのレコードタイプのフィード追跡が無効な場合でも同様です。
- API バージョン 25.0 以降では、User、CollaborationGroup、または Organization 種別の LinkedEntityId で ContentDocumentLink オブジェクトを作成できます。
- API バージョン 21.0 以降では、ファイルへの明示的な閲覧者アクセス権がある (ファイルが直接共有されている) ユーザは、閲覧者アクセス権がある他のユーザとファイル間の ContentDocumentLink オブジェクトを削除できます。同じ API バージョンで、ファイルへの閲覧者アクセス権があるユーザは、自分がメンバーである組織またはグループとファイル間の ContentDocumentLink オブジェクトを削除できます。
- Communities が有効な組織の場合、ドキュメントは、ファイルが作成されたコミュニティに属するユーザおよびグループとのみ共有できます。
項目
| 項目 | 詳細 |
|---|---|
| ContentDocumentId |
|
| LinkedEntityId |
|
| ShareType |
|
| Visibility |
ContentDocumentLink の表示設定により、レコード投稿でのファイルの表示が決定されます。ファイルで複数の参照がフィードに投稿されている場合、ファイルの表示は最も見やすい設定によって決定されます。 |
使用方法
このオブジェクトを使用して、ファイルを共有する場所をクエリしたり、特定の場所にリンクされているファイルをクエリしたりします。たとえば、次のクエリは Chatter グループで共有される特定のドキュメントを返します。
1SELECT ContentDocument.title FROM ContentDocumentLink WHERE ContentDocumentId = '069D00000000so2' AND LinkedEntityId = '0D5000000089123'- ContentDocumentLink に対する条件なしでは、クエリを実行することはできません。
- ContentDocumentId で条件検索している場合は、ContentDocument 項目で条件検索することはできません。LinkedEntityId で条件検索している場合は、ContentDocument 項目でのみ条件検索することができます。
- 関連オブジェクト項目で条件検索することはできません。たとえば、ファイルのリンク先の取引先のプロパティで条件検索をすることはできません。タイトル項目などのファイルのプロパティでは検索条件できます。
ContentDocumentLink オブジェクトでは、挿入、更新、削除操作の前後のトリガがサポートされます。
例
この ContentDocumentLink オブジェクト用のトリガでは、公開 XLSX ファイルが共有されないようにします。
トリガは次のヘルパークラスをコールします。
1trigger NoShareXLSX on ContentDocumentLink (after insert) {
2 for (ContentDocumentLink cdl : trigger.new) {
3 if (!CDLHelper.isSharingAllowed(cdl)) {
4 cdl.addError('Sorry, you cannot share this file.');
5 }
6 }
7}1public class CDLHelper {
2
3 /**
4 * Gets FileExtension of the inserted content.
5 */
6 public static String getFileExtension(ContentDocumentLink cdl) {
7 String fileExtension;
8 String docId = cdl.ContentDocumentId;
9 FileExtension = [select FileExtension from ContentVersion where ContentDocumentId = :docId].get(0).FileExtension;
10 return FileExtension;
11 }
12
13 /**
14 * Checks the file's PublishStatus and FileExtension to decide whether user can share the file with others.
15 * PublishStatus 'P' means the document is in a public library.
16 */
17 public static boolean isSharingAllowed(ContentDocumentLink cdl) {
18 String docId = cdl.ContentDocumentId;
19 ContentVersion version = [select PublishStatus,FileExtension from ContentVersion where ContentDocumentId = :docId].get(0);
20 if (version.PublishStatus.equals('P') && (version.FileExtension != null && version.FileExtension.equals('xlsx'))) {
21 return false;
22 }
23 return true;
24 }
25
26 /**
27 * Gets the parent account name if the file is linked to an account.
28 */
29 public static String getAccountName(ContentDocumentLink cdl) {
30 String name;
31 String id = cdl.LinkedEntityId;
32 if (id.substring(0,3) == '001') {
33 name = [select Name from Account where Id = :id].get(0).Name;
34 }
35 return name;
36 }
37}