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

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

2013年3月20日水曜日

XPages Extension Library Japan ベータ3をリリースしました!

皆さん、こんにちは。今日(2013年3月20日)は春分の日です。花粉症なのに、マスクをしないで出かけてしまって、帰ってきてからぐずぐずになってます。困ったものですね。

もうすぐ、IBM Notes/Domino 9.0 Social Editionが出荷されますが、その前にまたまた告知があります。
もう皆さんご存知ですよね。XPages Extension Library Japan プロジェクト。先月も当ブログで告知したあのプロジェクト(XPages Extension Library Japan プロジェクトをご存知ですか? )ですね。

XPages Extension Library には3つのサンプルデータベースがあり、それら一つ一つを日本語翻訳しているということはご存知ですよね。
ということで、今回は3つ目のノーツアプリケーション(XPagesSBT.nsf)を翻訳しました。
このノーツアプリケーションは、「XPages からクラウドサービスやソーシャルネットワークサービスにアクセスします。」というもので、
  • IBM Sametime と IBM Connections (Lotus Greenhouse)
  • LotusLive (IBM SmarterCloud) ・・・ 利用にあたり組織管理者の権限が必要
  • Dropbox
  • Twitter
  • Generic Services (Stackoverflow と Redmine)
  • Utilities (User Bean, @Functions, JSON DataNavigator)
へのアクセステストができます。
※上記のテストを行う場合、それぞれのソーシャルサービスへアクセスするためのアカウントが必要になります。(2013/03/21 追記)
IBM Notes/Domino 9.0 Social Editionを使わなくても、これだけのことができる!というのはすごいですね。こうなると、Notes/Domino 9.0 SEは、どこまで何ができるのだろうか?がとても気になります。


なお、ダウンロードのURLはこちらです!
XPages Extension Library Japan
ベータ2をダウンロードした人は是非、続けてベータ3をダウンロードしてください。
そして、まだ一度もダウンロードしたことがない。という方は、Notes/Domino 9.0 SEを入手する前に是非、ダウンロードして使ってみてください。
Notes/Domino 9.0 SEがより一層楽しめるようになりますよ!


今後のプロジェクトの展望は、前回話したように、XPages の初心者向けに「Demonstration Application for XPages」の日本語翻訳化を進めていきます。こちらは、Notes/Domino 9.0 SEのみでの動作を予定していますので、Notes/Domino 9.0 SEでのXPagesの学習にも利用できるようになるかと思います。

皆さんが応援していただければ、その分、メンバーのやる気も出て、それだけ早いリリースにつながりますので、是非、応援&ご協力をお願いします。


それでは、今日はこの辺で・・・

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 カスタマイズとセキュリティ強化 - 株式会社エフ

2013年3月10日日曜日

Lotus DominoをWindows Server 2008で起動する際の注意事項

今日は自分のための備忘録記事です。

私は、業務上、何度もLotus Dominoのテスト環境を作成します。
バックアップを作成して戻せばよいという話もあるのですが、必要なバージョンが微妙に異なっていたりするので(Fixpackの有無等)、面倒でもその都度、インストールしなおしています。

そんな中でも、Windows Server 2008 にLotus Domino 8.5.x をインストールする際に、いつも忘れてしまうことがあります。

Windows Server 2008上でLotus Domino をサービスとして起動する場合、追加の設定が必要なんですね。
IBMのサポートサイトにもWindows Server 2008 で Lotus Domino をサービスとして起動できないという記事で載っているので、すぐにわかるのですが、やはりきちんと覚えよう!ということで、記事として残しておきます。


そもそも、Windows Server 2008 上でLotus Domino 8.5を通常のプログラムとして起動する場合には、このエラーは発生しません。
サービスとして起動する場合にのみ発生する可能性があります。

サービスとして起動すると、サーバーコンソール画面が表示されないので、正常に起動できているかどうかも分かりにくいんですね。ただ、クライアントから接続できないので、あれ?と思って確認すると、サービスが終了しているという・・・

このような状況に陥ったら、次の手順で確認・修正しましょう。

1.サーバのnotes.iniを確認・修正する
 (Lotus Dominoのプログラムフォルダにある)Lotus Dominoのnotes.iniを開いて、
 TCPIP_ControllerTcpIpAddress=で始まる行があるかどうかを探す。
 ない場合は、
 TCPIP_ControllerTcpIpAddress=「Lotus DominoがインストールしてあるPC」のIPアドレス:2050
 と入力する。
 例)TCPIP_ControllerTcpIpAddress=192.168.1.100:2050

2.サーバのdconsole.iniを確認・修正する
 (Lotus Dominoのデータフォルダにある)Lotus Dominoのdconsole.iniを開いて、
 [DominoConsole]
 セクションに
 LocalHost=
 で始まる行があるかどうかを探す。
 ない場合は、
 LocalHost=「Lotus DominoがインストールしてあるPCのコンピュータ名」:2050
 と入力する。
 例)LocalHost=DominoServer01:2050

これでOKです。
なお、dconsole.iniは、一度でも「Lotus Domino Console」を実行しないと作成されません。

Lotus Domino Consoleをクライアントで実行する場合は、「2.サーバのdconsole.iniを確認・修正する」の操作は不要です。
クライアントPCで、Lotus Domino Consoleを実行して、 
[ファイル][サーバーを開く...]メニューを実行します。
すると、「サーバーを開く」ダイアログが表示されるので、接続するサーバー名、管理者として設定されているノーツユーザ名とパスワード(HTTPパスワード)を入力して、[OK]をクリックします。
Lotus Domino Consoleのサーバーを開くダイアログ

これで、Lotus Dominoサーバに接続できるようになります。
これで終了すると、今入力した情報がdconsole.iniに記録され(パスワードを除く)、次回からは選択できるようになります。


うん。これでもう忘れないし、忘れても大丈夫!
たまにはこんな記事もいいでしょ?

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 カスタマイズとセキュリティ強化 - 株式会社エフ