1

我想创建一个时间表页面来将所有时间表分组在一起(即,当在两个项目之间添加一周的时间表时,会创建两个时间表记录)。

所以,我想根据开始日期对一周的时间表进行分组,然后还显示根据资源分组的结果

喜欢 WEEK ENDING DATE - 2012 年 1 月 3 日;资源名称 - abc

  • 项目名称 -test ,总小时数 16
  • 项目名称 - test2 ,总小时数 20

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

下面是我的控制器:

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());
   } 
}
4

1 回答 1

0

首先在查询编辑器中微调您的查询。您可能应该阅读 SUM()、MAX() 等聚合函数以及 GROUP BY 子句。

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

SELECT CloseDate, Account.Name, SUM(Amount) amount
FROM Opportunity
GROUP BY CloseDate, Account.Name

我的开发者版的结果:

在此处输入图像描述

您需要 WHERE 子句将其限制在同一周,但仍然 - 这是什么?如果日期不完全匹配(在您的场景中似乎不太可能),您可以使用一些日期函数

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>其中包含项目名称和总小时数。我仍然会将“某物”作为一个辅助包装类,该类由字符串(项目名称)、id(用于构建链接)和数值(总小时数)组成。

一旦你有了这样的设计,就开始构建一个Map<string, List<wrapper>>字符串是资源或资源+周的地方。

于 2014-01-14T22:13:32.150 回答