我们需要将复杂的数据结构从一个组织克隆到另一个组织。它包含一系列自定义SObject,包括父母和孩子。
流程如下。在原始组织中,我们只是JSON.serialize我们想要发送的SObject列表。然后,在目标组织上,我们可以JSON.deserialize该对象列表。到目前为止一切都很好。
问题是我们无法直接插入这些SObject,因为它们包含原始组织的ID,而Salesforce不允许我们插入已经有ID的对象。
我们找到的解决方案是手动插入对象层次结构,维护originId>的映射。 targetId并手动修复关系。但是,我们想知道Salesforce是否提供了更简单的方法来做这样的事情,或者有人知道更好的方法。
Salesforce中是否有嵌入式方法来执行此操作?或者我们是否陷入了繁琐的手动过程?
答案 0 :(得分:1)
List.deepClone()
可能会遇到一个问题,然后:
考虑使用upsert操作为您构建关系。 Upsert不仅可以防止重复,还可以maintain hierarchies。 你需要父母的外部Id字段,而不是孩子。
/* Prerequisites to run this example succesfully:
- having a field Account_Number__c that will be marked as ext. id (you can't mark the standard one sadly)
- having an account in the DB with such value (but the point of the example is to NOT query for it's Id)
*/
Account parent = new Account(Account_Number__c = 'A364325');
Contact c = new Contact(LastName = 'Test', Account = parent);
upsert c;
System.debug(c);
System.debug([SELECT AccountId, Account.Account_Number__c FROM Contact WHERE Id = :c.Id]);
如果您不确定它是否适合您 - 使用Data Loader的upsert功能,可能有助于理解。
如果你在同一个sObject类型上有超过2级的层次结构,我认为你仍然需要以正确的顺序插入它们(或使用Database.upsert
版本并继续为失败的版本重新运行它。)< / p>