SalesforceにおけるWebサービスコールアウトのテスト完全ガイド

ApexでContentDocumentレコードを取得する方法


SalesforceのContentDocumentは、コンテンツライブラリ(Salesforce Files)に保存されているドキュメントを表すオブジェクトです。この記事では、SOQLクエリを使用してContentDocumentレコードを取得する方法について説明します。


ContentDocumentとは?

  • ContentDocumentはSalesforce Filesの「ファイル情報」を保持するオブジェクトです。
  • ContentDocumentには複数のバージョン(ContentVersion)や、アクセス情報(ContentDocumentLink)が関連付けられています。

すべてのContentDocumentレコードを取得するSOQL

以下のクエリを使用すると、すべてのContentDocumentレコードを取得できます。

List<ContentDocument> contentDocuments = [SELECT Id, Title, LatestPublishedVersionId, CreatedDate, OwnerId FROM ContentDocument];
System.debug('Content Documents: ' + contentDocuments);

SOQLでの具体例

  1. 全てのContentDocumentを取得

    public class ContentDocumentService {
        public static List<ContentDocument> getAllContentDocuments() {
            return [SELECT Id, Title, LatestPublishedVersionId, CreatedDate, OwnerId FROM ContentDocument];
        }
    }
    
    // 使用例
    List<ContentDocument> allDocs = ContentDocumentService.getAllContentDocuments();
    for (ContentDocument doc : allDocs) {
        System.debug('ファイル名: ' + doc.Title + ' | ID: ' + doc.Id);
    }
    
  2. 特定の条件でフィルタリングする 例えば、特定の所有者がアップロードしたファイルのみ取得する場合は、以下のようにフィルタリングします。

    Id ownerId = '005xxxxxxxxxxxx'; // 所有者ID
    List<ContentDocument> ownerDocs = [SELECT Id, Title, CreatedDate FROM ContentDocument WHERE OwnerId = :ownerId];
    System.debug('特定の所有者のファイル: ' + ownerDocs);
    
  3. 関連するContentVersionを取得する ContentDocumentに関連付けられた最新バージョン(ContentVersion)を取得する場合は、LatestPublishedVersionIdを利用します。

    List<ContentDocument> docsWithVersions = [
        SELECT Id, Title, LatestPublishedVersionId, 
            (SELECT Id, Title, ContentSize FROM ContentVersions) 
        FROM ContentDocument
    ];
    for (ContentDocument doc : docsWithVersions) {
        System.debug('ファイル名: ' + doc.Title);
        for (ContentVersion version : doc.ContentVersions) {
            System.debug('バージョン: ' + version.Title + ' | サイズ: ' + version.ContentSize);
        }
    }
    

注意点

  1. アクセス権限

    • ファイルへのアクセスには適切な権限が必要です。例えば、ファイルの共有設定やオブジェクトの権限により取得結果が異なる場合があります。
  2. ガバナ制限

    • SOQLクエリの結果は最大50,000件までです。大量のレコードを取得する場合は、LIMITOFFSETを使用するか、Batch Apexの利用を検討してください。
  3. ContentDocumentLink

    • ファイルはContentDocumentLinkを通じてさまざまなオブジェクト(レコード)に関連付けられます。取得する際には、このリンク情報も考慮すると便利です。

まとめ

ContentDocumentオブジェクトをSOQLで取得する方法は、主に以下の通りです:

  1. 全てのContentDocumentレコードを取得する。
  2. 条件を追加して必要なデータだけを取得する。
  3. ContentVersionContentDocumentLinkなどの関連データを合わせて取得する。

ファイル管理やデータ操作を行う際に、上記の手法を活用することで効率的にContentDocumentレコードを操作できます。

コメント