【问题标题】:MarkLogic 10 - managed document throwing exception on dls:document-checkout-update-checkinMarkLogic 10 - 托管文档在 dls:document-checkout-update-checkin 上抛出异常
【发布时间】:2019-07-25 16:53:15
【问题描述】:

我已管理名为 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())

上面的脚本片段正在抛出异常,

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

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

【问题讨论】:

    标签: marklogic marklogic-9 marklogic-10


    【解决方案1】:

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

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

    【讨论】:

    • 在现有的工作应用程序中,有一些 MarkLogic 迁移脚本以这样的方式编写,它遍历所有文档并执行公共更新。这些脚本是为 MarkLogic 7 编写的,我正在尝试在 MarkLogic 10 上运行这些脚本。
    • 让我简要介绍一下历史,xdmp:document-insert 在更新过程中将文档保存在 MarkLogic 7 中的托管文档集合中。根据与@rob-s 的讨论,他建议使用dls:document-checkout-update-checkin 在MarkLogic 10 的集合中维护该文档。
    • @IAM 听起来您的脚本修改了 DLS 管理的数据和/或滥用公共 API。在主要版本更改之后出现这种未定义的行为应该不足为奇。
    【解决方案2】:
    dls:document-checkout-update-checkin($uri, , 'Update', fn:true())
    

    第二个参数应该是您要替换现有文档的文档节点。

    您可能还想检查 dls:document-checkout-status 以查看其他用户当前是否已签出该文档。

    【讨论】:

    • Rob,存在 XML 文档作为第二个参数,但未在 UI 中显示。此处无法分享屏幕截图。
    【解决方案3】:

    我建议您在 ML 更新(从 V8- 到 9+)之后对 DLS 文档进行任何工作之前,先学习、完全理解(或者如果您不这样做,请寻求支持)并执行此处的程序https://docs.marklogic.com/guide/relnotes/chap4#id_65479。 在您执行升级之前,DLS V9 开箱即用,与以前的版本不兼容。升级不会自动执行,可能不会(起初)注意到不升级或部分升级的症状。 有关检查所有 DLS 文档状态的新功能的详细信息。即使在您升级以验证所需的权限、属性和集合是否完好无损后,这些也很有用。

    然后,我鼓励您研究处理 DLS 文档的体系结构和过程。不支持这些程序之外的任何内容,并且很难正确处理(这就是不支持的原因)。 请注意,您可能会发现进行批量签出,然后更新然后批量签入比一次性文档签出插入签入更适合您的用例。 另请注意记录的 DLS 的权限和索引要求。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-19
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-20
      相关资源
      最近更新 更多