marklogi c xquery, как зафиксировать обновление, а затем обновление можно использовать следующими строками в той же функции xquery? - PullRequest
0 голосов
/ 10 апреля 2020

Я использую marklogi c 10 для windows 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()
)

Большое спасибо за вашу помощь Хелен

1 Ответ

0 голосов
/ 12 апреля 2020

Хотя есть способы делать все, что угодно, я бы не стал этого делать. Ваш код станет излишне сложным. Просто напишите начальную команду do c с первой ошибкой или добавьте.

Вы также можете написать каждую ошибку как отдельный документ. Ваш файл журнала не будет легко обрабатывать, когда он начнет расти.

HTH!

...