MarkLogic CPF- модуль состояния в конвейере
Версия MarkLogic: 9.0-6.2
Все документы в нашей БД являются JSON, и мы используем Javascript для манипулирования данными. Я пытаюсь создать конвейер, который идентифицирует каждый раз, когда телефонный номер в документе JSON обновляется (с использованием модуля условий), а затем запускает модуль действия. Пока я получил код ниже.
{
"pipeline-name": "CPF async Test",
"pipeline-description": "CPF Test",
"success-action": {
"module": "/MarkLogic/cpf/actions/success-action.xqy"
},
"failure-action": {
"module": "/marklogic/cpf/actions/failure-action.xqy"
},
"status-transition": [
{
"annotation": "",
"status": "updated",
"on-success": "http://marklogic.com/states/done",
"on-failure": "http://marklogic.com/states/error",
"execute": [
{
"condition": {
"module": ???
},
"action": {
"module": "sleepTest.sjs"
}
}
]
}
]
}
Когда я пытался загрузить этот JSON как конвейер с помощью консоли администратора (с фильтром в виде filename.json), я получаю сообщение "Неверный ввод: не найдены читаемые файлы XML:"
Должен ли конвейер быть всегда XML?
Я могу написать (на JavaScript) и успешно выполнить модуль действия. Я проверил это в рамках конвейера XML. Могу ли я написать условный модуль на JavaScript тоже?
Я не уверен, есть ли встроенный модуль условий, предоставляемый MarkLogic, который идентифицирует изменения в свойстве (передавая свойство как параметр в модуль условий). Если да, не могли бы вы указать на документацию? Если мне нужно создать пользовательский модуль условий, как я могу передать старые и новые номера телефонов в модуль? Как бы выглядел модуль условий, желательно в JavaScript?
Большая часть документации, которую я нашел на CPF, - это XML/XQuery. Любые указатели на JSON/JavaScript CPF документацию приветствуются.
Заранее спасибо!
1 ответ
Конвейеры могут быть в формате XML или JSON - в этом примере проекта ml-gradle есть несколько примеров - https://github.com/marklogic-community/ml-gradle/tree/master/examples/cpf-project/src/main/ml-config/cpf/pipelines.
Я думаю, что условные модули могут быть JS или XQuery.
Что касается обнаружения изменений - CPF запускается с помощью триггеров пост-фиксации, поэтому документ будет уже обновлен к моменту запуска модуля условия или действия. Таким образом, вам нужно хранить старое значение где-то в документе. Это относится к MarkLogic, но один из подходов здесь заключается в использовании спецификации JSON Patch, чтобы клиенты указывали изменения с помощью исправлений. Вы можете сохранить патч как отдельный документ (или как часть документа телефонного номера) и обновить документ телефонного номера. Затем модуль условия / действия может просмотреть последний патч, чтобы увидеть, какие изменения были внесены.
В примере, на который указал @rjrudin, в XQuery есть только модуль условий CPF. Ниже приведено сравнение версий XQuery и JavaScript на стороне сервера (ведение журнала отсутствует):
sample-condition.xqy ссылка на оригинал на GitHub
xquery version "1.0-ml";
declare namespace cpf = "http://marklogic.com/cpf";
declare variable $cpf:document-uri as xs:string external;
(: your custom condition logic :)
return true() (: or false() :)
образец-condition.sjs
'use strict'
const cpf = require('/MarkLogic/cpf/cpf')
// your custom condition logic
fn.true() // or fn.false()
Документация: https://docs.marklogic.com/js/cpf