我有一个带有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
我无法解释它并在几个小时后开始工作......
答案 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中上述单一深度子聚合查询限制,这又不可能