You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IBM Domino:如何合并两个数据库中的NotesDocument?

解决跨数据库合并文档到NotesDocumentCollection的问题

你遇到的Error 4427完全是Notes API的设计限制——NotesDocumentCollection的AddDocument和Merge方法都严格要求操作的文档必须属于创建该集合的数据库,没法直接绕过这个约束。不过根据你的需求场景,有两种实用的解决思路:

方案一:复制文档到目标库后加入集合

如果你的业务允许在目标数据库(比如你说的常规库)中创建归档文档的副本,那这是最直接的办法:先把归档库的文档复制到目标库,再将复制后的本地文档添加到集合里。示例代码如下:

' 假设targetDb是你要创建集合的目标数据库(常规库)
' sourceDoc是来自归档库的文档
Set copiedDoc = sourceDoc.CopyToDatabase(targetDb)
If Not copiedDoc Is Nothing Then
    Set result = targetDb.CreateDocumentCollection
    Call result.AddDocument(copiedDoc)
    ' 循环添加其他需要合并的文档...
End If

注意:复制后的文档会生成新的UNID,如果你需要保留原归档文档的唯一标识,可以把原UNID存到副本文档的自定义字段里。

方案二:用数组/列表存储跨库文档引用

如果不需要在目标库创建文档副本,只是需要“合并”文档引用以便后续统一处理,那可以放弃NotesDocumentCollection,改用Variant数组或者列表来存储来自不同数据库的文档对象。示例代码:

Dim docList As Variant
ReDim docList(0) As NotesDocument

' 添加来自常规库的文档
Set docList(0) = regularDb.GetDocumentByUNID("常规库文档UNID")
' 扩容数组并添加来自归档库的文档
ReDim Preserve docList(1) As NotesDocument
Set docList(1) = archiveDb.GetDocumentByUNID("归档库文档UNID")

' 遍历合并后的文档列表,执行你的业务逻辑
For i = LBound(docList) To UBound(docList)
    Set currentDoc = docList(i)
    ' 比如读取字段:MsgBox currentDoc.GetItemValue("Title")(0)
Next

这种方式只是存储文档的引用,不会修改原数据库的内容,适合只需要读取或处理文档数据的场景。

额外提示

如果你的需求是批量操作(比如批量删除、批量更新),那建议分别对每个数据库的NotesDocumentCollection执行操作,因为Notes的批量API几乎都依赖同库的文档集合,跨库批量操作很难通过单一集合实现。

内容的提问来源于stack exchange,提问作者Frank Yuan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:11:44