我想要创建一个时间表页面,将所有的时间表组合在一起(也就是说,当时间表在两个项目之间分了一个星期之后,就创建了两个时间表记录)。
因此,我希望根据开始日期对一周的时间表进行分组,然后根据资源显示分组结果。
类似于周结束日期-2012年1月3日;资源名称- abc
所有这些细节都可以在时间表记录中找到。
以下是我的控制器:
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());
}
}发布于 2014-01-14 22:13:32
首先,在查询编辑器中微调查询。您可能应该阅读有关SUM()、MAX()等聚合函数和GROUP子句的内容。
我很难弄清楚你所有的数据(例如,什么是“资源”?Timesheet_Header记录的所有者?)但是,这个非常类似的查询应该会给您一些想法:
SELECT CloseDate, Account.Name, SUM(Amount) amount
FROM Opportunity
GROUP BY CloseDate, Account.Name我的开发人员版本的结果:

你需要什么条款才能把它限制在同一周,但还是-这是什么?如果日期不完全匹配(在您的场景中似乎不太可能),您可以使用一些日期函数。
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。
https://stackoverflow.com/questions/21117115
复制相似问题