Я пытаюсь обновить значение некоторого свойства в xDB с помощью XQuery, вот моя транзакция:

let $source := doc('/historicalresource')/HistoricalResourceData[id/@UUID = '0361513e-30fa-45e4-a73a-d05870b8a284']

let $res := $source/ResourceProperty[@PropertyName="cpu|limit"]/@PropertyValue

let $change := '21572'

return replace value of node $res with $change

После выполнения этого запроса я получаю такую ошибку:

com.xhive.error.XhiveException: VERSION_ACCESS_DENIED: этот документ версируется и может быть изменен только с помощью операции управления версиями

Действительно, в моем случае historicalresource - это папка, которая может содержать более одного документа, и все они имеют версию, например: v1.1, v1.2 и т. Д.

Как я могу обновить значение последней версии с помощью xquery? Как мне изменить свой запрос, чтобы иметь возможность обновлять желаемое значение?

0
Anahit Serobyan 29 Фев 2016 в 16:17

2 ответа

Лучший ответ

Наконец, я нашел ответ на свой вопрос, поэтому добавил его здесь:

Невозможно обновить файл xDB с помощью xQuery, поскольку это система, основанная на версиях, и xQuery не может создать новую версию, но это можно сделать вручную или автоматически с помощью какого-либо языка программирования (например: java):

  1. Вручную - путем редактирования существующей версии в xDB, в этом случае новая версия будет автоматически создана после сохранения любого изменения в существующей версии файла.
  2. Автоматически - путем извлечения файла, внесения изменений и отправки изменения как новой версии.
0
Anahit Serobyan 18 Ноя 2016 в 10:26

Для версионных документов (для которых был вызван XhiveLibraryChildIf.makeVersionable()) это действительно так: вы должны сначала проверить документ, затем выполнить запрос на обновление для извлеченной копии и, наконец, проверить новую версию. документы без версий, однако вы можете применить запрос на обновление напрямую.

0
Vojtěch Toman 17 Окт 2017 в 12:35