erreur: [javascript] JS-JAVASCRIPT: let instance = Completed.extract-instance-CompletedObjectives (source); - Erreur lors de l'exécution de la requête JavaScript: ReferenceError: l'instance n'est pas définie:

Mon code:

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']});}

Est dans la base de données des modules: es-gs/CompletedObjectiveEntity-1.0.0-conv.xqy

L'erreur de sortie est

Trace de la pile À la ligne 7 colonne 33: Dans 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 (

Le nom de la fonction est declare function completedObjectives:extract-instance-CompletedObjectives()

J'ai utilisé le générateur d'instances pour créer le module:

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));

Est-ce que quelqu'un peut-il me montrer la bonne direction?

1
bdkdavid 23 oct. 2020 à 22:29

2 réponses

Meilleure réponse

J'ai changé la ligne 7 dans le code d'origine ci-dessus en: `` let instance = Completed'extract-instance-CompletedObjectives '; ``

0
bdkdavid 27 oct. 2020 à 20:47

Remplacez la ligne 7 de votre code par:

let instance = Completed.extractInstanceCompletedObjectives(source);

Lorsque vous importez le module XQuery Entity Services dans un module JavaScript, même si les méthodes XQuery ont kebab-case dans la source, elles seront exposées et disponibles en utilisant les noms camelCase:

https://docs.marklogic.com/guide/entity-services/getting-started#id_pgfId-1117445

Appelez les fonctions en utilisant leurs noms de casse camel de style JavaScript. Par exemple, dans le cas du type d'entité Person, les fonctions de convertisseur de module peuvent être appelées à partir de JavaScript côté serveur en utilisant les noms suivants, en supposant que le module est représenté par une variable nommée personne, comme indiqué dans l'instruction require ci-dessus.

  • person.extractInstancePerson
  • person.instanceToEnvelope
  • person.instanceToCanonical

Vous pouvez vérifier les noms de méthode exposés avec camelCase en exécutant ce qui suit:

const Completed = require('/es-gs/CompletedObjectiveEntity-1.0.0-conv.xqy');
let functionNames = [];
for (const property in Completed) {
  functionNames .push(property);
}
functionNames;
2
Mads Hansen 26 oct. 2020 à 16:05