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

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

2018年1月1日月曜日

JavaScriptによるイベントの確認

新年、明けましておめでとうございます。


さて、ということで、どこかの誰かさんが「新年のブログまだですか?」とか言うので、書いてやろうじゃないか!と思ったので書いてやる次第です(笑)
新年になって早々・・・

内容は、昨日書いた
LotusScriptによるイベントの確認
に対して、JavaScriptによるフィールドイベントの確認についてです。

JavaScriptはNotesクライアントでも動きますが、LotusScriptで書いた方が楽ですから、
ここではWebクライアントおよびXPagesでの動作について書いていきます。

検証に使用するNotes DBも昨日と同じものを利用します。


1.クラシックWebの場合
クラシックWebでのフィールドイベントを設定する方法は、Notesクライアントとほぼ同じです。
フォームのフィールドを選択して、「OnChange」「OnBlur」イベントに記述するだけです。
WebでのonChangeイベント
「実行」の個所を"Web"、"JavaScript"にして、コードを記述すればOKです。
上の例は「fldText」というテキストフィールドの「onChange」イベントに記述しています。
コードの内容はWebブラウザのコンソールログにメッセージを表示するものです。
すでにNotesクライアント用のコードが記述してあるので、左側のところが上下の二色になっています。
同じように「onBlur」イベントにもコードを記述してみました。
設定自体は簡単ですね。

実行してみた結果がこちらです。
コンソールログへの表示なので、Webブラウザで「F12」キーを押してデバッグモードにしています。
クラシックWebでの実行結果

画面下部の赤枠部分を見てください。
Notesクライアントの場合、OnBlurイベントが発生してからOnChangeイベントが発生していましたが、
WebではonChangeイベントが先に発生しています。
NotesクライアントをWeb化しようとする場合、ここでは注意が必要という事ですね。

では、XPagesの場合はどうでしょう?

2.XPagesの場合
XPagesの場合、フォームに設定・・・はできませんので、XPage画面を作成してその中で設定します。
下図のような画面を作成して、イベントにコードを記述してみました。
XPagesのCSJSでイベントチェック

編集ボックスコントロールを配置して、そのonblurイベントにCSJS(クライアントサイドのJavaScript)を記述してみました。コードの内容は先ほどのクラシックWebのものと同じです。
同様にonchangeイベントにも記述してあります。
実行結果は下図です。
CSJSでのイベント確認の実行結果

クラシックWebの時と同じようにテキストフィールドに値を入力して、他のフィールドに移動してみたところ、
onchangeイベントが発生してからonblurイベントが発生しました。
Web系ではonchangeが先に発生するようですね。


XPagesの場合、CSJSだけでなく、SSJS(サーバーサイドJavaScript)での記述もできます。
こちらは少し面白い結果が出ました。

SSJSの場合、Dominoサーバーにイベントが送られるので、「サーバーオプション」を"更新なし"以外にする必要があります。
SSJSでのイベントチェック

実行結果は次の通りです。
SSJSでの実行結果

SSJSの場合、onchangeイベントはフィールドから移動しなくても発生します。
サーバーに随時値を送っているからだと思われます。
上の図で時間が少し開いているのは、値の変更後、すぐにフィールドを抜け出てしまうと、onblurイベントがなぜか発生しなくなるからです。
これもサーバーで処理をしている関係なのでしょうか?


さらに、SSJSとCSJSの両方にonblur、onchangeイベントを記述しておくと、onblurとonchangeが同時に発生しても、CSJSのonblurも実行されなくなります(フィールドの値を変更すると、onchangeしか発生しない。フィールドの値を変更しないでフィールドから外れるとonblurは発生する)。

細かい検証をしたわけではないので、正しく動いてくれているかどうかは不明ですが、実装する際は気を付けてみてください。






それでは今日はこの辺で。
今年も当ブログをよろしくお願いいたします。


Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2017年12月31日日曜日

LotusScriptによるイベントの確認

皆さん、こんにちは。

2017年もついに終わりを迎えますね。

今年は皆さんにとってどんな一年だったでしょうか?
私は後半、自信を取り巻く環境が大きく変わりました。まだ、その変化に自分自身が付いていけてない部分がありますが、年が明けたらそうも言ってられないのでなんとか気持ちを切り替えていこうかと思います。


