Domino サーバの管理アプリを作成しているとサーバ内のアプリケーションの一覧を取得したくなることがあります。このようなときに利用するのが NotesDbDirectory クラスです。
先日久しぶりにこのクラスを利用しようとしたとき、思い出せずヘルプのお世話になりました。いい機会なので使い方などをまとめておきたいと思います。
オブジェクトの取得方法
NotesDbDirectory クラスは NotesSession クラスと同様に New でオブジェクトを新規作成することができます。
| Dim ndbdir As NotesDbDirectory Set ndbdir = New NotesDbDirectory( serverName$ ) |
引数には一覧を取得したいサーバ名を設定します。Null を指定するとサーバではなく、ローカルに接続します。
一覧の取得
接続したサーバの一覧を取得するには GetFirstDatabase というメソッドを使用します。
| Set ndb = ndbdir.GetFirstDatabase(DATABASE)
|
引数には、データベースの種類を指定します。次の定義済みの定数が利用できます。
| 値 | 定数 | 説明 |
| 1247 | DATABASE | Notes データベース (NSF ファイル) |
| 1248 | TEMPLATE | Notes データベースのテンプレート (NTF ファイル) |
| 1245 | REPLICA_CANDIDATE | 複製不可ではない Notes のデータベースまたはテンプレート |
| 1246 | TEMPLATE_CANDIDATE | Notes データベースまたはテンプレート |
GetFirstDatabase 実行すると一覧の最初のデータベースが返されます。その次のデータベースは GetNextDatabase メソッドを使用ます。
例えば、次のスクリプトでは、ローカルのすべてのデータベースのファイルパスを順にメッセージボックスで表示します。
| Dim ndbdir As NotesDbDirectory Dim ndb As NotesDatabase Set ndbdir = New NotesDbDirectory("") 'ローカルに接続 Set ndb = ndbdir.GetFirstDatabase(DATABASE) '最初のDB While Not (ndb Is Nothing) MsgBox ndb.FilePath Set ndb = ndbdir.GetNextDatabase() '次のDB Wend |
最後のデータベースの次は Nothing となる点がポイントですね。
一覧はソートされていない
NotesDbDirectory クラスが作成する一覧がどのような順序なのかは不明です。例えば、上記スクリプトをあるサーバに対して実行したところ次のような結果でした。少なくともファイルパス順ではないようです。
|
homepage.nsf AgentRunner.nsf PwdResetSample.nsf help\decsdoc.nsf help\lccon.nsf help\lsxlc.nsf help\help14_admin.nsf help\help14_client.nsf help\jconfr11.nsf help\help14_designer.nsf help\help145_admin.nsf help\help145_client.nsf help\help145_designer.nsf panagenda\PMCInstaller.nsf panagenda\pmc_config.nsf panagenda\pmc_analyze.nsf iNotes\Forms9.nsf ontime\installer.nsf ontime\ontimegc.nsf ・・・ |
作成する処理によってはソートする必要があります。LotusScript でソートするには以下の記事を参考にしてください。
- 2024.08.30 LotusScript で値のソートを作成
- 2024.09.01 複数のフィールド値をセットでソート
DB は Open されていない
NotesDbDirectory クラスを利用した特徴をもう一点。取得した NotesDatabase は「Open されていない」点に注意が必要です。
例えば、上記スクリプトを変更して文書数を取得するように変更します。
| MsgBox ndb.AllDocuments.Count |
すると、次のようなエラーが発生します。
このエラーを回避するためには NotesDatabase クラスの Open メソッドで DB を開く必要があります。
NotesDbDirectory クラスは、DB をリストアップすることが目的のクラスです。この時点では、ファイルパスや DB 名のように公開されている情報のみにアクセスできます。これが Open されていない状態ということになります。
DB 内の文書(数)にアクセスするためには適切な ACL が必要です。Open することで ACL が評価され、文書にアクセスできるということになります。
アプリケーションを開くダイアログでは、アクセス権のない DB もリストアップされます。DB を選択して開こうとすると ACL が評価されます。このタイミングと Open が同じだと理解すればわかりやすいですね。
ちなみに、LotusScript のヘルプでは、Open が必要な機能は明示されています。


0 件のコメント:
コメントを投稿