1

値を含む文字列Listtime1があります(00:00 AM、00:30 AM、01:00 AM、01:30 AM ........... 11:30 PMまでなど)

カスタムオブジェクトappointment__cのリストappListもあります。

このリストには、設定された予定の記録のみが保持されます

つまり、予定が午前8時から午前8時30分と午前10時から午前11時に設定されている場合、これら2つのレコードのみが保持されます。

午前00:00から午後11:30までの日の予定を表示するグリッドまたはテーブルを作成する必要があります。

time1の各行を読み取り、appListにその時間に対応する一致があるかどうかを確認する必要があります。見つかった場合は、appListから詳細を表示する必要があります。そうでない場合は、時間に対して無料で表示されます。また、VFページで使用できるように、リストに保存する必要があります。このリストをどのように定義する必要がありますか?リストに時間を1つの列に保存させ、予定オブジェクトのリストを他の列に配置させることはできますか?

これにアプローチするためのより良い方法はありますか?

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 に答える