さて、今年最後の記事は、
IBM Verse ExtensibilityにしようかXPagesにしようか、Watson Work Spaceにしようか等々色々迷いましたが、
NotesエンジニアはまだまだLotusScriptが好きだろうという事で
LotusScriptでのイベントの確認をやってみます。
何気に書いてなかったんですね。

ただ、普通にQueryOpenとかQueryCloseとかについて書いても面白くないので、
今回はフィールドのイベントであるOnBlurとOnChangeについて検証してみます。

いずれのイベントも元々はWebで利用するためのものです(下図参照)が、
OnBlurイベントのデフォルト設定
「実行」と書いてある場所を"Web"から"クライアント"に変更すると、右側の"JavaScript"の選択肢に"LotusScript"が追加され、Notesクライアントでの動作の場合、LotusScriptで記述できるようになります。

では、このOnBlurとOnChangeはどういったイベントなのかを見ていきましょう。

Designerヘルプによると、
OnBlurは
編集モードでカーソルがフィールドから抜け出たときに発生します。
注: このイベントは R6 で新しく追加されました。

とあります。
あれ?フィールドから抜け出たときのイベントなら「Exiting」があったよね?と思う方もいることでしょう。
そこでExitingについてのヘルプを見てみると、
編集モードでカーソルがフィールドから抜け出たときに発生します。
注: Release 6 以降では、OnBlur を使用することをお勧めします。

とあります。
うん、やはり同じ意味のイベントですね。
ですが、R6以降はOnBlurを使ってね。とあります。
R5以前からIBM Notes/Dominoを利用している方で、すでにR6以降にバージョンアップした方は修正するようにしましょう。

OnChangeイベントの方はどうでしょう?
編集モードでフィールドを変更したときに発生します。
注: このイベントは R6 で新しく追加されました。

このイベントは、フィールドにフォーカスがあたっている間に値が変更され、その後フィールドがフォーカスを失った場合に発生します。
とあります。
つまり、OnBlurと同時期に発生するイベントですが、フィールドの値が変更されていないとイベントは発生しないという事になります。


では、フィールドの値が変更されるとはどういったことを意味するのでしょうか?
テキストフィールド、数値フィールド、日付フィールド、チェックボックスフィールド等のOnBlurイベント、OnChangeイベントに

Sub Onblur(Source As Field)
    Msgbox "<フィールド名> <イベント名>", 0 + 64, "イベントテスト"
End Sub


といった形でLotusScriptを記述してみました。
すると、
ただ単にフィールドをクリックして、別のフィールドに移動した場合、
OnBlurのイベントが実行されて、メッセージボックスが表示されました。
フィールド間を移動しただけの時

続いて、フィールドの値を変更してから別のフィールドに移動してみたところ、
OnBlurイベントが発生してメッセージボックスが表示された後に、OnChangeイベントが発生して対応するメッセージが表示されました。
フィールドの値を変更してから別のフィールドに移動した時

フィールド間の移動は、マウスクリックでもいいですし、キーボードでTabキーを押したときでも反応します。入力デバイスを意識しなくていいのは助かりますね。

また、チェックボックスフィールドやラジオボタンフィールドで選択肢を変更しても反応するし、 テキストフィールドで文字列を入力してもOnChangeイベントが反応してくれるのも嬉しいポイントです。

こういったイベントはWebでは当たり前に行えているのですが、LotusScriptだとできないのかな?と思い込んでいた人もいるのではないかと思います。

まだまだLotusScriptは使ってない機能が多数あると思いますので、是非探してみてください。
きっと今あるアプリケーションをレベルアップできると思います。


それでは今年はこの辺で。
良いお年を・・・



Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2017年12月24日日曜日

IBM Verse ExtensibilityとOnTimeを連携させてみよう!

こんにちは、今日はクリスマスイブだそうです。
私には1mmも関係ありませんが(笑)

今日は、先日一足早いクリスマスプレゼント?をいただいたので、それの紹介をします。
クリスマスプレゼントとは「IBM Verse Extensibilityに関する」ものでした。

IBM Verse Extensibilityについては前回の記事でname pickerについて実装方法を紹介しましたが、今日は「com.ibm.appreg.ext.templatedLink」を使ったOnTimeとの連携方法についてです。

IBM Verseのビジネスカードから、対象ユーザーのOnTimeのカレンダーを開くというものです。

私は前回同様、IBM Verse On-Premises版での実装方法の紹介です。
それでは見ていきましょう。

