未使用实例转换器模块定义 MarkLogic 错误实例
MarkLogic Error instance is not defined using instance converter module
error: [javascript] JS-JAVASCRIPT: let instance = Completed.extract-instance-CompletedObjectives(source); -- Error running JavaScript request: ReferenceError: instance is not defined:
我的代码:
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
输出错误为
Stack Trace
At line 7 column 33:
In let instance = Completed.extract-instance-CompletedObjectives(source);
- 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(
函数名称是
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));
谁能指出我正确的方向?
将代码的第 7 行更改为:
let instance = Completed.extractInstanceCompletedObjectives(source);
当您在 JavaScript 模块中导入 Entity Services XQuery 模块时,即使 XQuery 方法在源代码中有 kebab-case,它们也会公开并使用驼峰命名:
https://docs.marklogic.com/guide/entity-services/getting-started#id_pgfId-1117445
Invoke the functions using their JavaScript-style, camel-case names. For example, in the case of the Person entity type, the module converter functions can be invoked from Server-Side JavaScript using the following names, assuming the module is represented by a variable named person, as shown in the above require statement.
person.extractInstancePerson
person.instanceToEnvelope
person.instanceToCanonical
您可以通过执行以下命令来验证使用驼峰命名法公开的方法名称:
const Completed = require('/es-gs/CompletedObjectiveEntity-1.0.0-conv.xqy');
let functionNames = [];
for (const property in Completed) {
functionNames .push(property);
}
functionNames;
我把上面原代码中的第7行改成了:`let instance = Completed'extract-instance-CompletedObjectives';``
error: [javascript] JS-JAVASCRIPT: let instance = Completed.extract-instance-CompletedObjectives(source); -- Error running JavaScript request: ReferenceError: instance is not defined:
我的代码:
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
输出错误为
Stack Trace At line 7 column 33: In
let instance = Completed.extract-instance-CompletedObjectives(source);
- 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(
函数名称是
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));
谁能指出我正确的方向?
将代码的第 7 行更改为:
let instance = Completed.extractInstanceCompletedObjectives(source);
当您在 JavaScript 模块中导入 Entity Services XQuery 模块时,即使 XQuery 方法在源代码中有 kebab-case,它们也会公开并使用驼峰命名:
https://docs.marklogic.com/guide/entity-services/getting-started#id_pgfId-1117445
Invoke the functions using their JavaScript-style, camel-case names. For example, in the case of the Person entity type, the module converter functions can be invoked from Server-Side JavaScript using the following names, assuming the module is represented by a variable named person, as shown in the above require statement.
person.extractInstancePerson
person.instanceToEnvelope
person.instanceToCanonical
您可以通过执行以下命令来验证使用驼峰命名法公开的方法名称:
const Completed = require('/es-gs/CompletedObjectiveEntity-1.0.0-conv.xqy');
let functionNames = [];
for (const property in Completed) {
functionNames .push(property);
}
functionNames;
我把上面原代码中的第7行改成了:`let instance = Completed'extract-instance-CompletedObjectives';``