Удаление повторяющихся вложений в Salesforce Apex: методы и примеры кода

Вложения — важная часть управления файлами в Salesforce. Однако дубликаты вложений могут загромождать систему и затруднить поиск соответствующих файлов и управление ими. В этой статье мы рассмотрим несколько методов удаления повторяющихся вложений с помощью Salesforce Apex, а также приведем примеры кода для каждого подхода.

Метод 1: использование набора для выявления дубликатов

List<Attachment> attachments = [SELECT Id, Name, ParentId, Body FROM Attachment];
Set<String> uniqueAttachmentKeys = new Set<String>();
List<Attachment> attachmentsToDelete = new List<Attachment>();
for (Attachment attachment : attachments) {
    String attachmentKey = attachment.ParentId + '_' + attachment.Name;
    if (uniqueAttachmentKeys.contains(attachmentKey)) {
        attachmentsToDelete.add(attachment);
    } else {
        uniqueAttachmentKeys.add(attachmentKey);
    }
}
delete attachmentsToDelete;

Метод 2. Использование карты для выявления дубликатов на основе контента

List<Attachment> attachments = [SELECT Id, Name, ParentId, Body FROM Attachment];
Map<String, List<Attachment>> attachmentMap = new Map<String, List<Attachment>>();
List<Attachment> attachmentsToDelete = new List<Attachment>();
for (Attachment attachment : attachments) {
    Blob attachmentBody = attachment.Body;
    String attachmentContent = attachmentBody.toString();
    if (attachmentMap.containsKey(attachmentContent)) {
        attachmentMap.get(attachmentContent).add(attachment);
        attachmentsToDelete.add(attachment);
    } else {
        attachmentMap.put(attachmentContent, new List<Attachment>{ attachment });
    }
}
delete attachmentsToDelete;

Метод 3. Сравнение свойств вложений для выявления дубликатов

List<Attachment> attachments = [SELECT Id, Name, ParentId, Body FROM Attachment];
List<Attachment> attachmentsToDelete = new List<Attachment>();
for (Integer i = 0; i < attachments.size(); i++) {
    Attachment attachment1 = attachments[i];
    for (Integer j = i + 1; j < attachments.size(); j++) {
        Attachment attachment2 = attachments[j];
        if (attachment1.Name == attachment2.Name && attachment1.ParentId == attachment2.ParentId) {
            attachmentsToDelete.add(attachment2);
        }
    }
}
delete attachmentsToDelete;

Удаление повторяющихся вложений в Salesforce Apex имеет решающее значение для поддержания чистоты и организованности файловой системы. В этой статье мы рассмотрели три различных метода достижения этой цели, приведя примеры кода для каждого подхода. Внедрив эти методы, вы сможете эффективно устранить повторяющиеся вложения и улучшить качество данных в вашей организации Salesforce.