Salesforce 使用对象关系从另一个表访问字段

Salesforce 使用对象关系从另一个表访问字段,salesforce,soql,Salesforce,Soql,我是SalesForce和SOQL的新手,如果问题已经得到回答,请提前表示歉意,如果是,请将其链接到我 我的SOQL查询的目的是获取所有合同信息以生成PDF 有以下表格:合同、联系人和账户 合同表中有以下字段:Maitre\u apprentissage\uu c、MaitreApprentissageNom1\uu c、MaitreApprentissagePrenom1\uu c、apprentiu\uu c、ApprentiNom\uu c、ApprentiPrenom\uu c 有关系:

我是SalesForce和SOQL的新手,如果问题已经得到回答,请提前表示歉意,如果是,请将其链接到我

我的SOQL查询的目的是获取所有合同信息以生成PDF

有以下表格:合同、联系人和账户

合同表中有以下字段:Maitre\u apprentissage\uu c、MaitreApprentissageNom1\uu c、MaitreApprentissagePrenom1\uu c、apprentiu\uu c、ApprentiNom\uu c、ApprentiPrenom\uu c

有关系:

SELECT ApprentiNom__c, ApprentiPrenom__c, Apprenti__r.Date_de_naissance__c, MaitreApprentissageNom1__c, MaitreApprentissagePrenom1__c
FROM Contract
SELECT ApprentiNom__c, ApprentiPrenom__c, Apprenti__r.Date_de_naissance__c, MaitreApprentissageNom1__c, MaitreApprentissagePrenom1__c, Maitre_d_apprentissage__r.Date_de_naissance__c
FROM Contract
  • Apprenti__________________________________
  • Maitre_d_apprentissage_ur将Maitre_d_apprentissage_uc链接到联系表
当我看表时,我看到MaitreApprentissageNom1_uuc等于Maitre_ud_ur.LastName,ApprentiNom_uc等于Apprenti_ur.LastName。因此,我得出结论,我可以按照同样的原则从联系表中获得关于Apprenti_____c和Maitre_d_________c的其他信息。因此,我在查询Apprenti_ur.Date_de_naissance_uc和Maitre_d_apprentissage_ur.Date_de_naissance_uc中添加了Apprenti_ur.Date_de_naissance_uc字段,该字段位于我的联系人表中

我在结果中看到,查询成功地获取了信息,但某些值已经更改了列(第6行和第7行),您可以看到查询1和查询2之间的差异。在第一个查询中,我只返回Apprenti_ur.Date_ude_unaissance_uc,在第二个查询中,我返回Apprenti_ur.Date_ude_unaissance_uc和Maitre_d_uapprenticessage_ur.Date_ude_unaissance_uc

查询1:

SELECT ApprentiNom__c, ApprentiPrenom__c, Apprenti__r.Date_de_naissance__c, MaitreApprentissageNom1__c, MaitreApprentissagePrenom1__c
FROM Contract
SELECT ApprentiNom__c, ApprentiPrenom__c, Apprenti__r.Date_de_naissance__c, MaitreApprentissageNom1__c, MaitreApprentissagePrenom1__c, Maitre_d_apprentissage__r.Date_de_naissance__c
FROM Contract
结果1:

SELECT ApprentiNom__c, ApprentiPrenom__c, Apprenti__r.Date_de_naissance__c, MaitreApprentissageNom1__c, MaitreApprentissagePrenom1__c
FROM Contract
SELECT ApprentiNom__c, ApprentiPrenom__c, Apprenti__r.Date_de_naissance__c, MaitreApprentissageNom1__c, MaitreApprentissagePrenom1__c, Maitre_d_apprentissage__r.Date_de_naissance__c
FROM Contract

查询2:

SELECT ApprentiNom__c, ApprentiPrenom__c, Apprenti__r.Date_de_naissance__c, MaitreApprentissageNom1__c, MaitreApprentissagePrenom1__c
FROM Contract
SELECT ApprentiNom__c, ApprentiPrenom__c, Apprenti__r.Date_de_naissance__c, MaitreApprentissageNom1__c, MaitreApprentissagePrenom1__c, Maitre_d_apprentissage__r.Date_de_naissance__c
FROM Contract
结果2:

SELECT ApprentiNom__c, ApprentiPrenom__c, Apprenti__r.Date_de_naissance__c, MaitreApprentissageNom1__c, MaitreApprentissagePrenom1__c
FROM Contract
SELECT ApprentiNom__c, ApprentiPrenom__c, Apprenti__r.Date_de_naissance__c, MaitreApprentissageNom1__c, MaitreApprentissagePrenom1__c, Maitre_d_apprentissage__r.Date_de_naissance__c
FROM Contract


我想从哪里来了解问题以及如何纠正它。提前谢谢。

可能是您的查询编辑器错误地显示了内容。您可以看到它与联系人表的两个查找混淆了,为什么甚至有一个列标题“Contact.Date_de_____c”(为什么有两次)。而且它们没有按您要求的顺序显示

你在用什么编辑器?您可以尝试内置的“开发者控制台”或

你需要它做什么?字段的最高顺序无关紧要,在RESTAPI查询中,通过查找获取的值将作为JSON子对象,因此始终有一种方法可以准确地确定哪个值来自哪个关系

在开发人员控制台中,尝试运行此命令并检查它是否解决了您的恐惧:

System.debug(JSON.serializePretty([SELECT 
    ApprentiNom__c, ApprentiPrenom__c, 
    Apprenti__r.Date_de_naissance__c, 
    
    MaitreApprentissageNom1__c, MaitreApprentissagePrenom1__c, 
    Maitre_d_apprentissage__r.Date_de_naissance__c
FROM Contract]));

然后添加
Maitre\u d\u apprentissage\u\r.LastName
查询,看看有什么变化,什么保持原样。

谢谢你的回答,我正在使用它来开发我的查询。我们还不知道是使用APEX还是RESTAPI。我们使用Node.js查询SalesForce。不管怎样,正如你所说,我们会有办法得到我们想要的。我将在周一尝试您的解决方案(我之前无法尝试),之后再回来:)是的,Workbench显示“父”关系查询(您使用点“向上”的查询)的行为有点滑稽。别担心,你可能会没事的,试试我的版本或在工作台中使用“查看为:批量CSV”例如,并在Excel中查看。似乎“开发人员控制台”给了我正确的结果。谢谢:)