Sandoboxのストレージがすぐにいっぱいになるらしい。今はデータローダで消しているが複数のオブジェクトがあるので面倒だとのこと。
私はApexバッチを提案。
ContentDocumentLinkが関連する場合には消す順番が大事みたい。
まずはContentDocumentLinkを消す。そのあとは添付ファイルと、関連先のオブジェクト。
間違えるとエラーになる。注意。
public class BAT_Delete_Account implements Database.Batchable<sObject> {
public Database.QueryLocator start(Database.BatchableContext BC) {
// collect the batches of records or objects to be passed to execute
String query = 'Select Id,Name From Account limit 1';
return Database.getQueryLocator(query);
}
public void execute(Database.BatchableContext BC, List<Account> accList) {
System.debug('******** accList ' + accList);
List<Account> deleteAccountList = new List<Account>();
SET<Id> AccountIdSet = new SET<Id>();
for (Account a : accList ){
AccountIdSet.add(a.Id);
Account acc = new Account();
acc.Id = a.Id;
deleteAccountList.add(acc);
}
List<ContentDocumentLink> ContentDocumentLinkList = [SELECT Id,ContentDocumentId,LinkedEntityId FROM ContentDocumentLink WHERE LinkedEntityId =: AccountIdSet];
List<ContentDocumentLink> deleteContentDocumentLinkList = new List<ContentDocumentLink>();
SET<Id> ContentDocumentLinkIdSet = new SET<Id>();
for (ContentDocumentLink cdl : ContentDocumentLinkList){
ContentDocumentLinkIdSet.add(cdl.ContentDocumentId);
ContentDocumentLink c = new ContentDocumentLink();
c.Id = cdl.Id;
deleteContentDocumentLinkList.add(c);
}
List <ContentNote> deleteContentNoteList = [SELECT Id FROM ContentNote WHERE Id =: ContentDocumentLinkIdSet];
try {
System.debug('******** deleteContentDocumentLinkList.size() ' + deleteContentDocumentLinkList.size());
System.debug('******** deleteAccountList.size() ' + deleteAccountList.size());
System.debug('******** deleteContentNoteList.size() ' + deleteContentNoteList.size());
if(deleteContentDocumentLinkList.size() > 0) delete deleteContentDocumentLinkList;
if(deleteAccountList.size() > 0) delete deleteAccountList;
if(deleteContentNoteList.size() > 0) delete deleteContentNoteList;
} catch(Exception e) {
System.debug(e);
}
}
public void finish(Database.BatchableContext BC) {
// execute any post-processing operations like sending email}
}
}
テストクラス
@isTest
public class BAT_Delete_Account_test {
private static testMethod void test01() {
Test.startTest();
Account acc = new Account();
acc.Name = 'Test 001';
insert acc;
ContentNote cn = new ContentNote();
cn.Title = 'test Note';
cn.Content = Blob.valueof('test Note');
insert cn;
ContentDocumentLink cdl = new ContentDocumentLink();
cdl.ContentDocumentId = cn.Id;
cdl.LinkedEntityId = acc.Id;
insert cdl;
System.debug('-------- BAT start ' );
BAT_Delete_Account bat = new BAT_Delete_Account();
ID jobId = Database.executeBatch(bat);
Test.stopTest();
List<Account> ResultList = [SELECT Id FROM Account ];
System.debug('-------- ResultList ' + ResultList);
System.assertEquals(ResultList.size(), 0);
List<ContentNote> ResultList2 = [SELECT Id FROM ContentNote WHERE Id=: cn.Id ];
System.debug('-------- ResultList2 ' + ResultList2);
System.assertEquals(ResultList2.size(), 0);
}
}