Last-modified: 2020-02-06 (木) 10:34:12 (181d)

DateDB.c の、

void ApptGetAppointments (DmOpenRef dbP, DateType date, UInt16 days,
	MemHandle apptLists [], UInt16 counts [])

をコールすると、date で指定した日から、days 分の予定を返してくれます。

apptLists は、日ごとの配列のハンドルで、days 分用意しておきます。
counts は、日ごとの予定数が入ります。同じく、days 分用意しておきます。

これで取得したレコード番号と、DateDB.c の、

Err ApptGetRecord (DmOpenRef dbP, UInt16 index, ApptDBRecordPtr r, 
	MemHandle * handleP)

を使って、予定の詳細を取得します。

注意しなければならないのは、繰り返し予定です。

ApptGetAppointments で取得した予定には、繰り返し予定も含まれています。
ただ、ApptGetRecord で取得した情報は、その日の日付ではなく、繰り返し予定の一番初めの日付が取得できます。なので、表示するときは、ApptGetAppointments で指定した日付を別途覚えておいて、表示にそれを使う必要があります。


   //
   // エラー処理は省略しています。
   //

//
// 指定した日付から指定した日にち分予定を取得
//

   MemHandle   apptLists[MAX_DAYS];
   UInt16      counts[MAX_DAYS];

   // データ取得
   ApptGetAppointments(dbRef, day, days, apptLists, counts);

   // 読み出し
   ApptInfoType*   apptInfoP;
   MemHandle*      apptListsP = apptLists;
   UInt16*         countsP = counts;
   for ( UInt16 i = 0 ; i < days ; i++, apptListsP++, countsP++ ) {
       if ( *countsP > 0 ) {
           apptInfoP = (ApptInfoType*)MemHandleLock(*apptListsP);
           for ( UInt16 j = 0 ; j < *countsP ; j++ ) {
               // 各予定データ取得
               apptInfoP->startTime;
               apptInfoP->endTime;
               apptInfoP->recordNum;
           }
           MemHandleUnlock(*apptListsP);
       }
   } 
//
// レコード番号から予定を取得
//

   MemHandle           h;
   ApptDBRecordType    appt;

   Err err = ApptGetRecord(dbRef, index, &appt, &h);
   if ( err == errNone ) {
       // 各予定データ取得
       appt.when->startTime.hours
       appt.description
       ...
       
       // unlock する。
       // ロックは自動的に行われている模様。
       MemHandleUnlock(h);
   }