我有一个字符串列表time1,其值为(00:00 AM,00:30 AM,01:00 AM,01:30 AM ......... ..所以一直到晚上11:30)
我还有一个自定义对象预约_c的列表appList。
此列表仅包含设定约会的记录
即如果约会时间设定为上午8点至上午8点30分和上午10点至上午11点,那么它只会保留这2条记录
我需要创建一个网格或表来显示从凌晨00:00到晚上11:30的当天约会。
我需要在time1中读取每一行并检查appList中是否存在与该时间相对应的匹配,如果找到它然后我需要显示appList中的详细信息,否则它应该显示为空闲时间。我还需要将它存储在列表中,以便我可以在VF页面中使用它。我该怎么定义这个清单? 我可以让列表将时间存储在一列中,并在其他列中列出约会对象
有更好的方法来解决这个问题吗?
答案 0 :(得分: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>
希望这会给你一些想法并让你走上正确的道路!