Apex:重复两次

时间:2017-05-17 14:20:36

标签: salesforce visualforce apex

我有一个带有standardController的visualforce页面到自定义对象。 我想从一个事件(Event__c)获得所有订单(Orders__c)。我从优惠开始(Offer__c)

优惠是事件的主要细节,事件与订单的主要细节。

我尝试了以下两个代码:

<apex:page standardController="Caterer_Offer__c" sidebar="false" showHeader="false" >
<apex:repeat var="events" value="{!Caterer_Offer__c.Event__r}">
    {!events.Name}
    <apex:repeat var="orders" value="{!events.Orders__r}">
        <!-- {!orders.Name}-->
    </apex:repeat>
</apex:repeat>

在此处,开发者控制台中的错误消息是:

&#34;聚合关系用于一个不受支持的复杂表达式,其中包含&#39; Event__r.orders__r&#39;&#34;&#34;

然后......然后我有保存事件并使用新变量来重复&#34;重复&#34;所有订单。我没有收到任何错误消息,但Salesforce中出现错误

<apex:page standardController="Caterer_Offer__c" sidebar="false" showHeader="false" >
<apex:repeat var="events" value="{!Caterer_Offer__c.Event__r}">
    {!events.Name}
    <apex:variable var="e" value="{!events}"/>
    <apex:repeat var="orders" value="{!e.Orders__r}">
        <!-- {!orders.Name}-->
    </apex:repeat>
</apex:repeat>

  

错误消息:通过SOQL检索SObject行而不查询   请求的字段:Event__c.Orders__r

我无法解释它并在几个小时后开始工作......

2 个答案:

答案 0 :(得分:0)

标准控制器的记录将仅包含您正在使用它的visualforce页面中引用的字段。在这些情况下,您可能需要使用自定义控制器并扩展标准控制器的功能。标准控制器addFields()方法允许您将其扩展到顶点代码中所需的字段。

我可以找到类似的解决方案here

答案 1 :(得分:0)

我不确定你的问题哪个对象是父记录,哪个是孩子,但我的回答是基于Caterer_Offer__c是Event__c的父亲,而Event__c是Order__c的父亲,所以您可以循环通过所有订单参加Catered Offer的活动,这是我认为您想要做的。

简而言之,您尝试做的事情无法以您尝试的方式完成,因为您实际上是在尝试执行两级深度的子​​聚合查询。从本质上讲,你正在尝试:

  

[SELECT Name,(SELECT Name,(SELECT Name FROM Orders__r)FROM Events__r)FROM Caterer_Offer__c];

但是,salesforce仅允许聚合子查询一级深入,而不是更多。因此,您必须添加一个扩展程序,该扩展程序可能会在某个事件上延迟加载Orders,并在链接单击或按钮单击时重新呈现部分页面。在这种情况下,您将为Caterer_Offer__c和子Events__c创建Visualforce页面,然后从一些使用所选Event的id调用扩展名的用户操作加载子Orders。

但是对于你特别询问的错误,可能是:

<apex:page standardController="Caterer_Offer__c" sidebar="false" showHeader="false" >
    <apex:repeat var="event" value="{!Caterer_Offer__c.Events__r}">
        {!event.Name}
        <apex:repeat var="order" value="{!event.Orders__r}">
            {!order.Name}
        </apex:repeat>
    </apex:repeat>
</apex:page>

但由于salesforce中上述单一深度子聚合查询限制,这又不可能