8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ContentDocumentに関連する添付ファイルの登録と削除(初級篇)

Last updated at Posted at 2020-12-04

##Salesforce内に添付ファイルや画像を登録、削除処理について、本文にて整理します。

####◆添付ファイルを保存するため、以下のオブジェクトが必要です。
ContentDocument:アップロードされたドキュメントや画像などの添付ファイル
         ただし、コンテンツ又は本文は該当オブジェクトに保存されません。
ContentVersion:ドキュメントや画像の特定のバージョ情報。
        該当オブジェクトにコンテンツ又は本文を保存する。
ContentDocumentLink:アップロードされるファイルや画像がどのレコードに属するかは該当オブジェクトにて管理する。

※詳細の説明は公式なサイトで説明があるので、上記のリンクを参照してください。

####◆上記のオブジェクトのデータモデルは以下の通りです。
・ContentDocumentとContentVersionについて、1:N
・ContentDocumentとContentDocumentLinkについて、論理的に1:Nですが、基本は1:1でしょう。
 ※1つのファイルが複数のレコードが共有される場合、1:Nですね。
・ContentDocumentLinkに「LinkedEntityId」にレコードId(例えば、Chatterデータ)が設定
される場合、アップロードされるファイルはそのレコードに紐づくことです。
あああ.png

####◆添付ファイルの登録
添付ファイルをsalesforceに登録する場合、通常の考えは上記の三つのオブジェクトにデータを登録すれば良いでしょう。実際にContentDocumentにデータを登録しなくて済です。ContentVersionを登録することで、ContentDocumentにデータが自動的に登録される。
つまり、添付ファイルを登録する場合、以下のオブジェクトを登録することです。
・ContentVersion
・ContentDocumentLink

添付ファイルの登録の実装例.cls
// ①コンテンツバージョンを保存する
ContentVersion conVer = new ContentVersion();
conVer.Title = fileName;// タイトル
conVer.PathOnClient = fileName;// クライアントでのパス
conVer.VersionData = EncodingUtil.Base64Decode(fileData);// ファイル本文
conVer.IsMajorVersion = true;// メジャーバージョン
insert conVer;

// ②ContentDocumentIdを取得する
String recordId = conVerData.Id;
String query = 'SELECT ContentDocumentId FROM ContentVersion WHERE Id IN :recordId';
ContentVersion conVerNew = Database.query(query);

// ③コンテンツドキュメントリンクを保存する
ContentDocumentLink conDocLink = new ContentDocumentLink();
conDocLink.ContentDocumentId = conVerNew.ContentDocumentId;
conDocLink.LinkedEntityId = attFileData.Id; // リンクしたオブジェクトの ID
conDocLink.ShareType = 'I'; // 必須 V、C、I(詳細の意味はAPI参照)
conDocLink.Visibility = 'AllUsers'; // (他の設定値はAPI参照)
insert conDocLink;

####◆添付ファイルの削除
削除の場合、どうなるでしょう。
結論から言うと、登録と同じイメージです。つまり、一部のデータが自動的削除されます。
登録よりさらに簡単です。ContentDocumentLink、ContentVersionのデータが自動的に削除されます。
つまり、添付ファイルを削除する場合、ContentDocumentのみ削除して良いです。

添付ファイルの削除の実装例.cls
// ContentDocumentを削除する
ContentDocument cd = new ContentDocument();
conVer.id = cdId;// ContentDocumentのId
delete cd;

##まとめ
◆Salesforce上に添付ファイルに対する操作について、以下のオブジェクトが必要です。
  ・ContentDocument
  ・ContentVersion
  ・ContentDocumentLink
◆添付ファイルを登録する場合、以下のオブジェクトに対象データを登録すれば良いです。
  ・ContentVersion
  ・ContentDocumentLink
◆添付ファイルを削除する場合、以下のオブジェクトに対象データを削除すれば良いです。
  ・ContentDocument

8
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?