未使用实例转换器模块定义 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);

  1. const Completed = require('/es-gs/CompletedObjectiveEntity-1.0.0-conv.xqy');
  2. for (const source of fn.collection('Objective,Accomplishments')) {
  3. let instance = Completed.extract-instance-CompletedObjectives(source);
  4. let uri = '/es-gs/env/'+ instance.id + '.json';
  5. 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';``