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"
          }
        }
     ]
   }
 ]
}
  1. Когда я пытался загрузить этот JSON как конвейер с помощью консоли администратора (с фильтром в виде filename.json), я получаю сообщение "Неверный ввод: не найдены читаемые файлы XML:"

    Должен ли конвейер быть всегда XML?

  2. Я могу написать (на JavaScript) и успешно выполнить модуль действия. Я проверил это в рамках конвейера XML. Могу ли я написать условный модуль на JavaScript тоже?

  3. Я не уверен, есть ли встроенный модуль условий, предоставляемый 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

Другие вопросы по тегам