##Salesforce内に添付ファイルや画像を登録、削除処理について、本文にて整理します。
####◆添付ファイルを保存するため、以下のオブジェクトが必要です。
ContentDocument:アップロードされたドキュメントや画像などの添付ファイル
ただし、コンテンツ又は本文は該当オブジェクトに保存されません。
ContentVersion:ドキュメントや画像の特定のバージョ情報。
該当オブジェクトにコンテンツ又は本文を保存する。
ContentDocumentLink:アップロードされるファイルや画像がどのレコードに属するかは該当オブジェクトにて管理する。
※詳細の説明は公式なサイトで説明があるので、上記のリンクを参照してください。
####◆上記のオブジェクトのデータモデルは以下の通りです。
・ContentDocumentとContentVersionについて、1:N
・ContentDocumentとContentDocumentLinkについて、論理的に1:Nですが、基本は1:1でしょう。
※1つのファイルが複数のレコードが共有される場合、1:Nですね。
・ContentDocumentLinkに「LinkedEntityId」にレコードId(例えば、Chatterデータ)が設定
される場合、アップロードされるファイルはそのレコードに紐づくことです。
####◆添付ファイルの登録
添付ファイルをsalesforceに登録する場合、通常の考えは上記の三つのオブジェクトにデータを登録すれば良いでしょう。実際にContentDocumentにデータを登録しなくて済です。ContentVersionを登録することで、ContentDocumentにデータが自動的に登録される。
つまり、添付ファイルを登録する場合、以下のオブジェクトを登録することです。
・ContentVersion
・ContentDocumentLink
// ①コンテンツバージョンを保存する
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のみ削除して良いです。
// ContentDocumentを削除する
ContentDocument cd = new ContentDocument();
conVer.id = cdId;// ContentDocumentのId
delete cd;
##まとめ
◆Salesforce上に添付ファイルに対する操作について、以下のオブジェクトが必要です。
・ContentDocument
・ContentVersion
・ContentDocumentLink
◆添付ファイルを登録する場合、以下のオブジェクトに対象データを登録すれば良いです。
・ContentVersion
・ContentDocumentLink
◆添付ファイルを削除する場合、以下のオブジェクトに対象データを削除すれば良いです。
・ContentDocument