我知道我们的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
是否可以仅保留最近的活动资产并删除其余资产?
答案 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
返回布尔值,说明集合是否由于添加而被修改。