この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

ContentDocumentLink

Salesforce CRM Content ドキュメントや Salesforce ファイルと、それを共有する場所とのリンクを表します。ファイルは、他のユーザ、グループ、レコード、Salesforce CRM Content ライブラリと共有できます。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 以降では、UserCollaborationGroup、または Organization 種別の LinkedEntityId で ContentDocumentLink オブジェクトを作成できます。
  • API バージョン 21.0 以降では、ファイルへの明示的な閲覧者アクセス権がある (ファイルが直接共有されている) ユーザは、閲覧者アクセス権がある他のユーザとファイル間の ContentDocumentLink オブジェクトを削除できます。同じ API バージョンで、ファイルへの閲覧者アクセス権があるユーザは、自分がメンバーである組織またはグループとファイル間の ContentDocumentLink オブジェクトを削除できます。
  • Communities が有効な組織の場合、ドキュメントは、ファイルが作成されたコミュニティに属するユーザおよびグループとのみ共有できます。

項目

項目 詳細
ContentDocumentId
reference
プロパティ
Create、Filter、Group、Sort
説明
ドキュメントの ID。
LinkedEntityId
reference
プロパティ
Create、Filter、Group、Sort
説明
リンクしたオブジェクトの ID。カスタムオブジェクトを含む Chatter フィード追跡をサポートする Chatter ユーザ、グループ、レコード、および Salesforce CRM Content ライブラリを含むことができます。
ShareType
picklist
プロパティ
Create、Filter、Group、Nillable、Restricted picklist、Sort、Update
説明
必須。ライブラリ内で共有されているファイルのユーザに付与される権限。これは、ライブラリ内でユーザがすでに持っている権限によって決まります。この項目は、API バージョン 25.0 以降で使用できます。
V
閲覧者権限。ユーザは共有されているファイルを明示的に参照できますが、編集することはできません。
C
コラボレータ権限。ユーザは共有されているファイルを明示的に参照、編集できます。
I
推定権限。ユーザの権限は関連するレコードによって決まります。ライブラリとの共有の場合、これはユーザがそのライブラリで持つ権限によって定義されます。
Visibility
picklist
プロパティ
CreateFilterGroupNillableSort
説明
このファイルを使用できるのが、すべてのユーザ、内部ユーザ、共有ユーザのいずれであるかを指定します。この項目は API バージョン 26.0 以降で使用できます。
Visibility には、次の値があります。
  • AllUsers — このファイルは、このファイルを参照する権限を持つすべてのユーザが使用できます。
  • InternalUsers — このファイルは、このファイルを参照する権限を持つ内部ユーザのみが使用できます。
  • SharedUsers — このファイルは、このファイルが投稿されたフィードを表示できるすべてのユーザが使用できます。SharedUsers はユーザと共有するファイルにのみ使用され、組織にデフォルトで非公開の組織の共有がある場合にのみ使用できます。SharedUsers 値は、API バージョン 32.0 以降で使用できます。
Visibility の例外について、次の点に注意してください。
  • AllUsers および InternalUsers 値は、標準およびカスタムオブジェクトレコードに投稿されたファイルには適用されますが、ユーザ、グループ、またはコンテンツライブラリには適用されません。
  • レコードフィードへの投稿の場合、Visibility はデフォルトですべての内部ユーザに対して InternalUsers に設定されています。
  • 外部ユーザは VisibilityAllUsers にのみ設定できます。
  • ユーザおよびグループ投稿では、内部ユーザのみが VisibilityInternalUsers に設定できます。
  • ユーザフィードへの投稿の場合、ユーザ共有に関する組織の共有設定が非公開に設定されていると、VisibilitySharedUsers に設定されます。

ContentDocumentLink の表示設定により、レコード投稿でのファイルの表示が決定されます。ファイルで複数の参照がフィードに投稿されている場合、ファイルの表示は最も見やすい設定によって決定されます。

使用方法

このオブジェクトを使用して、ファイルを共有する場所をクエリしたり、特定の場所にリンクされているファイルをクエリしたりします。たとえば、次のクエリは Chatter グループで共有される特定のドキュメントを返します。

1SELECT ContentDocument.title FROM ContentDocumentLink WHERE ContentDocumentId = '069D00000000so2' AND LinkedEntityId = '0D5000000089123'
  • ContentDocumentLink に対する条件なしでは、クエリを実行することはできません。
  • ContentDocumentId で条件検索している場合は、ContentDocument 項目で条件検索することはできません。LinkedEntityId で条件検索している場合は、ContentDocument 項目でのみ条件検索することができます。
  • 関連オブジェクト項目で条件検索することはできません。たとえば、ファイルのリンク先の取引先のプロパティで条件検索をすることはできません。タイトル項目などのファイルのプロパティでは検索条件できます。
SOQL クエリの絞り込みでは、IdContentDocumentIdLinkedEntityId のいずれかを条件にする必要があります。

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}

Apex では、5 秒を超える同時要求は組織ごとに 10 件に制限されています。ファイルをアップロードするトリガは、この制限にすぐに達する可能性があります。

重要