Свойство Marklogic Transactional с серверной частью JavaScript - PullRequest
0 голосов
/ 24 октября 2018

Я пытался запустить серверный JavaScript-код в marklogic, чтобы понять свойство транзакции marklogic.У меня есть 2 оператора, одно обновление и другой оператор запроса в одной транзакции.

Ниже приведен мой код JavaScript:

declareUpdate({explicitCommit: true});

xdmp.documentInsert("/docs/first.json", {"first": 1});

fn.doc("/docs/first.json");

xdmp.commit();

//xdmp.rollback()

Предполагается, что приведенный выше код, запущенный в консоли запросов, будет вставлен "/docs/first.json "и затем запрос" /docs/first.json". Первый оператор в транзакции, который является вставкой документа, работает нормально, но затем второй оператор не выполняется, и запрос возвращает меня "null".Также, когда я использовал xdmp.rollback, он выдавал ошибку: [javascript] TypeError: Невозможно прочитать свойство 'result' с нулевым значением .Может ли кто-нибудь объяснить это, потому что в одной транзакции операторы должны видеть результаты ранее выполненных операторов.Тот же запрос, который я выполнил в Xquery, и я смог увидеть результат.

Ниже приведен мой код Xquery:

xquery version "1.0-ml";

declare option xdmp:commit "explicit";

xdmp:document-insert('/docs/mst1.xml', <data/>);

fn:doc('/docs/mst1.xml');

xdmp:document-insert('/docs/mst2.xml', fn:doc('/docs/mst1.xml'));

xdmp:rollback()

Приведенный выше код возвращает мне документ с результатом, представленный в URI.«/docs/mst1.xml», что <data> </data>

1 Ответ

0 голосов
/ 24 октября 2018

Исходя из моего понимания документации , невозможно выполнить транзакции с несколькими операторами таким образом из JavaScript:

  • В XQuery, действия с запятойв качестве разделителя между операторами в одной и той же транзакции.
  • В JavaScript на стороне сервера вся программа (скрипт) считается одним оператором транзакции, независимо от того, сколько операторов JavaScript оно содержит.

Возможно, вам придется полагаться на такие функции, как xdmp.invokeFunction, чтобы явно зафиксировать несколько транзакций операторов из JavaScript.

...