Series60のPIM

Series60のPIMはPhoneBook(アドレス帳)とAGENDA FILE(スケジュール、ToDo)に分かれています
今回は、AGENDAの仕組みについて見ていきます。

Agendaのサンプルです(確認済です)

TTime today(TDateTime(2003,EMay,27,0,0,0,0));

当日を設定

CAgnModel* model;
RFs theFs;
RAgendaServ* theServer = RAgendaServ::NewL();

モデルの定義

theServer->Connect();
theFs.Connect();

Agendaサーバーへ接続
ファイルサーバーへ接続

model = CAgnModel::NewL(NULL);
model->SetServer(theServer);
model->SetMode(CAgnEntryModel::EClient);

modelの作成
サーバーへの接続

TRAPD(error,(model->OpenL(_L("C:\\System\\Data\\Calendar"),660,900,1000)));
if (error != KErrNone)
{
theFs.Close();
theServer->Close();
User::Leave(error);
}
theServer->WaitUntilLoaded();

CalendarDBを開く
WaiteUntilLoadedを呼ばないと
うまく読めないことがある

TAgnDayFilter filter(model);
TTime startDate(TDateTime(2003,EMarch,25,0,0,0,0));
TTime nextDate = model->NextDayWithInstance(today,filter,startDate);
if (nextDate == Time::NullTime())
以降の処理をしないようにする(予定が無い状態で年末を参照しようとすると
 NullTimeが帰ってきます

フィルターの設定

NullTimeの処理を忘れずに入れてください
これが不具合となりました

CAgnDayList* list =
   CAgnDayList::NewL(nextDate);
model->PopulateDayInstanceListL(list,filter,today);

リストの作成

for(TInt j=0; j < list->Count(); j++) {
TAgnInstanceId instanceId = (*list)[j];
CAgnEntry* entry=model->FetchInstanceL(instanceId);

リストからエントリーの読み出し

if (entry->Type() == CAgnEntry::EEvent) {
}
if (entry->Type() == CAgnEntry::EAppt) {
}
if (entry->Type() == CAgnEntry::ETodo) {
}

アイテムの読み出し

アイテムの種類による処理
EEvent:ノート
EAppt:会議
ETodo:ToDo
EAnniv:記念日(休日?)

delete entry;
}

エントリーの開放

// clean up
theFs.Close();
theServer->Close();
delete theServer;

ビューの削除
各種クローズ

Agenda FileのAPIから持ってきたサンプルを上記の様に修正したら動きました

追記

AgendaにはCAgnAppt,CAgnEvent,CAgnTodo,CAgnAnniがありますそれぞれ(会議、メモ、TODO,記念日)に
対応しています。
祝日はSymbian OSでCAgnEventのCAgnCategoryでEHOLIDAYと定義されています。
しかし、702NK(6630)のカレンダーでは未使用となってます。
VCALフォーマットから流し込んであげればカテゴリー(祝日を含む)を利用できますが、
Outlookとの連動もされませんので、どうかと思います。

http://www.geocities.jp/e4840/702NK/develop/sono4.html