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

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

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