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

Translate

2014年9月17日水曜日

XPagesで添付したイメージを画面に表示させる

最近、ブログの投稿がされてない!と怒られました。はっはっは・・・
でもね・・・記事を書かせたい(私のモチベーションを上げる)と思うのであれば、コメントくださいね。
役に立ったのか立ってないかだけで構いませんので、 書いてください。匿名でいいんです。
このブログはNotes/Dominoを使っていただいている皆様のために書いています。

ですが、有益な情報なのか、そうでないのかを決めるのは読んでいただいている皆様です。
ぜひ、他の利用者へのフィードバックとしてコメントをください。


想いを吐露したので、少しすっきりしました。ということで?今日もブログを更新しましょう。





XPagesについて質問があったので、それを解決する方法について書いてみます。
NotesアプリケーションをWeb化したことがある人からすると、「なんだよ、こんなの知ってるよ」という内容かもしれませんがお付き合いください。


質問内容は・・・
XPagesアプリケーションで文書に画像ファイルを添付した。
文書を開いた時にその画像ファイルをイメージとして表示させるにはどうすれば良いか?
このイメージは文書のタイトルと同等の扱いとしたい。なので、画像は文書内の目立つ場所に独立して表示させたい。
というものでした。
ノーツクライアントのアプリケーションの場合、クリップボード経由で画像ファイルを貼り付けられたので簡単に実現できますが、XPagesやWebアプリの場合はどうなんでしょう?(下図はノーツクライアントで画像ファイルを貼り付けてみたところ)
ノーツクライアントなら画像を貼り付けられる

考えてみた
Webアプリケーションの場合も考えると大変なので(めんどくさい・・・)、XPagesで実現する方法を考えてみました。
リッチテキストがあるならば、XPagesからもイメージの貼り付けはできますが、これだとその場所にしか表示できません。となると「目立つ場所に独立して表示させたい。」という要件を満たしません。
となると、やはり添付ファイルで実現するのが良いでしょう。


やってみよう
まずは添付ファイルをアップロードできるようにします。
こちらについてはXPagesで添付ファイルの処理をする(アップロード) に記事を書いていますので、そちらを参照願います。
それでは、実際に表示する方法についてみていきましょう。
画像ファイルをイメージとして表示するので、「イメージコントロール」を利用します。
イメージコントロールをドラッグ&ドロップする時に、イメージのリソースをどうするのか選択する画面になりますが、「イメージプレースホルダーの使用」を選択して[OK]をクリックしてください。
「イメージプレースホルダーの使用」を選択

プロパティの中に「イメージソース」という項目があるので、そこの◇をクリックしてスクリプトエディタを開きます。
ここに
document1.getDocument().getUniversalID() + "/$FILE/" + @AttachmentNames()
という式を記述します。
この式でWebアプリケーション上で添付ファイルを指し示すURLを生成しているのです。
「document1」はデータソースの名前なので、ご自身の環境に合わせてください。
document1.getDocument().getUniversalID()は、開いている文書の文書UNIDを指します。
添付ファイルは「$FILE」に格納されているので、 それを定義しています。
@AttachmentNames()は文書内にある添付ファイルの名前を取得してくる関数ですね。

これだけで終わりなのですが、添付する画像ファイルの縦横の長さがまちまちだとそのままのサイズで表示されるので文書ごとに統一感がなくなります。
そこで「高さ」と「幅」に固定値を設定しておきます。ここでは両方とも150ピクセルとしました。
イメージコントロールのプロパティ

実行してみた
実際にXPagesからファイルを添付して開きなおした状態がこちらです。
XPagesで添付ファイルを表示してみた

これの優れているところは、添付されているファイルが画像ファイルであればノーツクライアントから添付しても正しく表示されるという事です(画像を直接貼り付けている場合は不可です)。



注意事項
ここで実現している方法は、文書中に添付ファイルが一つしかないこと、添付ファイルは画像ファイルである事ということが注意点としてあります。
添付するファイルの数を限定する方法については、XPagesで文書保存時に添付ファイルの数を限定させるには で書いていますので、そちらを参照願います。



このようにちょっとした工夫でできますので、色々と試してみてください。
では今日はこの辺で・・・

2014年8月21日木曜日

XPagesでワークスペースを表現してみよう

みなさん、こんにちは。
秋の気配がしたかと思ったのですが、まだまだ暑いですね。気温の上下に影響されて体の調子を悪くしないように気を付けましょう。

さて、今日も始める前にボタンをクリックしてくださいね。
にほんブログ村 IT技術ブログへ


