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

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

2013年3月17日日曜日

NotesCalendarクラスを使ってカレンダーエントリを登録してみよう

皆さん、こんにちは。恒例の日曜ブログです。

3/15(金)のテクてくで無茶ブリがありましたが、さらっと流します。
というのも、ちょっと調べてみたところ、実装そのものはかなり簡単でしたが、何を設定してよいのか見当がつかなかったのでした。
それに、他に書きかけになっている記事もあったので、そちらを優先させた次第です。


ということで、にほんブログ村 IT技術ブログへをクリックして本題に進みましょう。


今回は、前々回に書いたNotesCalendarクラスの記事の続報です。
その時は、カレンダーエントリを取得してくるということをしましたが、今回は画面に入力した内容をカレンダーエントリとして自分のカレンダーに登録してみます。

ノーツアプリケーションは、この間のものをそのまま使用します。
次に、書き込み用のページとして、writeというXPageを作成します。
このページに、以下のコントロールを追加します。
StartDate「Date Time Picker」 Display Formatは「Date Only」 requestScope.StartDateにバインドする
StartTime「Date Time Picker」 Display Formatは「Time Only」 requestScope.StartTimeにバインドする
EndDate「Date Time Picker」 Display Formatは「Date Only」 requestScope.EndDateにバインドする
EndTime「Date Time Picker」 Display Formatは「Time Only」 requestScope.EndTimeにバインドする
Subject「Input Box」 requestScope.Subjectにバインドする
Categories「Input Box」 requestScope.Categoriesにバインドする
Location「Input Box」 requestScope.Locationにバインドする
Public/Private「Radio Button Group」 Vaueは「PUBLIC/PRIVATE」の2つ requestScope.Privateにバインドする


次に、カレンダーエントリをセットするためのボタンを配置します。
下図が、各コントロールを配置した画面です。

入力用画面の作成

ここまで来たら、あとはボタンにクリックイベントを仕掛けるだけです。
// ログインユーザのメールDB取得
var dbdir:NotesDbDirectory = session.getDbDirectory("");
var maildb:NotesDatabase   = dbdir.openMailDatabase();
var cal:NotesCalendar      = session.getCalendar(maildb);

// 日付のフォーマット決定
var formatymd = new java.text.SimpleDateFormat( "yyyyMMdd" );
var formathms = new java.text.SimpleDateFormat( "HHmmss", Locale.JAPAN );

// カレンダーエントリの日時の取得
var tdy:java.util.Date = formatymd.format( new java.util.Date() );
var dt1:java.util.Date = formatymd.format( requestScope.StartDate );
var dt2:java.util.Date = formatymd.format( requestScope.EndDate );
var tm1:java.util.Date = formathms.format( requestScope.StartTime );
var tm2:java.util.Date = formathms.format( requestScope.EndTime );

// 画面の入力情報の取得
var sbj:String = requestScope.Subject;
var cat:String = requestScope.Categories;
var loc:String = requestScope.Location;
var prv:String = requestScope.Private;

// iCalendar Formatのデータを作成
var icale:String =
    "BEGIN:VCALENDAR\n" +
        "BEGIN:VTIMEZONE\n" +
            "TZID:Japan\n" +
            "BEGIN:STANDARD\n" +
                "DTSTART:19390101T000000\n" +
                "TZOFFSETFROM:+0900\n" +
                "TZOFFSETTO:+0900\n" +
                "TZNAME:JST\n" +
            "END:STANDARD\n" +
        "END:VTIMEZONE\n" +
        "BEGIN:VEVENT\n" +
            "DTSTART;TZID=Japan:" + dt1 + "T" + tm1 + "00\n" +
            "DTEND;TZID=Japan:" + dt2 + "T" + tm2 + "00\n" +
            "TRANSP:OPAQUE\n" +
            "CATEGORIES:" + cat + "\n" +
            "CLASS:" + prv + "\n" +
            "SUMMARY:" + sbj + "\n" +
            "LOCATION:" + loc + "\n" +
        "END:VEVENT\n" +
    "END:VCALENDAR\n";

var cale:NotesCalendarEntry = cal.createEntry( icale );
1~4行目で、ログインユーザのカレンダーを取得しています。
6~8行目は、iCalendar フォーマットで日付データを登録する際の手間を省くためのものです。
10~15行目では、画面の入力された開始/終了日時のデータを取得しています。サンプルなので、エラーチェックなどは一切していません。
17~21行目では、件名やカテゴリなどのカレンダーエントリの入力情報を取得しています。
すべてrequestScope変数経由で取得しています。
23~44行目がiCalendarフォーマットのデータを作成している個所です。
26~34行目は入力データが日本時間であることを示すためのものです。この設定を行わないと、グリニッジ標準時でデータが作成されてしまうようなので気を付けましょう。
35~44行目が実際のデータを登録しているところです。
46行目で、カレンダーエントリとして作成している個所です。

ボタンのイベントオプションで「全部更新」等にしておけば、カレンダーエントリを保存する等の処理を記述する必要はありません。

これを実行すると、画面に入力した内容でカレンダーエントリが作成されます。
ちゃんと、空き時間の設定もしてくれるので、このサンプルを使ってエントリを登録した後、ノーツから、会議招集をしても、予定済みになってくれます
(iCalendar の説明によれば、38行目の設定がしてあるからだと思われます)。

これで、XPages からカレンダーにエントリを作成するのが簡単になりますね。
面白いので、是非チャレンジしてみましょう。


今日はこれくらいで。

あ、無茶ブリの、Embedded Experienceはもうちょっとしてからやります。
でも、すでに試したよ!とか、これから試すぞ!という方は、是非やってください。
ついでに、その成果を発表してください!


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

0 件のコメント: