(以下 2023/05/15 追記)
このブログエントリで紹介している DXL Import 機能は正しく動くようになりました。記録として残しておきますが、現状は問題なく動作します。
(以上 2023/05/15 追記)


自作ツール dxl.vbs を紹介する目的で先日こんなブログエントリを書きました:
ノーツデータベースの設計変更履歴を git で管理する

このツール(dxl_export.vbs)は HCL Notes のデータベースをテキスト(XML)化することで、本来はバイナリデータであるデータベースファイルの設計変更履歴(ちょっとカスタマイズするとデータも含めた変更履歴)を git で管理できるようにする、というものです。テキストデータになっていれば変更差分の履歴や、変更一回ごとに限らず任意の2つのタイミングでの変更差分を比較する、といったことも(git の機能として)可能になる、というものでした。

実はこの dxl.vbs にはもう1つ dxl_import.vbs というツールがあります。Export と Import ということで、なんとなく機能の想像がつくかもしれませんが「XML 化されたデータから Notes データベースを復元する」ためのものです。git で変更履歴を管理しつつ、どこかのタイミングで使っていた設計状態に git checkout して、その状態を作成した時のノーツデータベースを復元する、というためのものです。が、残念ながら現時点ではこちらは期待通りに動きません。その点に関する解説ブログエントリとして記載します。

もともとこのツールは LotusScript および Java の API として用意されている DXL Import/Export の機能を使って実装しています。ツールそのものは VBS で、いわゆる ActiveX/COM を使って NotesSession オブジェクトを生成し、そこからこれらの機能を呼び出すことで Export で XML 化し、Import で復元を実装しています。この Import 部分がどうも正しく動いていないように見えるのでした。

少し補足をすると、DXL Export を実行すると指定されたデータベースが XML 化されます。実はここにも一点問題があって、「データに日本語が含まれている場合、XML には encoding 指定のない(つまり UTF-8 )データが出力されるが、実際にはシフト JIS の日本語データが含まれる」というものです。この時点で XML データとしての不整合が生じてしまっています。そのため本ツール(dxl_export.vbs)では、この XML データを書きだす前に強制的に encoding="Shift_JIS" を追加してから出力することで不整合を回避しています。

で、改めて dxl_import.vbs ですが、現状ではこのツールを実行することでノーツデータベースファイル(.nsf ファイル)を(日本語文字列含めて)復元することまではできています(※)。が、この復元結果をノーツクライアントから開こうとするとこのようなエラーが発生してしまって正しく開くことができないのでした:
20230508

↑左のアイコンがある方が元のデータベースで、これを dxl_export してから dxl_import したものが右のアイコンがない方。アイコンは復元できていないが、(日本語の)データベースタイトルは復元できている。でも開くことはできない。

※厳密には dxl_import.vbs 実行時に以下のようなエラーが発生しています。エラーにはなるけど .nsf ファイルは出力されている、という状況です:
2023051402


なお、この復元された(?)ノーツファイルを Domino Designer で開くと、フォームなどの設計要素が空になっています。という意味ではやはり DXL Import に失敗しているとみるべきなのだと思っています:
2023051401


XML の encoding 設定を勝手に書き換えたのがよくなかったのか、、と思ってやり直してみても結果は同じ。というわけで DXL Import がおかしいのか、あるいはその前の DXL Export の時点で何か間違っているのか、その両方なのか・・・ この辺りはもう手が出せないのでこれ以上の対応が難しいのですが、ここがなんとかなればこの1対のツールとしても完成すると思っています。