今日の話題はXPagesでワークスペースを表現してみよう!です。

1.ワークスペースのおさらい
Notesクライアントの機能の一つに「ワークスペース」というものがあります。
Notesアプリケーションをアイコン形式で表示するあれですね。
Notesクライアントのワークスペース
そんなワークスペースですが、Notesクライアントでしか使えないという弱点があります。
最近では、Notes Browser Plug-inがありますが、あれはWebブラウザ上でNotesクライアントのBasic版を動かしているようなものなので、Notesクライアントで動いていると判断して良いでしょう。

このワークスペースがWebブラウザ上でも使えたら嬉しいですよね。
ということで・・・またまたOpenNTF.orgから探してきました。あるもんなんですね。こちらのXPages HomePageがそうです。

こちらのアプリケーションは2012年12月が最後の更新となっていますが、Notes/Domino 9.0でも動作しました。
また、純粋なXPagesアプリケーションとして作られているので、余計なものをインストールしたりする必要がないのも特徴です。


2.ダウンロードしよう
では、さっそくダウンロードしてみましょう。
プロジェクトページにある「Downloads/Releases」のタブを開いて、「Release 3.0」をクリックします。すると、「XPages Applications Homepage.zip」というファイルがあるので、それをクリックします。
ダウンロードできたら、適当なフォルダに解凍します。下図がzipを解凍した状態です。
この中にはNotesテンプレート、利用手引書等が入っています。
※この辺りは、OpenNTF.orgのプロジェクトはどれも同じですのでわかりやすいですね。
zipファイルの内容


3.使ってみよう
使い方は簡単です。
zipファイルの中にある「Workspace.ntf」をDominoサーバにコピー&署名して、このテンプレートを元にDominoサーバ上にNotesアプリケーション(~.nsf)を作成するだけです。
作成したら、Dominoサーバの管理者ユーザに[Admin]ロールを付けて、「管理者」のアクセス権を付与します。
※ローカルクライアント上でも動作するのですが、ワークスペースにNotesアプリケーションを登録するにはログインする必要があるので、Dominoサーバ上でのテストをお勧めします。

下図はWebブラウザで、管理者ユーザでログインして開いた時の画面です。
Notesアプリケーションをブラウザで開いてみた

このアプリケーションは以下の機能を持ち合わせています。
  1. アプリケーションのロゴとタイトルの変更
  2. DominoサーバのカタログDB(catalog.nsf)との連携
  3. 共通ワークスペースへのアプリケーション登録と名称の変更
  4. 個人ワークスペースの作成とアプリケーション登録

それでは、一つずつ簡単に紹介していきます。
  1. アプリケーションのロゴとタイトルの変更
[Admin]ロールを持ったユーザでログインしたときだけ行うことができます。
画面の右上にある「Profile」というリンクをクリックします。
Profileの編集画面に切り替わるので、「Application Title」や「Application Logo」「Servers」を編集します。
Profileの編集画面
「Application Title」と「Application Logo」の編集は任意ですが、「Servers」は必ず指定する必要があります。
サーバのアイコンをクリックすると、Dominoサーバの一覧が表示されるので、ワークスペースに登録したいNotesアプリケーションがあるサーバを選択します。
設定したら、[Save]ボタンをクリックします。

  1. DominoサーバのカタログDB(catalog.nsf)との連携
本アプリケーションにNotesアプリケーションを登録します。これにより、ワークスペースへアプリケーションアイコンを表示する準備ができます。
こちらも[Admin]ロールを持ったユーザでログインしたときだけ行うことができます。
画面右上にある「Admin Config」をクリックします。
画面が切り替わるので、「Sync with server」というリンクをクリックします。
catalog.nsfとの同期を実行
注)
この機能は日本語版のDominoで実行するとエラーになります。
正常動作させるようにするには、本アプリケーションの「GenWS」というエージェントの「Initialize」の51行目を以下のように修正してください。
×  Set serView = catalogDb.getView("Applications\by Server")
○  Set serView = catalogDb.getView("ByServer")   

カタログDBとの同期が終わると、Notesアプリケーションの一覧が表示されます。
「Sync with server」のリンクの横には取り込んだNotesアプリケーションの数が表示されます。
カタログDBから取り込んだ内容の一覧

  1. 共通ワークスペースへのアプリケーション登録と名称の変更