1.参考URL
なお、同じ内容のIBM Verseのクラウド版での実装は、IBM Championの吉田さんが紹介してくれていますのでそちらも是非ご覧ください!
IBM Verse 機能拡張を使って、ビジネスカードからユーザーの OnTime カレンダーを開く



2.前提条件
・IBM Verse On-Premises 1.0.3が必要になります。
こちらは2017年12月20日にダウンロードできるようになりました。
パスポートアドバンテージもしくはソフトウェアアクセスオンラインからダウンロードしてください(ライセンスが必要になります)。
・OnTime Group Calendarが必要になります。
こちらは別途製品のご購入をお願いします。

IBM Verse On-Premises 1.0.3の資料は
IBM Verse On-Premises 1.0.3 の資料
で確認できますので、しっかりと読んでおきましょう。

OnTimeの資料は
OnTimeご紹介資料
で確認できますので、しっかりと読んでおきましょう。

3.OnTimeのカレンダーを開く方法
まず、どうやってOnTimeのユーザーのカレンダーを開くのかですが、
こちらのURLに方法が紹介されています。
ブラウザクライアント起動時のパラメータ指定
このページの中の
「■特定のユーザーやグループを指定して開く。」というセクションにあります。
それによると、
http://HOSTNAME/FOLDER/OnTimeGCClient.nsf/web?open&user="user1@example.com"
となっています。
このうち、"user1@example.com"がカレンダーを開きたいユーザーのメールアドレスを指定するとのことです。

つまり、IBM Verseでユーザーのメールアドレスが取得できれば、後は上記のURLを開けばいいという事になります。

4.IBM Verse Extensibility用のURLページを生成する
IBM Verse Extensibilityの設定方法は前回の記事で書いています。
application.jsonにJSON形式でパラメータを設定して、その中にURLを記述すればいいのです。
が、しかし・・・
IBM Verse ExtensibilityはURLを開く際に、正しくページを開けるようにURLエンコードしてくれます。
その結果、「@」という文字列がエンコードされてしまい、「%40」になってしまうのです。
そこで、吉田さんのブログ記事ではredirect.htmlを用意して、その中で再度「%40」を「@」に変換するという事を行っています。
IBM Verse On-Premisesでも同じように変換すればいいのですが、そこはhtmlファイルを設置するのではなく、XPagesでやってしまいましょう。

利用するXPagesは前回の記事で利用したネームピッカー用のものにします。
XPageの名前は何でも良いですが分かり易くするために「openOnTime.xsp」にしました。
このXPageの「onClientLoad」イベントに
クライアントサイドJavaScriptとして
var sHref = location.href;
var sPath = location.pathname;
var sUrl  = sHref.replace( sPath, "/OnTimeGC/ontimegcclient.nsf/web" ).replace( '%40', '@' );
location.href = sUrl;

というコードを記述します。
※「/OnTimeGC/ontimegcclient.nsf」については自社のOnTimeのクライアントDBのパスを入力してください。

5. IBM Verse Extensibilityの設定
IBM VerseからOnTimeを開くプログラムができたので、IBM Verse Extensibilityの設定であるapplication.Jsonの設定を行います。
基本的な記述方法については前回の記事を参照していただくとして、今回はすでにIBM Verse Extensibilityを使っている場合の追記方法という形で紹介します。
application.Jsonの内容

application.Jsonの中に"extensions"という記述があります。ここに開発した拡張機能の内容を記述するのですが、配列になっているので、"{}"を","で囲って記述すればいいのです。
追記する内容は上の画像の赤枠の部分になります。
typeには機能である"com.ibm.appreg.ext.templatedLink"を、
objectには拡張機能の対象となるビジネスカードを表す"com.ibm.appreg.object.person"を、
payloadのtextにはプログラムの機能名を記述します(日本語も可能ですが、unicodeエンコードする必要があります)
payloadのhrefには、先ほど作成したXPagesのURLに
"/web?open&user=\"${profile.primaryEmail}\""
を追加した内容を記述します。


6.動作確認
これで後は、IBM Verseを起動して、動作確認をします。
ビジネスカードからOnTimeのユーザーのカレンダーが開けば成功です。
実際に動かした動画を見てください。



さぁ、どうでしょうか?
IBM Verse On-PremisesとIBM Verse Extensibilityの組み合わせにより、色々なことができそうだというのが分かっていただけましたでしょうか?
今回はわかりやすいOnTimeとの連携を紹介しました。
ここから先は皆さん自身がアイディアと工夫で実践してみてください。


