3

LotusScript 駆動型アプリケーションでは、NotesDirectory.LookupNamesDirNav を作成し、個人文書からデータを取得するために を多用します。サーバーのプライマリ NAB を使用するだけで問題なく動作します。ルックアップに ($Users) ビューを使用し、一致する個人ドキュメントのフィールドから値を返します。

これを拡張して、セカンダリ NAB に保存されている人物も検索できるようにする必要があります。このセカンダリ NAB は、アプリケーションが実行されているサーバーに複製され、ディレクトリアシスタントが設定されます。私の知る限り、DA は基本的に機能しており (たとえば、セカンダリ NAB は標準の名前ダイアログから選択できます)、セカンダリ NAB は完全なディレクトリのように見えます。少なくともデータベースのプロパティは、それが「ドミノ ディレクトリ」タイプの DB であると言っています。

問題はNotesDirectory.LookupNames、セカンダリ NAB に保存されている名前を探している場合、使用しても結果が得られないのに対し、プライマリ NAB に保存されている名前を検索しても機能することです。

これが実行されるサーバーは V 11.0.1 です。すべての NAB および da.nsf は、より多くのまたは最新の設計を実行しています (V 10.0.1 サーバーにあるテンプレートから設計の更新を実行しました)。

主な質問は、これはそもそも機能するはずですか? クラスのドキュメントは「ディレクトリ」について述べているだけなので、これは可能であると思います。どんなヒントでも大歓迎です

-- 2021-02-24 更新 --

完全を期すために、Scott によって提案された (修正された) テスト エージェントのコードを次に示します。ユーザー #1 はプライマリ ディレクトリからのものであり、#2 はセカンダリ ディレクトリからのものです。

Sub Initialize
    Dim sn As New NotesSession
    Dim nDir As NotesDirectory
    Dim nDirNav As NotesDirectoryNavigator
    Dim sKey As String, sVw As String, sSrv As String
    Dim vItems As Variant, vItem As Variant, vResult As Variant, vKeys As Variant
    Dim i As Integer
    
    sVw = "($Users)"
    sSrv = "devtest/edcomTest"
    Set nDir = sn.Getdirectory(sSrv)
    nDir.Searchalldirectories = True 'Not really necessary, but doesn't hurt either
    ReDim vKeys(1)
    vKeys(0) = "sautor1"
    vKeys(1) = "Veronika.Test@edcomtest.de"
    ReDim vItems(2)
    vItems(0) = "Type"
    vItems(1) = "FullName"
    vItems(2) = "ShortName"
    ReDim vResult(0)
    
    Set nDirNav = nDir.Lookupnames(sVw, vKeys, vItems, False)
    Do While nDirNav.Namelocated
        Do While nDirNav.Matchlocated
            vItem = nDirNav.Getfirstitemvalue()
            vResult(0) = vItem(0)
            'Looping the other items
            For i=1 To 2
                vItem = nDirNav.Getnextitemvalue()
                vResult = ArrayAppend(vResult, vItem(0))
            Next
            Call nDirNav.Findnextmatch()
        Loop
        Call nDirNav.Findnextname()
    Loop
    
    Print Join(vResult, "; ")
    
End Sub
4

1 に答える 1