使用外部 ID 插入父子自定义对象
Insert to Parent and child custom object using external Id
我正在尝试使用父自定义对象的外部 ID 将记录插入到子自定义对象中。我几乎清楚如何在父对象中设置外部 id 字段,但对如何在我的子对象中设置外键感到非常困惑。我在这里附上图片,其中包含主自定义对象和子自定义对象的详细信息。我应该将什么添加到子自定义对象以 link 它的记录到父对象。
这也是我从 Whosebug 中的另一个 post 获得的代码,但在我的情况下不起作用
enter image description heresumchans__City_Master__c city = new sumchans__City_Master__c(Name='[![enter image description here][1]][1]Vancouver',sumchans__PROVINCE__c = 'BC', sumchans__City_Name_Ext_Id__c = 'Vancouver');
insert city;
sumchans__City_Stat__c cityStat = new sumchans__City_Stat__c(Name = 'Vancouver', sumchans__ON_BILLINGS__c = 50, sumchans__City_Master__c=new sumchans__City_Master__c(sumchans__City_Name_Ext_Id__c='Vancouver'));
insert cityStat;
改为创建查找字段。因为 External ID 字段用于引用来自另一个外部系统的 ID。
如果要将外键关联到关系型DBMS,需要在子对象中创建查找关系类型字段。您需要在 Related To 字段中分配父对象。
分机。 id 旨在用于集成、数据加载器...它们也可以用于 Apex,但语法看起来有点滑稽。如果您必须节省查询或想去 "dear salesforce, I don't remember if I saved this object already, I know unique identifier is 123, go figure it out yourself whether it needs insert or update".
,请在 Apex 中使用它们
如果您在同一个事务中插入父项和子项 - 只需使用生成的 ID 到父项记录中。如果它们是分开的,那么您刚才这样做了:
insert new sumchans__City_Master__c city = new sumchans__City_Master__c(Name=Vancouver',
sumchans__PROVINCE__c = 'BC',
sumchans__City_Name_Ext_Id__c = 'Vancouver'
);
然后在另一笔交易中,您可以在不查询的情况下执行此操作:
sumchans__City_Stat__c cityStat = new sumchans__City_Stat__c(Name = 'Vancouver',
sumchans__ON_BILLINGS__c = 50,
sumchans__City_Master__r = new sumchans__City_Master__c(
sumchans__City_Name_Ext_Id__c='Vancouver'
)
);
insert cityStat;
请注意,我使用 __r
而不是 __c
。 __c
将是您真正的外键,Id 字段,15 或 18 个字符。 __r
将是对另一个对象的引用(例如带有 ext.id 或查询结果),类似于写作 SELECT FirstName, Email, Account.Name FROM Contact
.
在 Apex 中,它必须作为对象引用(因此使用 new
关键字查询或作弊,只是为了在内存中创建它。您实际上不会保存那个 "parent")。在数据加载器之类的东西中,您可以将值映射为 myCsvExtIdColumn -> sumchans__City_Master__r.sumchans__City_Name_Ext_Id__c
我正在尝试使用父自定义对象的外部 ID 将记录插入到子自定义对象中。我几乎清楚如何在父对象中设置外部 id 字段,但对如何在我的子对象中设置外键感到非常困惑。我在这里附上图片,其中包含主自定义对象和子自定义对象的详细信息。我应该将什么添加到子自定义对象以 link 它的记录到父对象。
这也是我从 Whosebug 中的另一个 post 获得的代码,但在我的情况下不起作用
enter image description heresumchans__City_Master__c city = new sumchans__City_Master__c(Name='[![enter image description here][1]][1]Vancouver',sumchans__PROVINCE__c = 'BC', sumchans__City_Name_Ext_Id__c = 'Vancouver');
insert city;
sumchans__City_Stat__c cityStat = new sumchans__City_Stat__c(Name = 'Vancouver', sumchans__ON_BILLINGS__c = 50, sumchans__City_Master__c=new sumchans__City_Master__c(sumchans__City_Name_Ext_Id__c='Vancouver'));
insert cityStat;
改为创建查找字段。因为 External ID 字段用于引用来自另一个外部系统的 ID。
如果要将外键关联到关系型DBMS,需要在子对象中创建查找关系类型字段。您需要在 Related To 字段中分配父对象。
分机。 id 旨在用于集成、数据加载器...它们也可以用于 Apex,但语法看起来有点滑稽。如果您必须节省查询或想去 "dear salesforce, I don't remember if I saved this object already, I know unique identifier is 123, go figure it out yourself whether it needs insert or update".
,请在 Apex 中使用它们如果您在同一个事务中插入父项和子项 - 只需使用生成的 ID 到父项记录中。如果它们是分开的,那么您刚才这样做了:
insert new sumchans__City_Master__c city = new sumchans__City_Master__c(Name=Vancouver',
sumchans__PROVINCE__c = 'BC',
sumchans__City_Name_Ext_Id__c = 'Vancouver'
);
然后在另一笔交易中,您可以在不查询的情况下执行此操作:
sumchans__City_Stat__c cityStat = new sumchans__City_Stat__c(Name = 'Vancouver',
sumchans__ON_BILLINGS__c = 50,
sumchans__City_Master__r = new sumchans__City_Master__c(
sumchans__City_Name_Ext_Id__c='Vancouver'
)
);
insert cityStat;
请注意,我使用 __r
而不是 __c
。 __c
将是您真正的外键,Id 字段,15 或 18 个字符。 __r
将是对另一个对象的引用(例如带有 ext.id 或查询结果),类似于写作 SELECT FirstName, Email, Account.Name FROM Contact
.
在 Apex 中,它必须作为对象引用(因此使用 new
关键字查询或作弊,只是为了在内存中创建它。您实际上不会保存那个 "parent")。在数据加载器之类的东西中,您可以将值映射为 myCsvExtIdColumn -> sumchans__City_Master__r.sumchans__City_Name_Ext_Id__c