MarkLogic CPF- модуль состояния в конвейере - PullRequest
0 голосов
/ 10 января 2019

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 документацию приветствуются.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Пример, на который указал @ rjrudin , имеет только модуль условий CPF в XQuery. Ниже приведено сравнение версий 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

0 голосов
/ 11 января 2019

Конвейеры могут быть в формате 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, чтобы клиенты указывали изменения с помощью исправлений. Вы можете сохранить патч как отдельный документ (или как часть документа телефонного номера) и обновить документ телефонного номера. Затем модуль условия / действия может просмотреть последний патч, чтобы увидеть, какие изменения были внесены.

...