我可以在salesforce中拥有包含多种数据类型的列表

时间:2011-09-21 04:27:29

标签: salesforce apex-code visualforce

我有一个字符串列表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页面中使用它。我该怎么定义这个清单? 我可以让列表将时间存储在一列中,并在其他列中列出约会对象

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

1 个答案:

答案 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>

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