Apex - SalesForce - 通过Junction对象访问父对象字段

时间:2012-05-10 17:37:21

标签: orm salesforce apex-code junction-table

Hello Folks,

我正在努力在Force.com平台上自定义一些功能。我有一个问题问你;我不太确定这是否可能!

我拥有什么?:2个自定义对象 - abc和pqr。 Abc是标准对象Account和pqr之间的联结对象,即Account是abc的父对象,然后Pqr是abc的父对象。我正在通过这些对象将所有内容检索到类型为Account的列表中(即来自Account对象)。

我需要什么?:我可以访问Apex中的abc对象,即Account的第一个孩子。是否有可能通过帐户访问pqr的字段?

我尝试了什么:通过关系名称访问对象 - Account.abc_ r [0] .pqr _r [0] .FIELDNAME

但它没有奏效。 一些salesforce / apex开发人员可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

您应该能够使用子查询获取所需的信息。这里真正的问题是如何设置您的查询。您的查询将需要访问数据模型的所有级别才能使其可用。如果您依赖于触发器或标准控制器中返回的数据,那么我建议您要求帐户对象访问其他信息。

所以我希望看到以下内容:

List<Account> accounts = [SELECT Id, Name, (SELECT Id, pqr__r.Id, pqr__r.Name FROM abc__r) FROM Account];

for (Account acct : accounts) {
    string someValue = acct.abc__r[0].pqr__r.Name;
}

请记住,尽管作为一种最佳实践,您不应该像我上面那样访问子记录,因为如果没有ABC记录,那么该对象将为null,因此作为最佳实践,您将需要测试前面的那些时间PQR对象数据也是如此。

答案 1 :(得分:2)

此问题的答案如下:

List<Account> accounts = [SELECT Id, Name, (SELECT Id, pqr__r.Id, pqr__r.Name FROM abc__r) FROM Account];

for (Account acct : accounts) {
    for(Abc__c abc : acct.abc__r)
       {
          String someValue = abc.pqr__r.Name;
       }
}

注意:这里,abc_ r是对象Abc _c与Account的关系。如果您有任何问题,请对此发表评论。