2026/03/05

NotesDBDirectry の使い方

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 でソートするには以下の記事を参考にしてください。


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 件のコメント:

コメントを投稿