如何获取Domino主组成员的其他群组归属并生成指定CSV?
实现Domino群组成员所属其他群组查询并导出CSV的最优方案
最优选择:LotusScript 实现
针对大量成员的处理需求,LotusScript是最灵活可控的方案——它能轻松处理嵌套群组展开、精准过滤目标群组、自定义CSV输出格式,完全匹配你的需求。
核心实现步骤
- 打开Domino系统目录(
names.nsf) - 读取
Main_Group的所有成员(自动展开嵌套群组,避免遗漏) - 遍历每个成员,查询其所属的所有群组,排除
Main_Group本身 - 按要求格式整理数据,写入CSV文件
示例代码片段
Sub Initialize Dim session As New NotesSession Dim dbDir As NotesDatabase Dim groupDoc As NotesDocument Dim memberList As Variant Dim userName As String Dim personDoc As NotesDocument Dim groupsList As String Dim csvFile As Integer Dim csvLine As String ' 打开Domino目录数据库 Set dbDir = session.GetDatabase("", "names.nsf") If Not dbDir.IsOpen Then dbDir.Open("", "names.nsf") ' 定位Main_Group文档 Set groupDoc = dbDir.GetView("Groups").GetDocumentByKey("Main_Group", True) If groupDoc Is Nothing Then Msgbox "未找到Main_Group群组" Exit Sub End If ' 展开群组所有成员(包含嵌套群组) memberList = groupDoc.GetItemValue("Members") memberList = session.Evaluate("@ExpandGroups(" & memberList(0) & ")", groupDoc) ' 创建并打开CSV输出文件 csvFile = Freefile() Open "C:\DominoMemberGroups.csv" For Output As csvFile ' 写入CSV表头 Print #csvFile, "UserName;DominoGroups" ' 遍历每个成员处理数据 Forall mem In memberList ' 提取纯用户名(去掉组织后缀) userName = Strleft(mem, "/") ' 获取用户对应的个人文档 Set personDoc = dbDir.GetView("People").GetDocumentByKey(mem, True) If Not personDoc Is Nothing Then groupsList = "" ' 读取用户所属群组,排除Main_Group Forall grp In personDoc.GetItemValue("Groups") If grp <> "Main_Group" Then groupsList = IIf(groupsList = "", grp, groupsList & "," & grp) End If End Forall ' 生成CSV行并写入 csvLine = userName & ";" & groupsList Print #csvFile, csvLine End If End Forall Close csvFile Msgbox "导出完成,文件路径:C:\DominoMemberGroups.csv" End Sub
其他方案的局限性
公式视图方案
- 无法自动展开嵌套群组,只能处理直接成员;
- 难以实现排除
Main_Group的逻辑过滤,也无法直接输出指定格式的CSV,仅适合简单的成员列表展示,不满足你的复杂需求。
现成Notes数据库
Domino自带的names.nsf没有原生支持这种定制化导出的功能,第三方工具需要额外部署,灵活性和可控性远不如自定义LotusScript脚本。
内容的提问来源于stack exchange,提问作者Baku Bakar
相关产品推荐
相关产品推荐