他のアプリケーションではできない(できても難しい、費用が高い・・・)といったことも 、IBM Notes/Dominoならきっとできるでしょう!
使い方次第で、もっともっと便利になりますよ。
IBM Notes/Dominoはそういったものですからね。



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


Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2017年11月21日火曜日

IBM Verse Extensibilityを使ってみよう!

皆さん、こんばんは!今日も夜に更新です!(言い切った!)

昨日はIBM Verse On-Premisesを導入してみました。今日もしっかりと動いています!
ということで、今日はその続きとなる「IBM Verse Extensibility」についてみていきます。
テクてく11月度の資料は
【資料公開】テクてく​​​​​​​​​​​​L​o​t​u​s​​技​​術​​者​​夜​​​会​​​:​ザ・​デベロッ​パー編​​​​17​_​11_1​7
に公開してありますので、そちらを読んでいただくと、より一層理解が深まりますので、お忘れなきよう!

その他、
GitHub にもサンプルアプリケーションが公開されています。
IBM Verse Developers
開発者用のドキュメントはこちら。
IBM Verse

これらも必ず見ることをお勧めします。

では、IBM Verse Extensibilityを見ていきましょう。
小難しいアーキテクチャはおいておいて・・・
どういったものかというと、
「IBM Verse」を拡張したり、他のWebアプリケーションと連携する
ものです。
その中で、Verse Extension Pointsという形で用意されている拡張機能は、
今のところ、
com.ibm.appreg.ext.simpleLink
com.ibm.appreg.ext.templatedLink
com.ibm.verse.ext.widget
com.ibm.verse.ext.namePicker
com.ibm.verse.ext.beforeOnSend
com.ibm.verse.ext.liveText
です。

テクてくでは、
com.ibm.verse.ext.liveText
com.ibm.verse.ext.beforeOnSend
com.ibm.verse.ext.namePicker
が紹介されました。

このうち、
 com.ibm.verse.ext.beforeOnSend
については、IBM Championの吉田さんがご自身のブログで紹介していますので、そちらをご覧ください。
リンクはこちら。
IBM Verse からのメール送信前に確認画面を表示する

このブログでは、
com.ibm.verse.ext.namePicker
をXPagesを使ってできるかどうかを試してみましょう。
環境としては、当然ですが、昨日構築したIBM Verse On-Premisesを利用します。
クラウド版のIBM Verseとは若干違う可能性もありますがご了承ください。

テクてくでは、「Custom Name Picker」として、以下の方法で実現したよという説明がありました。
1.Verse UI内にIFRAMEが生成されます。
2.IFRAME内にHTMLで作成した画面が表示されます。
3.iNotesの全文検索APIを利用して、ドミノディレクトリからユーザー情報を検索します。
4.検索結果をHTMLの画面内に表示します。
5.ユーザー名をpostMessageでVerseに送信します(宛先にセット)。

この説明を聞いてデモを見ながら、「あれ?画面をXPagesで作ってもできんじゃね?」と思いました。
ということで、HTMLの画面をXPagesで作ってみましょう。


1.XPages アプリケーションの作成
 Verse On-Premisesを構築したDominoサーバー上にNotes DBを作成します。
 ACLは「-Default-」は"読者"で良いですが、「Anonymous」は"なし"にしておきましょう(ドミノディレクトリの情報を表示するので、最低限のACL設定はした方が良いです)。


2.XPage の作成
XPage の名称は何でも良いです。ただし、Verse ExtensibilityにURL情報を渡す必要があるので、長くしすぎないようにしましょう。

データソースはドミノディレクトリを設定します。自DBではないところに注意しましょう。
ビューはユーザー情報を表示するためのビューを設定します。
テクてくでは専用のビューを作っていたので、同じようにビューを作成してそれを定義しました。

ビューの設定情報は、
3. Extend Domino Directory
を参照してください。
(実はXPagesで作るのであれば、ビューは既存のもので良かったのですが、折角なので流用しました)


