我可以将其他Salesforce组织中的反序列化JSON SObject插入到我的组织中吗?

时间:2012-08-10 21:22:18

标签: json salesforce

我们需要将复杂的数据结构从一个组织克隆到另一个组织。它包含一系列自定义SObject,包括父母和孩子。

流程如下。在原始组织中,我们只是JSON.serialize我们想要发送的SObject列表。然后,在目标组织上,我们可以JSON.deserialize该对象列表。到目前为止一切都很好。

问题是我们无法直接插入这些SObject,因为它们包含原始组织的ID,而Salesforce不允许我们插入已经有ID的对象。

我们找到的解决方案是手动插入对象层次结构,维护originId>的映射。 targetId并手动修复关系。但是,我们想知道Salesforce是否提供了更简单的方法来做这样的事情,或者有人知道更好的方法。

Salesforce中是否有嵌入式方法来执行此操作?或者我们是否陷入了繁琐的手动过程?

1 个答案:

答案 0 :(得分:1)

使用 preserveIds = false调用

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>