Xpages 复制文档时,UniversalID无效

Xpages 复制文档时,UniversalID无效,xpages,lotus-notes,Xpages,Lotus Notes,我有一个奇怪的问题:我想访问不同数据库(同一服务器)中的文档。我的方法与这里讨论的方法非常接近: 我在源数据库中只有3个文档。2是直接创建的,一个是从另一个数据库复制的(这些只是测试文档)。我们有一个通用视图,它列出视图中的条目,并以如下形式计算链接: http://localhost/database.nsf/xpMBK.xsp?action=openDocument&db=dominotest%2Ftest%2Fulcbs%21%21projects%2FFKIE%2FEinsMuB

我有一个奇怪的问题:我想访问不同数据库(同一服务器)中的文档。我的方法与这里讨论的方法非常接近:

我在源数据库中只有3个文档。2是直接创建的,一个是从另一个数据库复制的(这些只是测试文档)。我们有一个通用视图,它列出视图中的条目,并以如下形式计算链接:

http://localhost/database.nsf/xpMBK.xsp?action=openDocument&db=dominotest%2Ftest%2Fulcbs%21%21projects%2FFKIE%2FEinsMuB.nsf&view=AMBKEinsAll&documentId=781F14A98A699548C1257C3200316BAC
正如您所看到的,我们在当前数据库中使用了一个Xpage,并放置了一些参数,这些参数指向Xpage以打开文档到源数据库(这里的符号是server!!database)、一个视图(这是我要返回的视图),最后是源文档的unid

奇怪的是: 我无法打开复制的文档,因为收到

NotesException: Invalid universal id
lotus.domino.local.Database.getDocumentByUNID(Unknown Source)
错误。 更好的是:如果我复制了一个在同一个数据库(当前数据库)中工作的文档,这个文档也不能再打开了! 这是什么?你能给我一个提示来解决这个问题吗


提前谢谢

如果“复制”是指手动复制并粘贴到目标数据库中,或通过
copyToDatabase()
以编程方式复制,则文档的新副本将分配一个新的UNID;它不能保证拥有与原版相同的UNID(而且,根据我的经验,它很少保留原版)。如果以编程方式复制文档,请确保在以后检查其新的UNID,并在URL计算中使用该ID。

如果“复制”是指手动复制并粘贴到目标数据库中,或者通过
copyToDatabase()
以编程方式复制,文件的新副本将分配一个新的UNID;它不能保证拥有与原版相同的UNID(而且,根据我的经验,它很少保留原版)。如果要以编程方式复制文档,请务必在以后检查其新的UNID,并在URL计算中使用该ID。

我过去遇到过一个与此非常类似的问题,而答案是我没有打开我以为正在打开的NSF文件。我使用的是
NotesDatabase.OpenByReplicaID
,服务器上有两个数据库副本,包含不同的文档集。在这种情况下,Notes将从两个副本中选择一个副本--您无法控制它。实际上正在打开的复制副本包含一些与我试图访问的unid对应的文档,但其中一些确实不存在,因此
getDocumentByUNID()
方法抛出“Invalid universal id”错误是正确的。这真的很难调试


在我找到答案并从服务器中删除第二个副本后,我做的第一件事(在测试并确认问题消失后)是编写一个代理,扫描服务器以查找重复的副本ID

我在过去遇到过一个与此非常类似的问题,答案是我没有打开我以为正在打开的NSF文件。我使用的是
NotesDatabase.OpenByReplicaID
,服务器上有两个数据库副本,包含不同的文档集。在这种情况下,Notes将从两个副本中选择一个副本--您无法控制它。实际上正在打开的复制副本包含一些与我试图访问的unid对应的文档,但其中一些确实不存在,因此
getDocumentByUNID()
方法抛出“Invalid universal id”错误是正确的。这真的很难调试


在我找到答案并从服务器中删除第二个副本后,我做的第一件事(在测试并确认问题消失后)是编写一个代理,扫描服务器以查找重复的副本ID

通过copyToDatabase将UNID:S复制到数据库时,Domino数据库中的UNID:S是这样完成的。 UNID的一部分来自数据库,另一部分是文档唯一性。因此,如果您将一个文档从一个数据库复制到另一个数据库,则该文档每次都可以获得相同的unid。如果唯一组合在数据库中没有具有该组合的有效文档,则该文档每次都将获得相同的UNID。在其他情况下,文档将获得一个新Id

更多信息可以在这里找到

通过copyToDatabase将UNID:S复制到数据库时,Domino数据库中的UNID:S是这样完成的。 UNID的一部分来自数据库,另一部分是文档唯一性。因此,如果您将一个文档从一个数据库复制到另一个数据库,则该文档每次都可以获得相同的unid。如果唯一组合在数据库中没有具有该组合的有效文档,则该文档每次都将获得相同的UNID。在其他情况下,文档将获得一个新Id

更多信息可以在这里找到
谢谢你们的想法! 但我完全错了 问题是:一位同事编写了一个bean来访问另一个数据库,我没有注意到配置文档指向另一台服务器上的副本,所以当我在本地服务器上复制数据库中的文档时,很明显xpage找不到复制的文档,因为它位于另一台机器上。
无论如何,谢谢你们:)

谢谢你们的想法! 但我完全错了 问题是:一位同事编写了一个bean来访问另一个数据库,我没有注意到配置文档指向另一台服务器上的副本,所以当我在本地服务器上复制数据库中的文档时,很明显xpage找不到复制的文档,因为它位于另一台机器上。 谢谢:)

db参数正确吗?通常它应该是databaseName。您使用的是ignoreRequestsParams吗?db参数正确吗?通常它应该是databaseName。你在用我吗