3.画面ロードの設定
2.IFRAME内にHTMLで作成した画面が表示されます。
ということをXPages の中で行う必要があります。
これはイベントハンドラを利用しているので、CSJSで記述する必要があります。
XPagesでは「出力スクリプト」コントロール(xp:scriptBlock)を使うことで記述することができます。
記述方法は、サンプルのui.jsからそのまま引用できます。
テクテクの公開資料の中にある「custom-name-picker」用の「ui.js」の1-41行目をそのままコピペします。
その際、12行目の
"https://djxtest01.lab.japan.ibm.com",
は自分のDominoサーバーのホスト名に書き換えます。
私の場合、こんな感じになりました。
出力スクリプトに記述した画面ロードのコード



4.ネームピッカー用のビュー設定

ビュー情報をXPageにセットする方法ですが、ビューコントロール(xp:viewPanel)ではなく、繰り返しコントロールを使いました。
これは、
5.ユーザー名をpostMessageでVerseに送信します(宛先にセット)。
を簡単に行えるようにするためです。
サンプルコードを見るとわかりますが、この部分は、CSJSで書かれています。
ビューコントロールで該当する行をダブルクリックしたときのイベントを書くのが面倒だったということですね(笑)
作った画面はこんな感じです。
Verseでのネームピッカーとなる(はず)の画面

ユーザー名の部分はクリックできるように、リンク表示にしています。
ここでXPagesで正しく表示されるのかのテストをしてみました。
XPages でネームピッカーもどきを表示してみた

一応、ドミノディレクトリの情報は表示できています。


5.宛先セット方法
あとは、ここで選択されたユーザー情報をVerseに戻せればOK(のはず)です。
テクてくでも講師の方が「postMessage さえどうにかなれば簡単ですよ」みたいなことを仰っていたので、無理をせずに、サンプルをほぼ流用させていただきました。
postMessageのコード
こちらはイメージでの表示とさせていただきます。
※実際のコードは、テクてくのサンプルについているのでそちらをご利用ください。
違っているのは、
var userEmail = document.getElementById( "#{id:internetAddress1}" ).innerHTML;
var userName = document.getElementById( "#{id:link1}" ).innerHTML;

だけです。
これは画面上で選択されたユーザー情報を取得する箇所なので、XPages での記述となっています。
残りは全く同じです。


6.IBM Verse Extensibilityの設定
アプリケーションはできた(はず)なので、あとはIBM Verseとの連携設定をするだけです。
この連携設定には、
「application.json」というファイルを使います。
このファイルはVerse Extension Pointsごとにフォーマットが決まっているので、一度作ってしまえば簡単に作成できます(他人がつくったものも流用できます)。
ということで、テクてくで公開されたサンプルの「application.json」をカスタマイズします(笑)
application.jsonのサンプル
 大事なのは、「url:」の個所です。ここに先ほど作成したXPagesのURLを設定します。
これにより、IBM Verseで宛先をクリックすると動作するようになります。
この「application.json」はIBM Verse On-Premisesの場合、Dominoサーバー上に配置する必要があります。
通常、
\VOP\application.json
に配置するのですが、DominoサーバーのDataディレクトリに置きたくないよ!
という場合、Dominoサーバーのnotes.iniに
VOP_EXTENSIBILITY_APPLICATIONS_JSON_FILEPATH=xxxx\application.json
※xxxxは任意のファイルパス
と記述することで、任意のディレクトリに配置することができます。


7.動かしてみた
IBM Verseでメールを作成後、[宛先]の個所がリンクになりクリックできるようになるはずです。
実際にクリックしてみると・・・
ロード中の画面

といったIBM Verse Extensibilityで作成した画面をロードしてますよ。という表示がされた後、XPages で作成したネームピッカー用の画面が表示されます!

XPages のネームピッカー用画面がIBM Verse内に表示された!

ここで、リンク状態になっている名前をクリックすると、宛先もしくはCc、Bccにセットされます。
これで画面下部にある[メッセージに戻る]をクリックしてメール本文を書いた後、[送信]をクリックすれば、セットした宛先にメールが送信されます。

どうでしょう?
XPagesでもネームピッカーの画面が作成できるとなれば、かなりIBM Verseの拡張の敷居は低くなったのではないでしょうか?
また、これを機にXPagesも触ってみようかな?という事になってくれれば、尚良!ですね。

XPages の画面ロードと宛先セットはVerseのお作法に従う必要はありますが、その中身はXPagesで自由に作ることができます。今回、私が作成したサンプルはとてもシンプルでこのままでは業務の利用はとてもできませんが、ちょっとカスタマイズすればかなり使えるようになると思います。


