从Salesforce删除重复的资产

时间:2018-12-14 16:05:35

标签: duplicates salesforce assets soql

我知道我们的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 :(得分:0)

像这样?未经测试,但遵循这些原则。 您可能必须运行几次,或者在“帐户”上添加自己的过滤器以某种方式分割数据。

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返回布尔值,说明集合是否由于添加而被修改。