共通ワークスペースは「Business」「Collaboration」「Administration」「Notes Apps」という名称で用意されています。これらの名称は変更が可能です(後述)。このうち、「Notes Apps」という名称のタブは登録したアプリケーションがNotesクライアント上で開くようになります。
この共通ワークスペースへのNotesアプリケーションの登録は[Admin]ロールを持ったユーザだけが行えます。
共通ワークスペースへ登録する場合、「Admin Config」の画面で行います。
まず、登録したいタブを選択します。
タブの選択

次に画面に表示されているアプリケーションの一覧からタブに登録したいものを選択して、一番左にある□にチェックを入れます。
タブに追加するアプリケーションを選択

最後に画面上部にある[Add]ボタンをクリックします。
成功すると、Titleの前にが表示されて、Visibility列には登録したワークスペースタブの名前が表示されます。
タブに追加された状態

では、本当にワークスペースタブに登録されたのかを確認してみましょう。
画面右上の「Workspace」というリンクをクリックします。
ワークスペースを開いたけど・・・

あれ?表示されていませんね?
実は、先ほどは「Collaboration」という名称のタブに登録したので、現在、選択されている「Business」タブには表示されていないんですね。
でも、よく見ると、「Collaboration」タブのところに(3)という表示されています。
では、「Collaboration」タブをクリックしてみましょう。
先ほど登録したアプリケーションのアイコンが表示されているのがわかります。
Collaborationタブにアイコンが!

ちなみに、ワークスペースタブの名前を変更するには、この画面の何もないところでマウスを右クリックします。すると、メニューが表示されるので、「Rename Workspace Page」を選択します。
右クリックメニュー

すると、名称変更のダイアログが表示されるので、変更後の名称を入力して[Rename]ボタンをクリックします。
ワークスペースタブの名称変更ダイアログ

変更内容は即時に反映されます。
名称が変更された結果


  1. 個人ワークスペースの作成とアプリケーション登録
個人用のワークスペースは3つまで作成できます。共通ワークスペースと合わせて7つのタブを表示することができます。
作成するにはWorkspaceの画面でマウスを右クリックして「Create Workspace Page」メニューを実行します。
新規ワークスペース作成ダイアログ

「New Workspace Page」というダイアログが表示されるので、タブの名称を入力して[Create]ボタンをクリックします。(ここでは、「MyPage1」と入力してみました)
Workspace 画面に戻ると、タブが一つ追加されているのがわかります。
個人用のワークスペースタブを追加してみた

では、今しがた作成した個人用のワークスペースにNotesアプリケーションを登録する方法についてです。
画面右上にある「Configuration」というリンクをクリックします。
すると、「Admin Config」によく似た画面になります。
Configuration画面

違うのはカタログDBとの同期ができない事、追加できるワークスペースが自分で作成したものだけになっていることです。
ちなみに共通ワークスペースに登録してあるNotesアプリケーションはこの一覧には表示されません。
ここから先の操作方法は共通ワークスペースへの登録方法と同じなので割愛いたします。


4.注意事項
このアプリケーションですが、いくつか注意事項があります。不具合とも仕様とも言い難いところなので、深い言及は避けます。
  1. 本アプリケーションの利用者は「編集者」以上のアクセス権が必要です(「作成者」だと個人用のワークスペースが作成できません)。
  2. Notesアプリケーションを検索するためには、本アプリケーションに対して全文索引を作成しておく必要があります。
  3. ワークスペースにアイコンを追加する際、そのNotesアプリケーションのACLにユーザとしてエントリが追加されている必要があります。
  4. ワークスペースにアイコンを追加する際、そのNotesアプリケーションのアクセス権が「編集者」以上である必要があります。

このうち、「3.」「4.」については以下の方法で対処することが可能です。
  • AccessLevel」というスクリプトライブラリを開きます。
  • getAccess」という関数の20行目から38行目までをコメントアウトします。
entry=acl.getEntry(@UserName());
if(entry!=null)
{
    level=entry.getLevel()
    if(level>=4)
    {
        access="Yes"
    }
    else
    {
        access="No";
    }
}
else
{
    //To find the access level for group
    access=checkGroup(server,dbPath);
}
  • getAccess」という関数の19行目の下に以下のコードを挿入します。
