当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。

テクてく Lotus 技術者 Slack に参加しよう!

2013年3月3日日曜日

NotesCalendar クラスについて

皆さん、こんにちは!恒例の日曜ブログの時間です。(でも、きっと読むのは、月曜日だよなぁ)
諸事情により、私は現在、平日の日中にブログを執筆できないので、このように週末に書いているのです。
もっとも、普通に仕事をしていれば、日中にブログ記事を書いている余裕はないはずなので、あまり気にはしていません。

ということで、本題に入りますが、
にほんブログ村 IT技術ブログへ
をクリックしてからにしましょう。少しはクリックしてくれる方が増えましたが、まだまだ足りません。
Notes/Dominoの記事を探して迷い込んだ貴方!ちゃんとクリックしてから出て行ってくださいね。



では、本題です。
今日は、IBM Notes/Domino 9.0に関することです。
新しいクラスとしてNotesCalendarができましたよ!という話をどこかで聞いたことがあるかと思います。
でも、それが一体、どのようなものなのか?何ができるのか、どうやって使うのか?などの情報がほとんど見当たりません。
なので、当ブログで少しずつ見ていきます。
もちろん、まだベータ版しか手元にありませんので、リリースされた時には「ガラッと」変わっている可能性もありますので、ご容赦ください(リリースされたら、ちゃんと検証しなおしますって)。

まず・・・NotesCalendar クラスとは?
少なくとも、XPages に搭載されている JavaScript クラスの一つであることは間違いありません。
下図は、Domino Designer のヘルプ画面です。「IBM Domino Designer XPages Reference」というカテゴリの中にNotesCalendar があるのが分かるでしょうか?
IBM Domino Designer のヘルプ

ここで、LotusScript クラスのカテゴリを見ましたが、そこにはNotesCalendarという文字は見当たりませんでした。
では、LotusScriptでは、NotesCalendarクラスは使えないのでしょうか?
いいえ。実はLotusScript でも使えるのです。まぁ、いつものことですね。そう、マニュアルが間に合ってないだけのことです。
ただし、マニュアルを作らず、そのまま隠しのクラスとしてしまう可能性もありますので、ここは実際のリリースをお待ちください。

それで、NotesCalendar クラスとは何なのか?
ノーツカレンダーのエントリに対してRead/Write することができます。
Readする場合、iCalendar 形式で結果が取得されます。
Notes/Domino独自のフォーマットではなく、スケジュール標準フォーマットなので、いろいろなプログラムとの相互アクセスができる!と考えれば、何の問題もないでしょう。


では、どうやって使うのか?
今回は、ヘルプにあったサンプルを元に、ノーツカレンダーのエントリを取得するというものを作成してみました。
Dominoサーバ上にノーツDBを作成します。
home.xspというXPageを作成します。
「Button」と「Multiline Edit Box」コントロールを一つずつ配置します。
「Multiline Edit Box」 は、RequestScopeのstatusという変数にバインドしておいてください(下図)。
Multiline Edit Boxのバインド先

「Button」のイベントに次のコードを記述します。
var dbdir:NotesDbDirectory = session.getDbDirectory("");
var maildb:NotesDatabase = dbdir.openMailDatabase();
var cal:NotesCalendar = session.getCalendar(maildb);
var dt1:NotesDateTime = session.createDateTime( "2013/03/02 00:00:00" );
var dt2:NotesDateTime = session.createDateTime( "2013/03/02 23:59:59" );

var entries:java.util.Vector = cal.getEntries(dt1, dt2);
for (i = 0; i < entries.size(); i++) {
    var cale:NotesCalendarEntry = entries.elementAt(i);
    requestScope.status = requestScope.status + cale.read() + "\n";
    cale.recycle();
}
03行目で、ログインユーザのメールDBからカレンダー情報を取得しています。
07行目では、04、05行目で指定した日付の間のカレンダーエントリを取得しています。エントリが複数作成されている可能性があるため、java.util.Vectorというデータ型が返されるようになっています。
08~12行目では、一つ一つのカレンダーエントリの処理を行っています。
09行目で、カレンダーエントリを取り出して、10行目でその内容を読んで(cale.read())、requestScope.statusに追加しています。
こうすることで、ボタンをクリックすると、カレンダーエントリの内容をMultiline Edit Boxに表示します。

下図は実際に実行した結果です。
NotesCalendar クラスのサンプルの実行結果

何やら、見慣れない形で出力されています。
今回、該当するカレンダーエントリは1件だけにしておいたので、1件分のデータが出力されているのですが、これがiCalendar形式のデータということになります。

メモ帳などにこのデータを貼り付けて、拡張子を「ics」として保存すれば、iCalendar形式のファイルになります。
ノーツクライアントで開けば、カレンダーにインポートすることもできます。
(ただし、そのまま実行しても、すでに同じエントリがカレンダーにあるので、確認はできません。予め、ノーツのカレンダーエントリを削除してから実行するとわかりますよ)


といったところで、今回は終わりです。
他のメソッドやプロパティは次回以降に・・・






【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします!
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: