1

我有一个字符串 List time1 的值(00:00 AM,00:30 AM,01:00 AM,01:30 AM............直到晚上11:30)

我还有一个自定义对象约会__c 的列表 appList。

此列表仅包含已设置约会的记录

即如果约会设置为上午 8 点 - 上午 8:30 和上午 10 点 - 上午 11:00,那么它将只保存这 2 条记录

我需要创建一个网格或表格来显示当天上午 00:00 到晚上 11:30 的约会。

我需要在 time1 中通读每一行,并检查 appList 中是否存在与该时间对应的匹配项,如果找到,则我需要显示 appList 中的详细信息,否则它应该显示为空闲时间。我还需要将它存储在一个列表中,以便我可以在 VF 页面中使用它。我将如何定义这个列表?我可以让列表将时间存储在一个列中,并将约会对象列表存储在另一列中吗

有什么更好的方法来解决这个问题?

4

1 回答 1

5

在这种情况下,我将使用一个类并拥有该类的对象列表:

class CTimeSlot
{
    public Time           tStart         {get; set;}
    public Appointment__c sAppointment   {get; set;}

    public CTimeSlot(Time startTime)
    {
        tStart = startTime;
        Appointment__c = null;
    }
}

// ** snip ** 

list<CTimeSlot> liTimeSlots = new list<CTimeSlot>();

// ** snip ** loop through times, and for each add an entry to the list

    CTimeSlot newSlot = new CTimeSlot(loopTime);
    liTimeSlots.add(newSlot);
    mapTimeToSlot.put(loopTime + '', newSlot);
}

// ** snip ** when running through your query results of Appointment__c objects:
for(Appointment__c sAppointment : [select Id, Time__c from Appointment__c where ...])
{
    if(mapTimeToSlot.get(sAppointment.Time__c) != null)
    {
        mapTimeToSlot.get(sAppointment.Time__c).sAppointment = sAppointment;
    }
}

然后,您可以用 CTimeSlot 的实例填充此列表,并且对于您有约会的时间,将其设置为实例上的 sAppointment — 这也可以通过使用插槽映射来更容易,映射时间(作为字符串)到 CTimeSlot。

在页面中,您可以重复列表:

<table>
<apex:repeat var="slot" value="{!liTimeSlots}">
    <tr>
        <td><apex:outputText value="{!slot.tStart}"/></td>
        <td>
            <apex:outputText value="{!IF(ISNULL(slot.sAppointment), 'Free', slot.sAppointment.SomeField)}"/>
        </td>
    </tr>
</apex:repeat>

希望这会给你一些想法,让你走上正确的道路!

于 2011-09-21T05:28:35.713 回答