IBM Verse On-Premisesが使えるようになったので、一緒にIBM Verse Extensibilityを使ってみましょう!


ということで、IBM Verseの記事、前後編はこれで終わりとします。


今日はこの辺で・・・







Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2017年11月20日月曜日

IBM Verse On-Premisesを導入してみよう!

皆さん、こんにちばんは。
前回の投稿からほぼ一カ月が過ぎました。ホントに遅筆で申し訳ないです。

言い訳の一つでもすると(毎回だな・・・)、11月は毎年毎年イベントが多いのです。
少しずらしてほしいものです。
ブログの更新も大事な作業の一つ(仕事ではない・・・)なのですが、多くのイベントがあると優先順位が下がってしまうんですよね。


さて、これくらいにして今日の話題に行きましょう。
11月15日に行われたノーツコンソーシアムオープンセミナーで、「ザ・ノーツ研究会」がIBM Verse On-Premisesの構築方法について発表を行いました(発表したのは私なんですけどね・・・)。
資料はこちら→S15_TheNotes_NotesConsortiumOpenSeminar2017_NotesLabo.pdf

そして、11月17日に行われたテクてくLotus技術者夜会ではIBM Verse Extensibilityの話。

もう、これはIBM Verseについてブログの記事を書け!というお告げとしか思えません(思えない・・・)。

ということで、これから2回にわたって、IBM Verseについての記事を書きます。前半の今回は、IBM Verse On-Premisesの導入方法について書いていきます。
実際問題、上記のノーツコンソーシアムオープンセミナーの資料を見ていただければ、構築できるはずなんですが、いきなりIBM Verse Extensibilityの話を書いても、???となりそうだったので、その前段ということです。


では、見ていきましょう。

なお、全体の手順は
IBM Domino メール・サーバーでの Verse オンプレミス の構成とインストール
にばっちり出ていますので、そちらを読んでいただければ、以下の文章は全く必要ありません(笑)

1.前提条件


IBM Verse On-Premisesを導入するには、条件があります。
Windows版 or Linux版のIBM Domino 9.0.1 FP8 IF3以上です。
私が構築した環境は
64bit版Windows Server 2008 R2 Enterprise
IBM Domino 9.0.1 Feature Pack9
IBM Notes 9.0.1 Feature Pack9
IBM Verse On-Premises 1.0.2
でした。

2.OpenSSLの導入

新インフラ研究会では、 「Let's Encrypt for Domino」の利用を推奨していましたが、私はオンプレのテスト環境なので、自己証明書で十分でしたので、OpenSSLを利用しました。
手順は、
Windows 環境で OpenSSL と KYRTool を利用して自己署名証明書を作成する
に出ていますので、この通りに実施してください。
注意点としては、コマンドプロンプトで実行する際、フォルダに空白が含まれる場合、""で囲う必要があることです。
私の場合、Notesクライアントは「D:\Program Files (x86)\IBM\Notes」にインストールされているので、「5.キーリングファイルの作成」では、
D:\Program Files (x86)\IBM\Notes>kyrtool ="D:\Program Files (x86)\IBM\Notes\notes.ini" create -k "D:\Program Files (x86)\IBM\Notes\data\keyring.kyr" -p password
とする必要があります(その他のコマンド実行時も同様です)。
コマンド実行時はフォルダに注意!

3.DominoのHTTPの設定

IBM Verse On-PremisesはWebブラウザで閲覧するメールなので、HTTPタスクを起動する必要があります。
その際、いくつかの設定を追加しておく必要があります。
(1)サーバー文書
[インターネットプロトコル] - [Domino Web Engine] 「出力に UTF-8 を使用」を"はい"にします。
[ポート] - [インターネットポート] 「SSL キーファイル名」に上記で作成したSSL証明書のファイル名(指示通りに作成していれば、"keyring.kyr")を入力します。
[ポート] - [インターネットポート] - [Web] 「SSL ポートステータス」を"有効"にします。
(2)ファイルの配置作成したSSL証明書(keyring.kyr)をIBM DominoサーバーのDataディレクトリにコピーします。
(3)サーバーのnotes.ini
HTTPJVMMaxHeapSize=1024M
HTTPJVMMaxHeapSizeSet=1
を設定します(set config命令で設定できます)。
また、ServerTasks=の行にHTTPを追加します(すでに追加されている場合は不要です)。
(4)HTTPタスクの起動
HTTPタスクを(再)起動します。
起動していない場合は、サーバーコンソールで
load http
起動していた場合は、サーバーコンソールで
tell http restart
とします。