//To find the access level for current user    ←これが19行目
level = db.getCurrentAccessLevel();
if ( level>=2 ) {
    access = "Yes";
} else {
    access = "No";
  • スクリプトライブラリを保存します。
これでNotesアプリケーションに「読者」以上のアクセス権があれば、ワークスペースに追加できるようになります。


5.まとめ
これで、後は必要なアプリケーションを自分の好きなワークスペースに追加しておけばOKです。
本アプリケーションはWebブラウザでブックマークしておけばいつでも開けます。
NotesアプリケーションをWeb化(XPages化含む)したのは良いけど、ポータルまでは余裕がないなぁとか言う場合に使えるアプリケーションになっています。
利用方法は簡単なのでぜひぜひ使ってみてください。


6.実は作ってみました
このアプリケーション、ワークスペースを再現しているだけあってNotesアプリケーションしか登録ができないんですね。せっかくWebブラウザで開いているので、普通のWebサイトの登録もできたら、簡易ポータル的に使えるのになぁと思い・・・
上記のアプリの動きを参考にしながら、自分で作ってみました。
リスペクト版ワークスペース(笑)

こちらの機能は
  • ログインしていなくても(Anonymous許可)、共通ワークスペースを使える
  • 共通ワークスペースは管理者ユーザが作成
  • ログインすることで、自分用のワークスペースを作成できる(タブは5つまで)
  • Notesアプリケーションだけでなく、Webサイトの登録も可能
等です。

こちらのアプリのデモをご希望の方は、私にご連絡いただくか、弊社宛てにメールをお送りください。折り返し、ご連絡いたします。




ということで今日はこの辺で・・・




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

2014年8月18日月曜日

Sametime 9.0のテスト環境を構築してみました

みなさん、こんばんは。もう8月も後半を迎えました。
早いですね。もう夜も7:00を過ぎると、外は真っ暗です。秋の足音が聞こえてきてるのではないでしょうか?

さて、温めていた記事がやっと公開できるようになりました。今回は、すでにある資料に対しての記事ということで、日本IBMの方(お名前を出していいかど うかわからないので伏せておきます・・・)に内容をチェックしていただきました。この場をお借りして御礼申し上げます。ありがとうございました。

ということで、今日の話題です。


0.前置き
テクてくLotus技術者夜会では、今年(2014年)の5月と7月の2回にわたって、Sametimeのアプリケーションの開発をテーマとして開催されました。IBM Greenhouseの環境を利用することでSametimeアプリケーションのサンプルは作れるのですが、ここはやはり自分でSametimeの環境を構築した方が理解も深まるだろう!(ホントか?)ということで、テスト用環境を構築することにしました。

環境構築のための資料は、日本IBMのdeveloperWorksにアップロードされているので、それを利用して行いました。
基本的にはこの資料を見ながら作業すれば、問題なく構築できる(はず)なのですが、なぜかどっぷりとトラブルにはまってしまいました。
そこで、私なりに「ここは要注意だな!」と思ったところを挙げながら説明していきます。


1.資料のダウンロード
資料は、こちらからダウンロードできます。
IBM iNotes 9.0 - IBM Sametime 9.0 限定利用版 連携 導入ガイド (Windows 版)
PDF形式になっているので、閲覧するのにAdobe Readerが必要です。


2.構築予定の環境構成
ダウンロードした資料にも記載されていますが、今回のテスト環境はWindows版で構築するものとしました。
資料では4台の Windows Serverを使って構成していますが、そんな潤沢なH/W環境は持ち合わせていないので、Sametime System ConsoleとSametime Proxyを1台のサーバーにまとめることで3台の構成にしてみました(あまり変わらないかな・・・)
今回のサーバー構成図
役割別に表すとこんな感じでしょうか?
各サーバの役割


3. Sametime System Consoleの導入
インストールの手順は資料にあるのでそちらを参照願います。とても分かり易いですよ!
さて、そんな資料でも、やはりすべてが網羅されているわけではありません。
予想だにしなかったトラブルは発生するものです。
まず、Sametime System Consoleの導入までは、全く問題なくできました。
しかし!!!ここで事件(笑)が発生しました!
LDAPの登録(資料のP.8「3.6. SSC の開始と管理コンソールへのログインとLDAP の設定」)をしようとしたときにエラーが発生したのです。LDAPの登録に失敗したんですね。
原因は・・・ドミノサーバの管理者フィールドを空白にしていたことです(汗)。
テスト環境なので、「管理者(フルアクセス)」に管理者ユーザ名を入力していて、「管理者」は空白にしていたら、見事にエラーになりました。Sametime Communityの方も同様と思われますので、この欄の内容には十分注意しましょう!
管理者フィールドは必須!
ここは、素直に「管理者」に値を入力して、Dominoを再起動した後、LDAPの再登録作業を行うことで、無事に成功しました。


4.Sametime Communityの導入
Sametime Communityの導入でも、たくさん躓きました。
インストールそのものは、何の問題もなくできたのですが、ここではSametime System Consoleへの登録(資料のP.10「4.3. SSC への登録」)では、何回やっても失敗して、投げ出そうかと思ったくらいです。
ここでの注意点はポートの透過設定です。ファイアウォールでポートの許可をしておかないといけないのです(まぁ、当たり前ですよね・・・)。テスト環境だからファイアウォールなんか無効にしても良かったのですが、しっかりと覚えておかないと本番で大変な目に遭いますからしっかりと覚えましょう。
ここでは80番と9443番ポートが空いていればよいのですが、後で他のポートも空けないといけません。
なので、先に関連するポートは開けておくと良いでしょう。
Sametime Community Server によって使用されるポートに詳しく出ています。こちらのページは、Sametime 8.5バージョンになっていますが、使用するポートは変わっていませんので、問題ないでしょう。
※なお、構築しようとしている環境によってはポート番号が別のものに設定される場合もあります。その場合、各コンポーネントのプ​ロファイル格納ディレクトリのl​ogs\ 配下にある AboutThisProfil​e.txt というテキストファイルに実際の値が書いてありますので、必ず確認するようにしましょう。
私のSametime System Consoleサーバーの場合、「C:\IBM\WebSphere\AppServer\profiles\STSCAppProfile\logs」というフォルダにあり、内容は以下のようになっていました。

AboutThisProfile.txtの内容
また、資料にもある通り、「console.properties」と「productConfig.properties」の内容は変更するのを忘れないようにしましょう。これを忘れて「registerSTServerNode.bat」の実行に失敗した後で修正しても、ダメなようです。再インストールを覚悟した方がよいかもしれません。というくらい大事なところです!!(実際、私は再インストールしました・・・orz)

それと資料のP.13「4.4.3. 接続許可クライアントの設定」ですが、この設定を行うとiNotesクライアントからしか接続できなくなってしまいます。他のクライアントを利用する場合はこの設定に注意してください。
接続するクライアントのIDは資料にも記載されていますが、Table of Client types that are connecting to a Sametime serverを参照してください。


5.Sametime Proxyの導入
こちらもインストールは簡単でした。
ただし、私の場合、Sametime System Consoleサーバーと同居させていたので、Installation Manager及びWASの導入は行いませんでした。この辺りはどのような環境構築をするのかをしっかりと確認した上で行う必要があります。

さて、ここでのトラブルは・・・パスワードでした(汗)。
資料のP.14「5.5. SSC でのDB 接続とデプロイメント計画作成」のSametime ProxyサーバーのWASの管理者とパスワードを入力するところでエラーが発生しました。
なぜか
AIDSC0106E: パスワード に無効な文字が含まれています。次の文字はいずれも使用できません。
; * ! ? " / < > | + & ' ` [ ] % ^ : = -

というエラーが発生したのです。
念のため、WASの管理画面にログインすることができるのを確認して、パスワードが誤っていないことを確認しました。
それでも前述したエラーは変わりません。なぜだろうか???
ふと気が付いたのですが、私はパスワードを複雑化するために、パスワードに"."(ピリオド)を含めていました。リストには含まれていないのですが、嫌な予感がしたので、WAS管理者のパスワードから"."を除外してみました。
すると・・・
はい、成功しました(笑)。って、笑い事じゃないと思いますが・・・いつかきっと修正されることを願いましょう。
とにかく、WAS管理者のパスワードには”.”を含めないようにしましょう。なお、ここで注意事項として書きましたが、WAS管理者のパスワードの変更は他でも影響がありますので、最初から"."なしで作成しておくようにしましょう。


6.ついに動作しました!
ここまでくれば、後はもう問題ありません。実際にはSametimeクライアントを動かす段階でもトラブルはあったのですが、前述したチェックポイントをクリアしていれば、まず動きます。
それでもトラブルが発生した場合は以下のリンクを参照してみてください。きっとヒントがあります。
IBM Sametime9: トラブルシューティングとアンインストール
Sametimeログイン権限エラーの解析方法
8.5x Community server install fails to integrate with the Sametime System Console


7.おまけ
Sametimeインストールの資料にはSametime System Console及びSametime Proxyサーバーの起動用コマンドのサンプルファイルが添付されています。これ、便利なんですが、一か所だけ気を付けるところがあります。
自分で構築した環境で利用できるように、batファイルでは変数を使用しています。
この時、PROXY_HOST_NAMEはSametime Proxyのホスト名を入力するのですが先頭8文字までしか有効になりません。というより、自動生成される際に8文字で切られるようです。Proxyのホスト名が8文字より多い場合は注意が必要ということです。
set WAS_HOME=c:\IBM\WebSphere\AppServer
set HOST_NAME=ssc
set PROXY_HOST_NAME=proxy
set WASADM_ID=wasadmin
set WASADM_PW=password
ちなみに、こちらのPROXY_HOST_NAMEの値はノード名と言い、WebSphereの管理者コンソールから確認することができます(下図参照)。
Sametime Proxy サーバーのノード名
Sametimeサーバーが起動できないな?というときは、この辺を確認しましょう。




と、テスト環境として構築するのであれば、普通は引っかからない場所に引っかかってしまったのですが、本番でトラブルに見舞われることを考えれば、テスト環境で良かったなぁというところです。
また、機能限定版では使えませんが、正式にライセンスを購入すると、Sametime用のSDKが利用できます。それを利用するとXPagesアプリケーションからも在席確認やチャット機能が利用できるようになります。
是非、Sametimeを導入してそういったアプリケーションを作ってみてください。Sametimeが便利に使えるだけでなく、XPagesアプリケーションがレベルアップしますよ!


SametimeのSDKを利用したアプリ開発についてはテクてくの資料をダウンロードしてみてください。
こちらからダウンロードできます。
テクてくLotus オンラインコミュニティ
当ブログでも、サンプルができたら改めて紹介しようと思います。



では今日はこの辺で。



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

2014年8月13日水曜日

XPagesで「データベースを開く」コマンドを使うには?

こんにちは。今週は夏休みを取られている方も多いのではないでしょうか?
私もその一人で、今日(8/13)から8/17(日)までが夏休みです。
ということで、ブログの更新を行います!(なんで???)


そんな私が可哀想と思ったらこちらのボタンをクリックしてください。
思わなくてもクリックしてくださいね。
にほんブログ村 IT技術ブログへ



では始めましょう。

「データベースを開く」コマンドとは? 
さて、今日はXPagesで「データベースを開く」コマンドを使う方法についてです。
Notesクライアントでいう、こちらの画面ですね。
NotesクライアントもしくはDominoサーバ上のアプリケーションを選択して、情報を取得する(またはそのアプリケーションを開く)というものです。
「アプリケーションを開く」ダイアログ

※Notes/Domino 8.0からは「Notesアプリケーション」と呼称するようになっているので、ダイアログのタイトルは「アプリケーションを開く」となっています。

これを実装しようとなると、かなり大変そうです。


OpenNTF.orgで探そう

ここは、実装するのではなく、OpenNTF.orgから探してきましょう。

で・・・、見つけてきました。その名もXPages Database Open Dialog Custom Control

こちらは、今年(2014年)の1月にv2.0がリリースされて、Notes/Domino 9.0に対応しています。
きちんとしたテストはしていないようですが、8.5.3でも動作すると書いてありますので、まだバージョンアップしていないお客様でも使えるのは嬉しいですね。


実装は、Javaでしてあり、さらにExtension Libraryを使用していますが、既存のNotesアプリケーションにも組み込めるようになっています。
手順書も(英語ですが)しっかりしているので、安心です。
さらにサンプルアプリケーションもついているので、実装する前にどんな動きをするのかの確認もできます。


ダウンロードしてみる
では、ダウンロードしてみましょう。
プロジェクトの「Downloads/Releases」のタブを開いて、「XC OpenAppDlg v2.0」をクリックします。
「hedersoft_OpenAppDlgV20.zip」というファイルがあるので、それをクリックしてダウンロードします。
ダウンロードできたら、適当なフォルダに解凍します。下図がzipを解凍した状態です。
zipファイルを解凍した内容
この中にはサンプルアプリケーション、インストール手順書、インストール用ファイル等が含まれています。


デモを見てみる
zipの中にある「hsOpenAppDlgV20.nsf」をDominoサーバにコピーします(クライアントでは動かないようです)。
Domino Designerで開いたら、demoというXPageを開きます。
下図はブラウザで見たときの画面です。
デモ画面

画面はjQueryとBootstrapを使って作成しているようです。
ここにある[Open Application]というボタンをクリックすると、下図ようなダイアログが表示されます。
Open Applicationのダイアログ

なぜか、Notesクライアントのよりもすっきりして見やすく感じるのは気のせいでしょうか?
ここで、Notesアプリケーションを選択して[OK]ボタンをクリックすると、下図のように元の画面にアプリケーションの情報がセットされます(下図はnames.nsfを選択した状態)。
names.nsfの情報

画面を見ればわかるように、
タイトル、サーバー名、 ファイル名、レプリカIDを取得してくれています。さらにはURL及びNotesURLまで生成してくれています。


インストールする
では、実際にNotesアプリケーションにインストールしてみましょう。
分かり易くするため、新規に作成したアプリケーションにインストールします。
既存のアプリケーションでも手順は変わりませんので安心してください。

1.カスタムコントロールのコピー
サンプルアプリケーションにある「ccOpenAppDlg」カスタムコントロールをコピーします。

2.Java クラスのコピー
サンプルアプリケーションにある「de/heresoft/OpenAppDlg.java」「de/heresoft/PhaseValidator.java」をコピーします。
「カスタムコントロール」と「Java クラス」をコピー


3.フォルダーの作成
パッケージエクスプローラービューを開きます。

作成したアプリケーションの「WebContent」フォルダを探して、右クリックします。
ポップアップメニューから「新規」「その他」を選択します。
「新規」「その他」メニューを実行

「新規」のダイアログが表示されるので、「一般」「フォルダー」を選択して、[次へ]をクリックします。
「フォルダー」を選択

フォルダー名を入力する画面になるので、「css」と入力して、[終了]をクリックします。
フォルダー名の入力

同様にして、「fonts」と「js」というフォルダーを作成します。

4.ファイルのコピー
サンプルアプリケーションにあるファイルを今作成したフォルダーにコピーします。
cssフォルダー
 bootstrap.min.css
fontsフォルダー
 glyphicons-halflings-regular.eot
 glyphicons-halflings-regular.svg
 glyphicons-halflings-regular.ttf
 glyphicons-halflings-regular.woff
jsフォルダー
 bootstrap.min.js
 html5shiv.js
 jquery-1.10.2.min.js
 jquery-2.0.3.min.js
 jquery-ui.min.js
 respond.min.js
下図はコピーが完了したときの状態です。
ファイルコピー時の状態


5.faces-config.xmlのカスタマイズ
ダウンロードしたzipを解凍した中に「snippets」フォルダがあり、そこに「demo.faces-config.xml」ファイルがあります。このファイルの中身を丸ごとコピーします。
次に、パッケージエクスプローラーで「WebContent」「WEB-INF」フォルダにある「faces-config.xml」をダブルクリックして開きます。
この「faces-config.xml」の中身を削除して、先にコピーしたものを貼り付けます。

6.XSPプロパティの修正
「アプリケーション」ビューを開きます。
「アプリケーション構成」「XSPプロパティ」をダブルクリックして開きます。
「永続性」のタブを開き、「実行時最適化JavaScriptとCSSリソースの使用」にチェックを入れます(デフォルトでチェックが付いているはずです)
「永続性」タブ

次に「ページの生成」タブを開きます。
「HTML doctype」の値を「HTML5」に変更します。
また、「com.ibm.xsp.extlib.library」ライブラリにチェックを付けて保存します。
「ページの生成」タブ

これで必要なものはインストールされました。
もし、「問題」ビューにエラーが表示されているようであれば、「プロジェクト」「クリーン」メニューから再ビルドしてみてください。エラーがなくなるはずです。


実行用のページを作成する
任意の名前でXPageを作成します(今回は「home」とします)。
XPage内に「ccOpenAppDlg」カスタムコントロールを配置します。
「アプリケーションを開く」ダイアログを呼び出すためのボタンコントロールを配置します。
ボタンにonClickイベントを設定しますが、クライアントサイドのJavaScriptなので、次のように設定します。
「プロパティ」ビューの、「すべてのプロパティ」タブを開きます。
onClickの横にある編集ボタンをクリックします。
onClickの編集

クライアントサイドJavaScriptの内容は
$.openAppDlgCs.show({load:true, fade:true, callback:setFields, passThrough:''});
です。
ここでは、callbackの引数である「setFields」を覚えておいてください。これがダイアログの戻り値を取得するためのコールバック関数になります。
ボタンのサンプルコードはzipファイル内の「snippets」フォルダの「open_dialog_button_snippet.txt」にあります。

次に、ダイアログの戻り値をセットするためのコントロールを配置します。
今回は、計算結果のフィールドコントロールを用意します。
戻り値はデモで見たように
「タイトル」「サーバー名」「ファイル名」「レプリカID」「URL」「NotesURL」の6つですので、計算結果のフィールドコントロールも6つ配置します。
名称はそれぞれ、下記のようにします。
タイトルdbTitle
サーバー名dbSrv
ファイル名dbPath
レプリカIDdbReplicaId
URLdbHttpUrl
NotesURLdbNotesUrl


最後に、コールバック関数を記述するために「出力スクリプト」コントロールを配置します。
これはコントロールビューに表示されていないので、「その他...」を選択してドラッグ&ドロップします。
すると、「コントロールの作成」ダイアログが表示されるので、「出力スクリプト」を選択して[OK]をクリックします。
「コントロールの作成」ダイアログ

「プロパティ」ビューの「すべてのプロパティ」タブを開き、vaue項目にある編集ボタンをクリックします。
クライアントサイドJavaScriptの編集画面が表示されるので、   
    function setFields() {
    try {

        var dbTitle = "";
        var dbPath = "";
        var dbSrv = "";
        var dbHttpUrl = "";
        var dbNotesUrl = "";
        var dbReplicaId = "";
       
        if (arguments.length > 0) {
            var db = arguments[0];
            var passThrough = arguments[1];
           
            dbTitle = (typeof db.title === "undefined") ? "" : db.title;
            dbPath = (typeof db.path === "undefined") ? "" : db.path;
            dbSrv = (typeof db.server === "undefined") ? "" : db.server;
            dbHttpUrl = (typeof db.httpUrl === "undefined") ? "" : db.httpUrl;
            dbNotesUrl = (typeof db.notesUrl === "undefined") ? "" : db.notesUrl;
            dbReplicaId = (typeof db.replicaId === "undefined") ? "" : db.replicaId;
        }
       
        document.getElementById( "view:_id1:dbTitle" ).innerHTML = dbTitle;
        document.getElementById( "view:_id1:dbSrv" ).innerHTML = dbSrv;
        document.getElementById( "view:_id1:dbPath" ).innerHTML = dbPath;
        document.getElementById( "view:_id1:dbHttpUrl" ).innerHTML = dbHttpUrl;
        document.getElementById( "view:_id1:dbNotesUrl" ).innerHTML = dbNotesUrl;
        document.getElementById( "view:_id1:dbReplicaId" ).innerHTML = dbReplicaId;
    } catch (e) {
        console.log(arguments.callee.name);
        console.log(e);
    }
};   
と入力します。
上記は少しカスタマイズしてあります。
サンプルのものをそのまま使用したい場合は、zipファイル内の「snippets」フォルダにある「proccess_selected_app_snippet.txt」を使用してください。


ここで注意しなければいけないのは、計算結果のフィールドコントロールのidです。
クライアントサイドJavaScriptで使用する場合、設定したIDでは判断されません。
どのように設定されるかはブラウザでプレビューした際にソース画面で見ると良いでしょう。

実行結果は画面の見た目以外はサンプルアプリケーションと変わりませんので、ここでは割愛します。
※画面の見た目を重視するのであれば、サンプルアプリケーションの「demo」XPageを参考にしてください。


ダイアログをカスタマイズする
これで十分使用できる状態なのですが、このアプリケーションはなんとカスタマイズができます。
ダイアログの項目の表示を変えることができるのです。
標準だと英語なので、使うのに抵抗がある人がいるかもしれませんがここを日本語に変えてしまえば、そんな問題も吹き飛びます。
カスタマイズの仕方は以下の通り。
「ccOpenAppDlg」カスタムコントロールを配置したときのプロパティの「カスタムプロパティ」に値を設定するだけです。
下図はそれぞれのプロパティに日本語の値をセットした状態です。
カスタムプロパティ

この状態で実行したときのダイアログが下図です。
日本語での「アプリケーションを開く」ダイアログ

どうでしょう?ずいぶんと印象が変わったでしょう?





動作環境の確認
このアプリケーションは以下の環境でテストされています。
Windows版 Domino 9.0(32bit版)
Windows版 Notes 9.0(32bit版)
※上述したように、Notes/Domino 8.5.3でも動作するようです。

Firefox 4以上
Chrome 11以上
IE 8以上
Safari 5以上

動作させるには、このアプリケーションの他、XPages Extension Libraryが必要です。
9.0ならば、標準で組み込まれているもので大丈夫です。
また、8.5.3の場合、アップグレードパック1を導入することでも良いようです。



さらに工夫をすれば、ここで取得したデータをNotes文書のアイテムとして保存することも可能です。
是非、利用してみてください。




他にもOpenNTFで、使ってみたら便利だな!というものがあれば、また紹介しますので、お楽しみに。






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