marklogic xquery如何提交更新,然后可以通过同一xquery函数中的以下行使用更新?

问题描述 投票:0回答:1

我正在Windows 10上使用marklogic 10。

我有一个工作流程,我想记录每个步骤的信息。所以我想要在数据库中有类似的东西,我更新数据,提交,然后可以在下面的代码中立即使用此数据。这可行吗?以及如何?

例如,在下面的示例代码中,假设这是我第一次编写日志,我想在登录之前创建文档。因此,我创建了日志文档,提交,然后将日志节点插入此日志文档中。但是似乎日志文件已创建,但是日志节点未插入日志文件中。我该如何运作?我的想法是我想要一个可以将日志节点插入日志文件并且不受以下代码任何失败影响的功能]

let $logFile := "/workflow/tracking/load-log.xml"
let $thisErrorMsg := <error>
                           <time>2020/04/10</time>
                           <desc>test</desc>
                     </error>
let $_log-file-exists := if(fn:empty(fn:doc($logFile)))
                        then
                            let $root := <errors></errors>
                            return
                            (
                              xdmp:set-transaction-mode("update")
                              ,
                              xdmp:document-insert(
                                  $logFile,
                                  $root,
                                  <options xmlns="xdmp:document-insert">  
                                    <permissions>{xdmp:default-permissions()}</permissions>
                                    <quality>10</quality>
                                  </options>)
                                ,
                               xdmp:commit()
                             )
                         else ()
return 
(
xdmp:set-transaction-mode("update")
,
xdmp:node-insert-child( fn:doc($logFile)/errors, $thisErrorMsg)
,
 xdmp:commit()
)

非常感谢您的帮助海伦

marklogic commit
1个回答
0
投票

虽然有多种方法可以满足您的要求,但我会避免这样做。您的代码将变得不必要地复杂。只需编写带有第一个错误的初始文档,或附加。

您还可以考虑将每个错误作为单独的文档编写。当您的日志文件开始变大时,它将不容易处理。

HTH!

© www.soinside.com 2019 - 2024. All rights reserved.