4.IDボールトの設定

IBM VerseではIDボールトの設定も必要です。
設定方法は、当ブログ内のIDボールトの設定方法を見ていただいてもいいですし、IBMのドキュメントであるID ボールトの構築とトラブルシューティングを見てもらっても構いません。
IDボールトを設定した後、ポリシーを定義して、Notesユーザーに割り当てるのを忘れないようにしましょう。

5.Verse On-Premisesのモジュールのインストール

ここでようやくIBM Verseの作業に入ります(今までの作業は準備だったということがここで初めて分かります)。
一度、HTTPタスクを停止します。
サーバーコンソールで
tell http quit
を実行します。
IBM Verse On-PremisesのモジュールはPassport Advantage もしくはSoftware Access Catalogから入手可能(なはず)です。
私がダウンロードしたファイル名は「VERSE_ONPREMISES_V1.0.2_MP_ML.zip」でした。
これを解凍すると、さらに「IBM_Verse_On_Premises.zip」という圧縮ファイルがあります。
これを解凍してできた「eclipse」フォルダをDominoサーバーの\domino\workspace\applications\eclipseにコピーします。
※同名のフォルダがあるので、統合してください。


(オプション)
・IBMから出ているドキュメントでは、リダイレクトDBの設定を進めていますが、これは必須ではありません。私の環境では、使いませんでしたので、説明は省略します。
・また、VOPDesign.nsf内のビューをメールDBにコピーとありますが、FP9の環境では、すでにメールテンプレートに含まれていますので、作業は不要です。

6.HTTPタスクの起動と資格情報ストア・アプリケーションの作成

サーバーコンソールで
load http
を実行します。
HTTPタスクが起動したら、
サーバーコンソールで
keymgmt create nek credstore
keymgmt create credstore credstore
の2つのコマンドを実行します。
これらは暗号キーの生成と格納するNotes DBの作成を行います。


7.メールDBの索引の更新

利用者のメールDBに全文索引を作成します。
その後、サーバーコンソールで
load updall mail
を実行して、メールDBに対して索引の更新を行います。

8.IBM Verseの起動

Webブラウザで
http:///verse
と入力して、Enterを押します・・・
すると、
IBM Verse On-Premisesの画面

見事にIBM Verseの画面になりました!

どうでしょうか?
手順は少し多いですが、Verseの導入と考えるのではなく、DominoのSSL化、とかIDボールトの導入をついでにやっているんだな。とするといいと思います。

さて、これでIBM Verse Extensibilityを利用する準備ができました。
次回はいよいよ11月のテクてくで紹介された内容の実践に移っていきます。
乞うご期待!?


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





Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2017年10月25日水曜日

スコープ変数の有効期間について

みなさん、こんにちは。10月になり急に冷え込みました。
体調を崩しやすくなっていますので、くれぐれも気を付けてくださいね。


今日はXPagesのスコープ変数についての話題です。
ご存知の通り、スコープ変数には、
  • applicationScope
  • sessionScope
  • viewScope
  • requestScope
の4種類があります。

当ブログでは、セッションスコープ変数はどこで使われているのか?という記事で一度だけ取り扱ったことがあります。
ですが、それもsessionScope変数に限った話であり薄っぺらいものでした。

そこで今回はもう少し詳しく見ていこうと思います。

それぞれのスコープ変数には、有効範囲や有効期間といったものがありますが、主に有効期間について見ていきます。

1.applicationScope

概要

Notes アプリケーションに対して設定されるもので、アプリケーション利用者全員で共有します。
アプリケーション利用者が最初にアクセスした時点で設定されます。

有効期間

有効期間は、最後にアプリケーションにアクセスした後、決められた時間までです。
その時間を経過すると初期化(クリア)されます。
この時間は、デフォルトは30分ですが、Notes アプリケーションの「XSPプロパティ」の中にある「アプリケーションタイムアウト」で変更することができます。

2.sessionScope

概要

ユーザーごとに設定されるもので、各アプリケーション利用者が最初にアクセスした時点で設定されます。

有効期間

有効期間は、最後にアプリケーションにアクセスした後、決められた時間までです。
その時間を経過すると初期化(クリア)されます。
この時間は、デフォルトは30分ですが、Notes アプリケーションの「XSPプロパティ」の中にある「セッションタイムアウト」で変更することができます。


