如何通过 vba 从 domino 服务器获取用户信息

How to get user-Information from domino-server via vba

我为 ms word 编写了一个宏,它在加载文档时启动,并用用户信息(电话、电子邮件等)填充一些字段。我希望这些信息来自我们的多米诺服务器,因为它们是我们的主要数据库。

我曾尝试使用 vba 中的笔记对象在服务器上建立会话,但这需要用户保持他们的笔记客户端打开(据我所知),所以那不是一个选项.

目前我正在尝试通过 ldap 请求获取信息(domino 服务器运行 ldap 服务),但是我找不到有关代码和搜索字符串的外观的信息。 我尝试的最后一个网站是这个 (http://www.selfadsi.org/bind.htm),使用 "Bind using special credentials" 变体。

但我收到协议错误。(可能需要调整字符串以连接到多米诺骨牌,我尝试了 "LDAP://[Server-FQN]/dc=DE" 希望它会向我显示所有注册为 C=DE 的用户,但它没有工作。)

我还搜索了 IBM 的支持站点和知识中心,但找不到我需要的信息。

如果有人能提供一个关于如何连接到 domino ldap 并为用户提取信息的示例,我将不胜感激。

在 VBA 中有两组不同的 Notes 对象可供您使用。有 OLE 对象,您可以通过这种方式访问​​它们:

Set Session = CreateObject("Notes.NotesSession")

还有一些 COM 对象,您可以通过这种方式访问​​它们:

Set Session = CreateObject("Lotus.NotesSession")

它们之间的主要区别是 OLE 对象要求 Notes 客户端必须是 运行 并且它们还包括 "front-end" 类 像 Notes.NotesUIWorkspace 实际上可以驱动 Notes 客户端,而 COM 对象不要求 Notes 客户端是 运行(尽管必须安装它或 Domino 服务器)并且它不提供 front-end 类.

如果您想坚持使用 LDAP 方法,您应该做的第一件事可能是下载 LDAP 客户端。我喜欢 SoftTerra LDAP 浏览器,但我也听说很多人喜欢 Apache Directory Studio。浏览树确实是找出哪些查询将为您提供所需信息的最佳方式。

在 Richards 回答的评论中提到,我也尝试使用 LDAP-Browser 找到 LDAP-String。这样做并使用 ADODB 对象进行一些测试,我能够得出以下代码:

Set objConnection = CreateObject("ADODB.Connection")
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
Set objCommand.ActiveConnection = objConnection

objCommand.CommandText = "SELECT UID, mail FROM 'LDAP://[Server-FQN]:389 'WHERE ObjectClass='dominoPerson'"
Set objRecordSet = objCommand.Execute

While Not objRecordSet.EOF
    varMail = objRecordSet.Fields("mail").Value
    Debug.Print varMail(0)
    objRecordSet.MoveNext
Wend

提取所有使用匿名访问的用户的 email-adress 并将结果打印到调试 window 中。 现在我所要做的就是调整 WHERE-Statement 以获得我想要的每个用户的数据。 :-)