Удалить дубликаты активов из Salesforce - PullRequest
0 голосов
/ 14 декабря 2018

Я узнал, что в нашей песочнице Salesforce есть несколько дублирующих активов.Чтобы провести более тщательное тестирование моего текущего задания, мне нужно очистить дубликаты активов.Под каждой учетной записью я мог видеть, что для одного и того же продукта есть несколько активных активов.

Я выполнил следующий запрос, и он извлекает повторяющиеся значения.

SELECT  AccountId, ProductCode, COUNT(Id)
FROM Asset
WHERE ProductCode != null AND RecordType.Name = 'Internal' and IsActive__c = true
GROUP BY AccountId, ProductCode
HAVING COUNT(Id) > 1
LIMIT 100

Есть ли способсохранить только самый последний активный актив и удалить оставшиеся?

1 Ответ

0 голосов
/ 14 декабря 2018

Как то так?Не проверено, но по этим направлениям.Возможно, вам придется запустить его несколько раз или добавить свой собственный фильтр в учетные записи, чтобы каким-то образом нарезать данные.

List<Asset> toDelete = new List<Asset>();

for(Account acc : [SELECT Id,
    (SELECT ProductCode
    FROM Assets
    WHERE ProductCode != null AND RecordType.Name = 'Internal' and IsActive__c = true
    ORDER BY LastModifiedDate DESC)
    FROM Account
    WHERE Id IN (SELECT AccountId FROM Asset WHERE ProductCode != null AND RecordType.Name = 'Internal' and IsActive__c = true)
    LIMIT 1000]){

    Set<String> productCodes = new Set<String>();
    for(Asset a : acc.Assets){
        if(productCodes.contains(a.ProductCode)){
            toDelete.add(a);
        } else {
            productCodes.add(a.ProductCode);
        }
    }
}

delete toDelete;

Возможно, вы можете немного упростить его, насколько я помню, set.add возвращает логическое выражение, говорящее о том, что коллекция имеетизменено в результате добавления.

...