【问题标题】:Salesforce Bulk Upsert throws Duplicate errorSalesforce Bulk Upsert 引发重复错误
【发布时间】:2020-05-15 13:53:06
【问题描述】:

我正在对 SF Bulk API 中的重复错误场景进行研发,发现我无法在单个批次中同时为具有相同(外部 id)的联系人执行插入和更新操作。

我收到一个重复的错误。截图供参考

https://www.screencast.com/t/ReE41vuzb

当批次包含不同的外部 id 时,我没有任何错误。但是,当单个批次中重复外部 ID 时,我收到以下错误。 { “成功”:假, “创造”:假, “身份证”:空, “错误”:[{ "message" : "指定的外部 id 重复:7401", “字段”:[“Origami_ID__c”], “statusCode”:“DUPLICATE_VALUE”, “扩展错误详细信息”:空 }

虽然在目标端没有重复。

【问题讨论】:

  • 您在同一批次中有“重复”的原因是什么?还有你不能避免这种情况的原因吗?我没有解决方案,但这可能是记录在案的功能。本文使用的是 PATCH,但可能是相同的基本概念。请参考以下链接:help.salesforce.com/…
  • 我们有一个包含 30K 记录的文件,我们使用 Bulk Upsert 操作将其拆分为 5K 批大小。我们可以预期该文件可能包含具有重复记录的记录,其中记录详细信息可以从第 1 条记录更改为第 n 条记录。截至目前,我们正在过滤只是为了选择最后一个唯一记录。但理想情况下,如果一个作业有 5k 条记录且具有相同唯一 ID 的重复记录,则应插入第一条记录并更新后续记录,而不是引发错误。

标签: salesforce upsert salesforce-lightning rest


【解决方案1】:

您只需要具有相同唯一 ID 的多条记录中的最后一条记录。

为此,请遵循以下逻辑:

//Create Map and populate the map with last record having unique id
Map<String,MyObject__c> mapWithUniqueIdMyObject = new Map<String,MyObject__c>();
MyObject__c currentObject;
for(Integer currentPosition = myObjectListWith5000Records.size(); currentPosition >=0 ;currentPosition--){
     currentObject = myObjectListWith5000Records.get( currentPosition );
     if( !mapWithUniqueIdMyObject.containsKey(currentObject.Origami_ID__c) ){//If the map does not contain any object with unique id then put the object in the map
          mapWithUniqueIdMyObject.put( currentObject.Origami_ID__c, currentObject );
     }
} 
upsert mapWithUniqueIdMyObject.getValues();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2016-09-14
    • 2018-03-04
    相关资源
    最近更新 更多