L'expression prédéfinie OA_buildManyCompositeKey génère des valeurs de clés erronées avec des valeurs contenant le chaîne "NULL_KEY" qui ne sont pas attendues et provoquent des erreurs à l'insertion des données.
La planche ci-dessous illustre le problème rencontré avec l'archive de test en PJ contenant le fichier de conf et les 2 ddr :
Ci-dessous, la copie d'écran de l'erreur retournée par l'appli levée à l'insertion du fichier variable.csv par le checker reference :
j'ai essayer de faire avec le groovy de @damien.maurice revue avec une boucle for directement (si jamais c'était le .each qui posé problème) :
String res = "";def tab_vcat_code = datum.var_file_vcat_code.split(",");for (String vcat_code in tab_vcat_code) { res = res + datum.var_file_vcat_theme + "__" + vcat_code; if (vcat_code != tab_vcat_code.last()) { res = res + ","; }}return res;
et voici l'erreur que j'ai :
javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:Script30.groovy: 1: Unexpected input: 'res' @ line 1, column 244. { res = res + ","; } } return res;
le return n'est pas accepté c'est comme il le faisait plusieurs fois si je comprend bien.
si je met une expression groovy avec juste une variable et que je teste l'expression groovy mis plus haut directement dans la fonction evaluate() elle renvoit bien le résultat attendu. mais si je la met dans le yaml je m'arrête sur l'erreur ci dessus.
De : forge-mia
Envoyé : vendredi 7 février 2025 10:59:07
À : Philippe Tcherniatinsky
Objet : Re: openADOM-frontend | bug dans l'expression prédéfinie OA_buildManyCompositeKey (#333)
j'ai essayer de faire avec le groovy de @damien.maurice revue avec une boucle for directement (si jamais c'était le .each qui posé problème) :
String res = ""; def tab_vcat_code = datum.var_file_vcat_code.split(","); for (String vcat_code in tab_vcat_code) { res = res + datum.var_file_vcat_theme + "__" + vcat_code; if (vcat_code != tab_vcat_code.last()) { res = res + ","; } } return res;
et voici l'erreur que j'ai :
javax.script.ScriptException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script30.groovy: 1: Unexpected input: 'res' @ line 1, column 244. { res = res + ","; } } return res;
le return n'est pas accepté c'est comme il le faisait plusieurs fois si je comprend bien.
si je met une expression groovy avec juste une variable et que je teste l'expression groovy mis plus haut directement dans la fonction evaluate() elle renvoit bien le résultat attendu. mais si je la met dans le yaml je m'arrête sur l'erreur ci dessus.
Il ne s'agit pas d'un bug, et le message est correct (NULL_KEY remplaçant chaîne vide)
Ce que tu souhaites c'est lier un many à un ensemble de références pour obtenit un ensemble de liens.
Mais en entrée tu fournis un MANY et un ONE
Tu résolveras le problème en ne fournissant que des MANY à la clef composite.
De mon point de vue ce fonctionnement est tout à fait logique à savoir construire une clef composite MANY ne peut se faire qu'à partir d'éléments MANY.
C'est le fonctionnement tableau croisé qui me semble être non logique et comment faire si l'on a une clef composite avec des dimensions 1, 2 et 3
le fournisseur du référentiel ne va pas écrire plusieurs fois une même valeur dans une cellule, comme "theme1,theme1,theme1" dans l'exemple que tu proposes et qui passe avec le fonctionnement actuel de OA_buildManyCompositeKey
je ne comprends pas l'intérêt du fonctionnement actuel de OA_buildManyCompositeKey qui construit des clés composites selon un ordre spécifique de la manière suivante (si j'ai bien compris) : COLONNE 1 : toto, titi, tata et COLONNE 2 : roro, riri --> toto__roro, titi_,__riri, tata__NULL_KEY --> quel cas d'utilisation ?
je m'attends plutôt à un produit scalaire qui donne sur l'exemple précédent 6 combinaisons : toto__roro, toto__riri, titi__roro, titi__riri, tata__roro, tata__riri qui sont autant de clés à lier à un référentiel. J'ai plusieurs cas d'utilisation sur ce principe.
A discuter pour savoir quel est le fonctionnement utile aux rédacteurs actuels de fichier de configuration.
merci pour l'exemple. Ce sont donc 2 besoins différents.A discuter collégialement et à bien définir dans la documentation de l'expression groovy prédéfinie OA_buildManyCompositeKey. On pourrait envisager d'avoir les deux options avec 2 expressions prédéfinies comme par exemple OA_buildOrderedManyCompositeKey et OA_buildAllManyCompositeKey.
A noter que dans ton cas d'utilisation, l'absence d'une valeur dans une combinaison est à gérer selon les besoins (valeur d'un élément de clé peut être nul ou pas ?)
Ex :
nom
type de zone d'étude
nom du site
projet1
site
le site, la parcelle
projet2
site, parcelle
l'autresite, l'autre parcelle
Quid du projet 1 dont le fonctionnement actuel de OA_buildManyCompositeKey renvoit [NULL_KEY__la parcelle]
Le checker reference lève le problème a priori