首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Salesforce : Visualforce页面中的组数据

Salesforce : Visualforce页面中的组数据
EN

Stack Overflow用户
提问于 2014-01-14 15:19:16
回答 1查看 2.1K关注 0票数 1

我想要创建一个时间表页面,将所有的时间表组合在一起(也就是说,当时间表在两个项目之间分了一个星期之后,就创建了两个时间表记录)。

因此,我希望根据开始日期对一周的时间表进行分组,然后根据资源显示分组结果。

类似于周结束日期-2012年1月3日;资源名称- abc

  • 项目名称-test,共计16小时
  • 项目名称- test2,共计20小时

所有这些细节都可以在时间表记录中找到。

以下是我的控制器:

代码语言:javascript
复制
public class TimesheetHeader {

    public Map<Date,Set<pse__Timecard_Header__c>> getTimecardMap(){
    return timecardMap;
    }

   public Map<Date,Set<pse__Timecard_Header__c>> timecardMap = new Map<Date,Set<pse__Timecard_Header__c>>();
   Set<pse__Timecard_Header__c> timecardSet = new Set<pse__Timecard_Header__c>(); 

   Date tcdate;

    public TimesheetHeader(ApexPages.StandardSetController controller) {

     List<pse__Timecard_Header__c> timecardheader = [Select f.Id,f.Name,f.pse__Start_Date__c,f.pse__End_Date__c,f.pse__Project__r.Name,f.pse__Status__c,f.pse__Total_Hours__c From pse__Timecard_Header__c f ]; 

         for(pse__Timecard_Header__c tc :timecardheader ){
          tcdate = tc.pse__End_Date__c;
          System.debug('tcdate---->'+tcdate);

           if(timecardMap.containsKey(tcdate)){
          Set<pse__Timecard_Header__c> temp = new Set<pse__Timecard_Header__c>();
          temp = timecardMap.get(tcdate);
          temp.add(tc);
          timecardMap.put(tcdate,temp);
          temp.clear();
          }
         else{
         timecardSet.add(tc);
         timecardMap.put(tcdate,timecardSet);

        }       
    }
    System.debug('timecardMap------>'+timecardMap.keySet());
   } 
}
EN

回答 1

Stack Overflow用户

发布于 2014-01-14 22:13:32

首先,在查询编辑器中微调查询。您可能应该阅读有关SUM()、MAX()等聚合函数和GROUP子句的内容。

我很难弄清楚你所有的数据(例如,什么是“资源”?Timesheet_Header记录的所有者?)但是,这个非常类似的查询应该会给您一些想法:

代码语言:javascript
复制
SELECT CloseDate, Account.Name, SUM(Amount) amount
FROM Opportunity
GROUP BY CloseDate, Account.Name

我的开发人员版本的结果:

你需要什么条款才能把它限制在同一周,但还是-这是什么?如果日期不完全匹配(在您的场景中似乎不太可能),您可以使用一些日期函数

代码语言:javascript
复制
SELECT CALENDAR_YEAR(CloseDate) cy, CALENDAR_MONTH(CloseDate) cm, WEEK_IN_MONTH(CloseDate) cw, SUM(Amount) amount
FROM Opportunity
GROUP BY CALENDAR_YEAR(CloseDate), CALENDAR_MONTH(CloseDate), WEEK_IN_MONTH(CloseDate)

无论如何--你应该以显示你想要的东西的查询结束。

下一步是在Visualforce中显示数据。这些“聚合查询”返回一个名为AggregateResult的奇怪内容。您的工作是从列中提取列,并将它们映射到某些助手类变量。这个类至少应该有标记为public get;的字段。

我懒得全部输入;)看看我在https://salesforce.stackexchange.com/questions/21978/display-the-related-aggregated-value-on-a-vf-page上的答案,或者只是谷歌一下关于如何处理聚合查询结果的问题。

如果您不需要聚合查询,那么它仍然是可行的。

想想你独特的钥匙是什么。我认为这是一个星期(好的,日期字段可能)和资源(不管是什么)的组合。甚至可能只是资源,因为您希望显示同一周的数据。

值?List<something>,其中保存项目名称和总时数。我仍然会将“string”作为一个帮助器包装类,由string(项目名称)、id (用于构造链接)和数字值(总时数)组成。

一旦有了这样的设计,就开始构建一个Map<string, List<wrapper>>,其中字符串要么是资源,要么是resource+week。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21117115

复制
相关文章

相似问题

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