2024/11/19

ビューの検索で全角半角が区別できない !?

先日、ノーツアプリでトラブルに遭遇しました。現象がつかめたのでレポートします。なお今回の調査結果はメーカサポートに連絡・確認していません。私の検証結果だけをまとめてております。あくまで私の主観に基づくレポートですので、ご了承ください。


背景のシステム

ノーツとは別の人事システムから部門マスタと社員マスタを連携しており、これら情報を使用してノーツのグループを自動生成しています。連携するデータはその日の全件で、ノーツ内にあるデータ(前日のマスタ)と比較しながら、差分を算出し、新規/変更/削除の処理をしています。

連係インターフェース仕様としては部門名は ”全角” 文字と決まっていたのですが、誤って半角で入力してしまったそうです(パッケージに仕様上禁止できなかった模様)。半角部門名の存在に気づき連絡、全角文字に修正したタイミングで問題が発生しました。


トラブルの内容

発生した問題は、グループ名とメンバーで全角/半角が不一致となったのです。

例えば下表のような感じです。グループ名で使用している部門名(赤字)は半角文字のままで、メンバーとして使用している部門名(青字)は全角となっていました。

グループ名 メンバー
営業部 営業部/営業
営業部/営業
営業部/営業1 A さん
B さん

要は、階層構造が正しくなく、グループとして正しく機能しなくなりました。結果、アクセス障害が発生し大トラブルになったというものでした。


エラーの原因

グループの更新処理において、グループ名は GetDocumentByKey で既存グループを検索していました。この時、全角で検索したにも関わらず、半角のグループがヒットし、半角のグループが削除されず、全角にならずメンバーだけ更新されたため発生していました。

今回はこの問題を単純なプログラムを作成して、検証します。

なお、グループのメンバーに関しては文字列の比較で判定しており、こちらは正常に判断されていたことを補足いたします。


検証プログラム

まず、フィールドが 1 つだけの単純なフォームを作成します。

フォームができたら、プリビューでテストデータを 1 件作成し、”営業部/営業1課” と入力します(数字は半角)。

次にこの項目を表示する 1 列だけのビューを作成します。検索で使用するのでソートを設定しておきます。

最後にテストエージェントを作成します。テストデータを検索するのですが、検索前に StrConv を使用して全角文字列に変換しています。正しく動作すると検索にはヒットしないという算段です。

検索した結果はメッセージで表示します。ヒットした場合は、検索文字列とヒットした文書内のフィールド値を表示しています。

Option Declare

Sub Initialize
   Dim ns As New NotesSession
   Dim ndb As NotesDatabase
   Dim nv As NotesView
   Dim nd As NotesDocument
   Dim sKey As String

   sKey = "営業部/営業1課"
   sKey = StrConv(sKey, 4)

   Set ndb = ns.CurrentDatabase
   Set nv = ndb.Getview("GetDocumentByKey")

   Set nd = nv.GetDocumentByKey(sKey, True)

   If nd Is Nothing Then
      MsgBox "ヒットしませんでした。"
   Else
      MsgBox sKey & Chr(10) & nd.Keyword(0)
   End If
End Sub


検証結果

手持ちの環境を利用して検証します。サーバは Domino 11 と Domino 14 があったので利用します(クライアントは Notes 11)。その結果、Domino 11 ではヒットし、Domino 14 ではヒットしませんでした。

Domino 11 Domino 14

LotusScript に関連するバージョン依存の障害では、一般にクライアントのバージョンに依存することが多いのですが、今回はサーバのバージョンにより現象が違います。サーバ内のビュー索引に起因するからなのでしょうか?

参考までに、この検証プログラムを Notes 11 と Notes 14 のローカル環境でもテストしてみました。結果はヒットしました(Domino 11 と同じ症状)。同じバージョンでもサーバ実行とクライアント実行で症状が違うことがあるんですね。驚きました。

Domino 14 にすれば問題が起こらないようなので、バージョンアップしましょうというメッセージでこの話は収束できそうです。Domino 12 については検証できていませんが、新しいバージョンの方がいいと言えそうです。


今回は、ノーツのグループを事例にしてご紹介しました。グループに限らず発生しうる問題なので紹介させていただきましたが、『日本語のグループ名はサポート外と再認識した話』で記載しましたが、2バイト文字を使用したグループはそもそもサポート外です。ご注意ください。


0 件のコメント:

コメントを投稿