首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Salesforce Apex和Visualforce

Salesforce Apex和Visualforce
EN

Stack Overflow用户
提问于 2021-03-05 13:28:32
回答 1查看 344关注 0票数 1

我正在研究visualforce和a,我遇到了一种情况,我想将3种不同的表组合在一起,在这些表中,杂工的名字很常见。而且,handyman自定义对象上的specialities自定义字段是一个多选择列表,因此我不能直接从任何openorder或closeorders聚合查询中查询此字段,因为我们不能按特性(即多选择列表)进行分组。如果有人能帮我解决这个问题,我会很高兴的。

注意: orders自定义对象在杂工上有查找字段。

可视化页面代码

代码语言:javascript
复制
<apex:page standardController="Orders__c" extensions=“HandymanInfo">
  <apex:form>
   <apex:pageBlock>
     <apex:pageBlockSection columns="6" title=“ Handyman Tables">
          <apex:pageBlockTable value=“{!lsthandyman}” var=“h”>
            <apex:column value=“{!h.Name}">
                <apex:facet name="header”>Handyman Name</apex:facet>
        </apex:column>
            <apex:column value=“{!h.Specialities__c}" >
            <apex:facet name="header">Specialities</apex:facet>
            </apex:column> 
            </apex:pageBlockTable>
             
            <apex:pageblocktable value=“{!openorders}" var="oo">  
             <apex:column value="{!oo[’n']}"><apex:facet name="header”>Handyman Name</apex:facet></apex:column> 
             <apex:column value="{!oo[’sumopen']}"><apex:facet name="header”>Total Orders Opened</apex:facet></apex:column>                                                                 
            </apex:pageblocktable>
                
              <apex:pageBlockTable value=“{!closeorders}" var="co">
                  <apex:column value="{!co[’n']}"><apex:facet name="header”>Handyman Name</apex:facet></apex:column> 
                    <apex:column value="{!co[’sumclosed']}"><apex:facet name="header">Total Orders Closed</apex:facet></apex:column> 
            </apex:pageBlockTable>
                  
        </apex:pageBlockSection>
    </apex:pageBlock>
</apex:form>
</apex:page>

控制器类代码:

代码语言:javascript
复制
    public class HandymanInfo {
    public List<Handyman__c> lsthandyman {get;set;}
    Public List<AggregateResult> openorders {get; set;}
    Public List<AggregateResult> close orders {get; set;}

    
public HandymanInfo(ApexPages.StandardController controller) {
 
    lsthandyman = [SELECT Name,Specialities__c FROM Handyman__c ORDER BY Name ASC];
   
        openorders = [SELECT Handyman__r.Name n, COUNT(Name) sumopen FROM Orders__c 
        WHERE ((Status__c='New') OR (Status__c ='Assigned’) OR (Status__c='Accepted') OR 
        (Status__c ='In Progress'))
        GROUP BY Handyman__r.Name
        ORDER BY Handyman__r.Name ASC];
       
        closeorders = [SELECT Handyman__r.Name n, COUNT(Name) sumclosed FROM Orders__c 
        WHERE ((Status__c='Completed') OR (Status__c='In Review’) OR (Status__c ='Paid'))
        GROUP BY Handyman__r.Name
        ORDER BY Handyman__r.Name ASC];
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-05 18:54:57

订单->杂工在查找关系中是连接的还是主细节?点菜可以没有杂工吗?如果这个杂工会被删除--你是希望删除订单,还是想留下“孤儿”?

如果你把它作为主细节,那么你可以把两个汇总字段从订单转到杂工。然后你的控制器变得非常简单,SELECT Name, Specialities__c, OrdersCountOpen__c, OrdersCountClosed__c FROM Handyman__c ORDER BY Name,工作完成。

如果它必须继续寻找..。您可以制作2 Map<Id, Integer>,其中键是杂工的id,值是计数。或者使用子查询欺骗一点,以获得打开的订单,然后运行另一个已关闭的查询。

代码语言:javascript
复制
// make this your class variable
public Map<Id, Integer> closedOrders {get; private set;}

// and then
lsthandyman = [SELECT Name, Specialities__c,
        (SELECT Id FROM Orders__r WHERE Status__c IN ('New', 'Assigned', 'Accepted', 'In Progress'))
    FROM Handyman__c 
    ORDER BY Name ASC];
closedOrders = new Map<Id, Integer>();
// there's no guarantee all handymen have any closed orders and we don't want to display error if map key isn't found. So let's make sure we have something in there even if it's all zeroes
for(Handyman__c h : lsthandyman){
    closedOrders.put(h.Id, 0);
}
// and now let's get some actual closed order numbers
for(AggregateResult ar : [SELECT Handyman__c h, COUNT(Id) cnt
    FROM Orders__c 
    WHERE Status__c IN ('Completed','In Review’,'Paid')
    GROUP BY Handyman__c]){
    closedOrders.put((Id) ar.get('h'), Integer.valueOf(ar.get('cnt')));
}

然后你的视觉力量就会像

代码语言:javascript
复制
<apex:pageBlockTable value=“{!lsthandyman}” var=“h”>
    <apex:column header="Handyman Name" value=“{!h.Name}"/>
    <apex:column header="Specialities" value=“{!h.Specialities__c}"/>
    <apex:column header="# Open" value="{!h.Orders__r.size}" />
    <apex:column header="# Closed" value="{!closedOrders[h.Id]}" />
</apex:pageBlockTable>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66493451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档