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

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

2015年4月3日金曜日

XPagesで名前ピッカーを使う場合

こんにちは。
4月に入りました。すなわち、2015年も四分の一が過ぎたという事を意味します。
(毎年、この時期におんなじこと言ってるなぁ というのは気のせいではありません・・・)

さて、今日は見切り発車的な情報です。
この記事を読んだどなたかが補足してくれるのを待つという試みです(笑)


XPagesのアプリケーションでユーザーを選択する場合、
Extension Library(9.0からは標準)の「Name Picker」(9.0では「名前ピッカー」)を使うかと思います。
(癖があって、日本のユーザには使いにくいというのはさておいて・・・)

この「名前ピッカー」の設定方法は次の通りですね。




    
        
        
    


「user1」という編集ボックスを作成して、複数値を許可しています。
「名前ピッカー」はその「user1」に割り当てるようにしています。
ユーザの選択肢はドミノディレクトリにしていて、ユーザーとグループの両方が表示されるようにしました。

実行結果は下図のような形になります。
名前ピッカーの実行結果1

ドミノディレクトリに登録されているユーザー名とグループ(ほとんどグループなのは、諸事情によるものです(笑))が表示されています。
ここで左側のリストからユーザー/グループを選択して[追加]ボタンをクリックすると、右側のリストに移ります。
選択したら、[OK]をクリックすれば、「user1」の編集ボックスに代入されます。
簡単ですね。


ところで・・・
私のNotes/Domino環境ですが、
サーバーのnotes.iniには
NAMES=names.nsf,VistaNames.nsf
という行があります。
そうです。二次アドレス帳が設定されています。

ところが、上の画面にはその二次アドレス帳は表示されていません。
これは困りますね。
そんな時は「名前ピッカー」の設定を少し変えます。

こんな感じです。

    
        
            
                
                
            
        
    


「dataProvider」という項目を「dominoNABNamePicker」から「namePickerAggregator」に変更します。
そして、それの子供という形で配下に「dominoNABNamePicker」を作ります。

この実行結果は下図のとおりです。
名前ピッカーの実行結果2


見事にアドレス帳が選択できるようになりました。
選択肢にはnotes.iniの「names=」の行のものが表示されています。

これで先ほどよりは使いやすくなりましたね。

でも・・・
この場合、二次アドレス帳がDominoサーバ上にあることが前提となります。
しかし、必ずしもそうとは限りません。
Dominoには「ディレクトリアシスタント」という便利な機能があります!

これを利用すると、Dominoサーバ上にないアドレス帳の情報も参照することができるというものです。
ノーツクライアントのメールの「宛先」リンクをクリックするとこんな画面になります。
ディレクトリアシスタントを設定した場合

では、XPagesアプリの「名前ピッカー」でも使えるでしょうか?
「名前ピッカー」の設定は変えずに、再度実行してみました。

下図がその結果です。
名前ピッカーの実行結果3

あれ?表示されません。というか、選択すらできなくなってます。
はい。そうなんです。XPagesでは、ディレクトリアシスタントはこのままでは使えないのです。

じゃぁ、どうすればいいのか?



実は、方法があります。
ドミノディレクトリ(いわゆるnames.nsf)にあるサーバー文書を編集します。
編集するのは、二次アドレス帳がある方のサーバー文書です。
「セキュリティ」タブにある「信頼できるサーバー」という項目にXPagesアプリケーションがあるDominoサーバー名を入力します。
サーバー文書の編集

この後、Dominoサーバーを再起動します。
※ディレクトリアシスタントの設定は済んでいるものとします。


これでXPagesアプリを実行すると・・・
こんな感じになります。
名前ピッカーの実行結果4

無事に別のサーバーにある二次アドレス帳の内容が表示されました。
これでユーザー選択の方法が簡単になりますね!
良かった良かった・・・




ここまで書いておいてなんですが、うまくいく場合といかない場合があります。
二次アドレス帳となるノーツDBを変えるだけで挙動が変わってしまうことがあるのです。
設定としては上で書いたもので正しいと思うのですが、ノーツDBに何らかの条件があるのではないかと思っています。
ご存知の方がいれば、コメントとして残していただけると大変うれしいです。

ちなみに失敗すると、XPagesアプリがあるDominoサーバーのサーバーコンソールに
HTTP JVM: com.ibm.xsp.FacesExceptionEx: データベース dnames.nsf を開けません。
というエラーメッセージが出力されます。
さらに、「名前ピッカー」の実行結果は二次アドレス帳を選択しても、一覧に何も表示されないという哀しい結果になります。
名前ピッカーの実行結果5


と、中途半端な形になってしまいましたが、実現できたのは事実!ということで、
XPagesはすごいぜ!
とごまかして終わります・・・