MarkLogic 8 - 使用文档管理和结帐的XQuery

时间:2016-04-08 10:38:09

标签: xquery marklogic marklogic-8

我尝试了下面提到的xquery。如果文档未被管理,我想使用DLS查询管理文档,否则我想签出文档。

xquery version "1.0-ml";
import module namespace dls = "http://marklogic.com/xdmp/dls"  at "/MarkLogic/dls.xqy";

let $uri :="/root/189966_01.xml"

let $i := dls:document-is-managed($uri)

return 
  if ($i = fn:false())
  then 

    dls:document-manage($uri,  fn:false(),   "Baz is now a managed document") 

    (:  dls:document-checkout($uri, fn:true(), "updating doc", 3600) :)

  else if ($i = fn:true())
  then

      dls:document-checkout($uri, fn:true(), "updating doc", 3600) 

  else 

    "No action"

如果我身上有任何问题,请纠正我。

2 个答案:

答案 0 :(得分:1)

xquery看起来很好。只是重构上面的查询 -

xquery version "1.0-ml";
import module namespace dls = "http://marklogic.com/xdmp/dls"  at "/MarkLogic/dls.xqy";    
let $uri :="/root/189966_01.xml"    
let $i := dls:document-is-managed($uri)    
return 
    if ($i = fn:false()) then     
        dls:document-manage($uri,  fn:false(),   "Baz is now a managed document")    
    else     
        if ($i = fn:true()) then    
            dls:document-checkout($uri, fn:true(), "updating doc", 3600)     
    else    
        ()

答案 1 :(得分:0)

您不能在同一笔交易中结帐和管理。您可以在同一请求中签出2个独立的事务,由父事务管理(只要您在此之前或期间不持有任何锁即可。