我想创建一个时间表页面,将所有时间表组合在一起(即,在两个项目之间分配时间表,然后创建两个时间表记录)。
所以,我想根据开始日期将时间表分组一周,然后根据资源显示分组结果
像 截止日期 - 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());
}
}
答案 0 :(得分:0)
首先在查询编辑器中微调您的查询。您可能应该阅读SUM(),MAX()等聚合函数和GROUP BY子句。
我很难弄清楚你的所有数据(比如什么是“资源”?Timesheet_Header记录的所有者?)但这个相当类似的查询应该会给你一些想法:
SELECT CloseDate, Account.Name, SUM(Amount) amount
FROM Opportunity
GROUP BY CloseDate, Account.Name
我的开发者版本的结果:
你需要WHERE子句将它限制在同一周但仍然 - 这是什么? 如果天数不完全匹配(在您的方案中似乎不太可能),您可以使用the date functions中的一些。
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查看我的答案,或者只关注Google如何处理汇总查询结果。
如果您不想进行汇总查询,那么它仍然可行。
想想你的独特钥匙是什么。我会说周(ok,可能是Date字段)和资源(无论是什么)的组合。甚至可能只是资源,因为你希望在同一周显示数据。
价值观? List<something>
其中包含项目名称和总小时数。我仍然使“某事”成为一个帮助包装类,包括字符串(项目名称),id(构造链接)和数值(总小时)。
一旦你有这样的设计,就开始构建一个Map<string, List<wrapper>>
,其中字符串是资源或资源+周。