3.viewScope

概要

ユーザーごとでなおかつ同一ページ内で利用されるもので、各アプリケーション利用者が最初にアクセスした時点で設定されます。

有効期間

有効期間は、ページ遷移が発生するタイミングまでです。別のページを開いた瞬間に値がクリアされます。部分更新を続ける限りは値は保持されたままになります。
明確なタイムアウトの時間は設定されていませんが、applicationScopeがクリアされるときには同時にviewScope変数もクリアされます。

制限事項

その他、同一ページ上に存在できる上限数といった制限事項もあります。

4.requestScope

概要

ユーザーごとでなおかつ、単一のHTTPリクエストが処理されている間だけアクセス可能なものです。

有効期間

HTTPリクエストが処理して、返信用のHTMLデータを作成後、返信が完了した時点でクリアされます。




上記を踏まえて、簡単なテスト用のXPagesアプリケーションを作ってみました。
テストアプリケーションの画面

最初はAnonymousユーザー(匿名)の状態になっています。
この状態で各スコープ変数に値をセットした後、ログインすると・・・
なぜかsessionScope変数はクリアされずに残っています。



この様子をビデオに録画してみましたので実際にご確認ください。






同一のブラウザで別ユーザーで利用することはないかと思いますが、スコープ変数を正しく管理することを考慮して、ページのロード時にログインしているユーザー名を考慮しながら、初期化するような処理を追加した方がいいかもしれません。






なお、今回の情報は
XPages アプリケーションにおけるセッション管理
を参考にしています。
詳しく書かれていますので一度熟読することをお勧めします。


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





Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2017年9月20日水曜日

XPagesで日付フィールドの表現方法を変えてみる

皆さん、こんにちは。
9月も終盤に突入しました。今月が期の終わりで締めの作業に入られている方も多いことでしょう。
忙しいからと無理をしすぎて、体調を崩すことがないようにしましょうね。食中毒なんてもってのほかですよ。


今日はXPagesの話題です。
そして、またまた日付に関する話題です。

フォームの日付/時刻フィールドをXPagesにバインドして表示することができます。
この時、プロパティで表示タイプや表示形式を選択することができます。
データバインドで選択できる表示方法

「表示タイプ」には"文字列"、"マスク"、"ブール値"、"数値"、"日付/時刻"の選択肢がありますが、ここは迷わず"日付/時刻"でしょう。
実際に、フィールドタイプが「日付/時刻」型の場合、バインドさせようとすると、ここは自動的に"日付/時刻"で設定されます。
表示タイプの選択肢


問題は「表示形式」です。
選択肢は"日付のみ"、"時刻のみ"、"日付と時刻"、"カスタム"が用意されています。
表示形式の選択肢

日付と時刻はそれぞれ「スタイル」の設定ができて、その選択肢は、"デフォルト"、"短く"、"中間"、"長く"、"フルモード"になります。
日付/時刻のスタイルの選択肢

画面には、もう一つ。「パターン」という項目がありますが、なぜかグレーアウトしていて選択することができません。

この状態でも色々な表現方法が選べるのはとてもありがたいのですが、やはり他の選択肢がないのは困ります。
本当に「パターン」は設定することができないのでしょうか?


実はできます。
プロパティ画面のうち、「すべてのプロパティ」タブを選択して、その中の「データ」「converter」「pattern」という項目がそれになります。
ここに表示スタイルを記述することで画面に表示するときに指定した形になります。
下図は「yyyyMMdd」と指定してあります(日付は区切り記号なしの年月日で表示されます)。
すべてのプロパティのpattern項目

ここで、patternに式を設定すると、なぜか「データ」タブの「パターン」項目がアクティブになり、設定形式を変更することができるようになります。
なぜか「パターン」が変更可能になる

これはもしかして、バ・・・
いいえ。いいんです。結果的にちゃんと変更できるんですから、何の問題もありません!


では、実際にどのように表示されるのかを確認してみましょう。
下図は、日付/時刻フィールドを設定したNotesの文書です。
Notes文書

これをXPagesにバインドして色々な形で表示するようにしてみました。
表示方法を色々と変えてみた


ちょっとしたことですが、これでアプリケーションの見栄えを簡単に変更することができますので、一度試してみてください。





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



Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