MarkLogic 10-dls上托管文档引发异常:文档签出更新签入

MarkLogic 10-dls上托管文档引发异常:文档签出更新签入,marklogic,marklogic-9,marklogic-10,Marklogic,Marklogic 9,Marklogic 10,我已经管理了名为123456.xml的文档,我正在尝试使用dls库函数对其进行更新,如下所示 declare variable $uri:= "/abc/123456_xml_versions/1-123456.xml"; dls:document-is-managed($uri), dls:document-checkout-update-checkin($uri, $xml, 'Update', fn:true()) 上面的脚本snip在下面抛出异常 [1.0-ml]DLS-DOCUME

我已经管理了名为
123456.xml
的文档,我正在尝试使用dls库函数对其进行更新,如下所示

declare variable $uri:= "/abc/123456_xml_versions/1-123456.xml";

dls:document-is-managed($uri),
dls:document-checkout-update-checkin($uri, $xml, 'Update', fn:true())
上面的脚本snip在下面抛出异常

[1.0-ml]DLS-DOCUMENTVERSION:(错误:FOER0000)无法更新或签出文档版本/abc/123456_xml_versions/1-123456.xml

这是正在更新文档所有版本的应用程序的现有迁移操作

dls:document-checkout-update-checkin($uri, , 'Update', fn:true())
第二个参数应该是要替换现有文档的文档节点


您可能还想检查其他用户当前是否签出了文档。

不要从
版本
目录中为DLS函数提供URI。这些URI由DLS管理。只需为其提供要更新的文档的规范URI,DLS就会自动为您增加版本:

declare variable $uri:= "/abc/123456/123456.xml";
...

我建议您在ML更新(从V8到9+)后使用DLS文档之前,先学习、完全理解(如果不理解,请寻求支持)并执行此处的步骤。 在您执行升级之前,DLS V9出厂时与以前的版本不兼容。升级不会自动执行,并且可能不会注意到(最初)未升级或部分升级的症状。 关于检查所有DLS文档状态的新功能有很多详细信息。即使在升级以验证所需的权限、属性和集合是否仍然完好无损之后,这些功能也很有用

然后,我鼓励您学习使用DLS文档的体系结构和过程。这些过程之外的任何内容都不受支持,而且很难正确操作(这就是为什么它不受支持的原因)。 请注意,您可能会发现执行批量签出,然后更新,然后批量签入比一次性文档签出插入签入更适合您的用例。
还要注意记录的DLS的权限和索引要求。

Rob,有XML文档作为第二个参数存在,但未显示在UI中。这里没有办法共享屏幕截图。在现有的工作应用程序中,有一些MarkLogic迁移脚本的编写方式是,它迭代所有文档并执行公共更新。这些脚本是为MarkLogic 7编写的,我正在尝试在MarkLogic 10上运行这些脚本。让我简要介绍一下历史记录,
xdmp:document insert
在更新过程中在MarkLogic 7的托管文档集合中保存文档。根据与@rob-s的讨论,他建议使用
dls:document checkout update checkin
在MarkLogic 10的集合中维护该文档。@IAM听起来您的脚本修改了dls管理的数据和/或滥用了公共API。在重大版本更改之后出现这样未定义的行为并不令人惊讶。