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

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

2016年3月8日火曜日

環境変数を色々試してみた(3)XPagesの場合

こんにちは。
今日は3月8日。雨が止んだのは良いですが、霞がかっていてもやもやしています。晴れるならカラッと晴れてほしいものです。


さて、昨日は1日に2本の記事を書くという暴挙を犯しましたが、それでは物足りない!という方がいたようです。


ということで、ESS Dev Japanの中の人に無茶ぶりを受けてしまったので、書きます(笑)。


XPagesの場合、Webブラウザで動かすのとNotesクライアントStandard版で動かす(いわゆるXPinC)という2種類あります。
それぞれ環境変数はどのようにアクセスできるのかを検証してみましょう。
XPagesそのものは同じものを使いますということでこんな画面を作ってみました。
環境変数のテスト用XPages

1.環境変数の設定方法

まずは、設定方法から見ていきましょう。
動きを分かり易くするために、 [設定]ボタンを設けて、それをクリックすると環境変数が設定されるというものにします。

1-1.設定方法

XPagesの場合、@Environmentや@SetEnvironment関数はありません。代わりにSSJSが利用できますので、NotesSessionクラスのsetEnvironmentVarが利用できます。
構文は次の通りです。
setEnvironmentVar( vname:string, value:any, issystem:boolean );

vnameが環境変数名、valueが設定する値、issystemがユーザー環境変数かシステム環境変数化を指定します。
引数自体はLotusScriptと同じなので分かり易いですね。
例)
var env1 = getComponent( "env1" ).getValue();
var val1 = getComponent( "val1" ).getValue();
session.setEnvironmentVar( env1, val1, true );

上記は画面上のenv1というコントロールとval1というコントロールに書かれた内容を元にして、環境変数を設定するというものです。


1-2.Webブラウザで動かした場合

上で作成した画面を使ってWebブラウザで実行してみました。
環境変数名/設定値に入力した後、[値の設定1][値の設定2]のボタンをクリックするのですが、環境変数に設定する以外のことは何もしていないので、画面に変化はありません。

結果の確認は、Notesクライアントのnotes.iniとDominoサーバのnotes.iniの内容を調べてみます。
Notesクライアントのnotes.iniには予想通り何も設定されていませんでした。
Webブラウザから利用しているので当然でしょう。
次にDominoサーバのnotes.iniを見てみます。
なんとまぁ、ちゃんと設定されているではないですか。関数が用意されているので当たり前と言えば当たり前ですが。
これでXPagesの場合、Dominoサーバに環境変数を設定できるという事が分かりました。

1-3.XPinCで動かした場合

では、次にこのXPagesの画面をXPinCで動かしてみましょう。
Webブラウザと同じ環境変数名にしたのではどのように動いたのかわからないので、別の名前にします。
やはり、ボタンをクリックしただけでは何も変わりません。

先ほどと同じようにnotes.iniを見てみましょう。
今度は、Dominoサーバのnotes.iniから先に見てみます。
おや?追加されていません。
今度は、Notesクライアントのnotes.iniを見てみましょう。
なんと!設定されていました。
NotesクライアントのStandard版でXPagesを動かしたときは、クライアントを判別して、notes.iniに書き込んでくれるようです。

これはプログラムがどこで動いているのかをNotes/Dominoがきちんと把握しているという事ですね。
素晴らしい!


2.環境変数の取得方法

2-1.取得方法

取得方法も@関数ではなく、SSJSで行います。
関数とその構文は以下の通り。
getEnvironmentString( vname:string, issystem:boolean ) : string
getEnvironmentValue( vname:string, issystem:boolean ) : any

vnameは環境変数名、issystemはシステム環境変数か、ユーザー環境変数かを指定します。
2つの違いは値が文字列で返ってくるかany(LotusScriptでいうVariant型)で返ってくるかです。
例)
var env1 = getComponent( "env1" ).getValue();
var ret = session.getEnvironmentString( env1, true );
getComponent( "cfEnvVal1" ).setValue( ret );

上記はenv1というコントロールに入力した環境変数名の値を文字列として取得して、cfEnvVal1というコントロールの値としてセットするというものです。

2-2.Webブラウザで動かした場合

さきほど設定した環境変数を取得するために、[値の取得1][値の取得2]をクリックしてみました。
下図がその結果です。
環境変数の取得

ちゃんとDominoサーバのnotes.iniに設定してある値が取得できていることが分かります。


2-3.XPinCで動かした場合

続いて、XPinCで動かした場合を見てみましょう。
同じように[値の取得1][値の取得2]をクリックします。
結果はこちら。
環境変数の取得(XPinCの場合)

こちらもNotesクライアントのnotes.iniの設定値を正しく取得できています。


これでXPagesでも環境変数のアクセスが容易にできることが分かりました。



2.まとめ

さて、いかがでしたか?
従来のNotes DBとXPagesでは環境変数の取り扱い方が若干異なるという事が分かっていただけたかと思います。

従来のNotes DBをXPages化する際、環境変数を使っているのであれば、そこも考慮しないといけないですね。

特に、Webブラウザで利用している場合、 Dominoサーバに書き込まれてしまうので、環境変数が上書きされてしまい、思った値が取得できないなんてことになったりします。
かといって、ユーザーごとに識別させようとした場合(たとえば、環境変数名にユーザー名を付与するなど)、notes.iniの行数が爆発的に増えてしまい、パフォーマンスに影響が出かねないなどという事も考えられます(実際にパフォーマンスに影響が出るかどうかは不明です)。

XPinCで利用する場合は、従来のNotes DBと同じでユーザのNotesクライアントのnotes.iniに書き込まれるのでそういった心配はなさそうですが。


実際の業務に反映させる場合は、色々とテストしてからにしましょう。


では今日はこの辺で。





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

0 件のコメント: