先日、notes.ini 利用したアプリでちょっとしたトラブルがあったので、まとめておきます。
notes.ini ファイルは、ノーツの動作設定が記録されているファイルで、ノーツクライアントのプログラムディレクトリに存在します。セットアップするなどノーツ担当者であれば知らないはずはないファイルですね。
notes.ini ファイルのアクセス
アプリ開発では、notes.ini にアクセスする機能が提供されています。
@関数 | LotusScript(NotesSessionクラス) | |
設定 | @Environment | SetEnvironmentVar メソッド |
取得 | @Environment | GetEnvironmentString メソッド |
例えば、SrcStr フィールドの値を notes.ini に Denaoshi という名前で設定するには、次のように記述します。
@関数 | @Environment("Denaoshi"; SrcStr) |
LotusScript |
Dim ns As New NotesSession Dim nuiw As New NotesUIWorkspace Dim nuid As NotesUIDocument Dim sStr As String Set nuid = nuiw.CurrentDocument sStr = nuid.FieldGetText("SrcStr") Call ns.SetEnvironmentVar("Denaoshi", sStr) |
実行すると、以下のように notes.ini に新しいエントリ "$Denaoshi" が追加され、値が設定されます。すでにエントリがある場合には、値のみ更新します。
参考までの情報ですが、全角文字の前に付加されている □ は、LMBCS(Lotus Multi-Byte Character Set)の日本語を表すコード(0x10)です。LMBCS の日本語は、0x10 + Shift-JIS の 3 バイトで構成されます。バイナリエディタで ”出” の文字を確認すると次のようになります(”出” の文字コードは 0x8F6F)。
notes.ini ファイルから値を取得して、IniStr フィールドにセットする方法は、次の通りです。
@関数 |
xIni := @Environment("Denaoshi"); @SetField("IniStr"; xIni) |
LotusScript |
Dim ns As New NotesSession Dim nuiw As New NotesUIWorkspace Dim nuid As NotesUIDocument Dim sIni As String Set nuid = nuiw.CurrentDocument sIni = ns.GetEnvironmentString("Denaoshi") Call nuid.FieldSetText("IniStr", sIni) |
取得した値には LMBCS の □ は付加されず、セットした通りの値が取得できます。LMBCS については notes.ini をテキストエディタなどで直接開いたときにだけ気にすればいいということですね。
notes.ini の使い方
上記の通り、notes.ini に値を入出力する方法を紹介しました。これを ”環境変数” と呼び、その名の通り、変数のように利用できます。notes.ini はノーツクライアントに一つですから、アプリをまたがっても値の共有が可能となる点がポイントです。
ワークフローアプリを例にすると、前回選択した上司を保持させ、別のワークフローアプリでそれを上司として初期表示するというような使い方ができます。notes.ini を使えば、簡単な仕組みで大きな効果を得ることができます。
ただ、次にその値を利用するタイミングが、明日なのか1年後なのか定かではありません。先の例のように人の情報の場合、退職などによりノーツユーザとして存在しない場合も考えられます。このような不整合に備え、チェックや再選択させる機能などの用意が必要です。
notes.ini 利用時の注意
最後に先日発生したトラブルについて紹介します。
ワークフロー系のアプリで、質問形式で申請内容を確認するウィザード形式のフォームがありました。ウィザードの最後では、必要な申請書を表示して、起票する機能を提供していました。ウィザードで入力した情報を notes.ini に書き込み、申請書起票時に読み込んで初期表示させ、二重入力を省く仕組みでした。
この機能で、ウィザードと申請書で値が変わる現象が発生しました。連携データに全角スペースが含まれていたことが原因でした。実験したところ、全角スペースは notes.ini に出力時は全角のままですが、読み込んだ際には半角スペースに変換されるようです(@関数、LotusScript とも同様)。
また、複数の全角スペースや複数の半角スペースも半角スペース1つに変換されることも発見しました。この結果より、notes.ini から値を読み込む際には、Trim と同等の機能が実行されいると想定できます。
まとめ
今回紹介した環境変数の利用は、うまく使えば非常に便利な機能です。ただ、Trim のような処理が行われている点には注意が必要です。ご利用の際には、環境変数に格納される値についても意識しておくことをおススメします。
また、環境変数はすべてのノーツアプリで共通で使用できます。便利な反面、大量に使用すると、それそれぞれの目的や設定タイミング、どのアプリで利用しているかが不明瞭になり、バグや仕様の複雑化の要因となります。LotusScript でパブリック変数を使用すべきでない理由と同じですね。
利用の際には環境変数の名称や設定される値、設定タイミングなどの仕様を決め、チーム全体で周知することが重要です。