【发布时间】:2021-02-23 18:20:43
【问题描述】:
在 LotusScript 驱动的应用程序中,我们大量使用 NotesDirectory.LookupNames 来创建 DirNavs 并从个人文档中检索数据。仅使用服务器的主 NAB 即可正常工作:我们使用 ($Users) 视图进行查找,然后从匹配的人员文档的字段中返回值。
现在我们必须扩展它,以便我们还能够查找存储在辅助 NAB 中的人员。此辅助 NAB 被复制到运行应用程序的服务器,并设置目录服务。 AFAIK DA 基本上可以工作(例如,可以从标准名称对话框中选择辅助 NAB),辅助 NAB 似乎是一个完整目录;至少数据库属性表明它是“Domino 目录”类型的数据库。
问题是:如果我们正在查找存储在辅助 NAB 中的名称,使用 NotesDirectory.LookupNames 不会产生任何结果,而查找存储在主要 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
【问题讨论】:
-
您是否在代码中设置了
SearchAllDirectories属性? Notes Help 说该属性的值默认为 True,看起来它必须为 True 才能执行您想要的操作。 (顺便说一句,如果您包含您的代码,这样就不需要问这个问题了。) -
感谢提示;你是对的,该属性默认设置为true,我仍然设置它,它没有帮助。最后我找到了一个相当愚蠢的错字的原因。真丢人!
标签: lotus-notes lotus-domino lotusscript hcl-notes