#javascript #entity #marklogic
#javascript #сущность #marklogic
Вопрос:
ошибка: [javascript] JS-JAVASCRIPT: пусть экземпляр = Завершен.extract-instance-CompletedObjectives(источник); — Ошибка при выполнении запроса JavaScript: ошибка ссылки: экземпляр не определен:
Мой код:
declareUpdate();
const es = require('/MarkLogic/entity-services/entity-services.xqy');
const Completed = require('/es-gs/CompletedObjectiveEntity-1.0.0-conv.xqy');
for (const source of fn.collection('Objective,Accomplishments')) {
let instance = Completed.extract-instance-CompletedObjectives(source);
let uri = '/es-gs/env/' instance.id '.json';
xdmp.documentInsert(uri, Completed.instanceToEnvelope(instance, "json"),{collections ['CompletedObjective-envelopes']});}
Находится в базе данных модулей:
es-gs/CompletedObjectiveEntity-1.0.0-conv.xqy
Ошибка вывода
Трассировка стека в строке 7, столбец 33: в
let instance = Completed.extract-instance-CompletedObjectives(source);
- const Completed = require(‘/es-gs/CompletedObjectiveEntity-1.0.0-conv.xqy’);
- for (const источник fn.collection(‘Цель, достижения’)) {
- пусть instance = Completed.extract-instance-CompletedObjectives(источник);
- пусть uri = ‘/es-gs/env/’ instance.id ‘.json’;
- xdmp.documentInsert(
Имя функции declare function completedObjectives:extract-instance-CompletedObjectives()
Я использовал генератор экземпляров для создания модуля:
const es = require('/MarkLogic/entity-services/entity-services.xqy');
const ARTIFACT_DIR = '/data/modules/';
const desc = cts.doc('/es-gs/models/CompletedObjective.entity.json');
xdmp.save(ARTIFACT_DIR 'CompletedObjectiveEntity-1.0.0-conv.xqy', es.instanceConverterGenerate(desc));
Может кто-нибудь указать мне правильное направление?
Комментарии:
1. Действительно ли ваша коллекция
Objective,Accomplishments
, или вы намеревались указать массив из двух коллекций:fn.collection(['Objective', 'Accomplishments'])
2. да, я хотел две разные коллекции, но видно, что я получил одну коллекцию
3. fn.collection(‘Objective’, ‘Achievements’)) { — Слишком много аргументов, ожидалось 1, но получено 2
4. Я получаю указанную выше ошибку
5. вы забыли квадратные скобки, он принимает массив в качестве параметра. Не
fn.collection('Objective', 'Accomplishments')
, ноfn.collection(['Objective', 'Accomplishments'])
Ответ №1:
Измените строку 7 вашего кода на:
let instance = Completed.extractInstanceCompletedObjectives(source);
При импорте модуля Entity Services XQuery в модуль JavaScript, даже если методы XQuery имеют кебаб-регистр в исходном коде, они будут открыты и доступны с использованием имен camelCase:
https://docs.marklogic.com/guide/entity-services/getting-started#id_pgfId-1117445
Вызывайте функции, используя их имена в стиле JavaScript с верблюжьим регистром. Например, в случае типа объекта Person функции преобразования модуля могут быть вызваны из серверного JavaScript с использованием следующих имен, предполагая, что модуль представлен переменной с именем person, как показано в приведенном выше требовании require .
person.extractInstancePerson
person.instanceToEnvelope
person.instanceToCanonical
Вы можете проверить имена методов, предоставленные с помощью camelCase, выполнив следующее:
const Completed = require('/es-gs/CompletedObjectiveEntity-1.0.0-conv.xqy');
let functionNames = [];
for (const property in Completed) {
functionNames .push(property);
}
functionNames;
Комментарии:
1. Я просто хотел добавить, что я использовал es.instanceConverterGenerate для создания модуля преобразования экземпляра, и это имя функции, которое он предоставил
2. Верно, я пропустил, что это был импортируемый модуль служб сущностей XQuery. Несмотря на то, что в модуле XQuery это кебаб, при использовании
require()
он должен быть виден какextractInstanceCompletedObjectives()
. Можете ли вы попробовать это?3. Да, я получил следующий результат: extractInstanceCompletedObjectives
4. Я изменил строку 7 на предложенный вами код: я получаю следующую ошибку:
5. PlannedObjective.extractInstanceCompletedObjectives не является функцией
Ответ №2:
Я изменил строку 7 в исходном коде выше на:`let instance = Completed ‘ extract-instance-CompletedObjectives’;`