[Canoprof 3] Alerte "Invalid space srcUri: '_met'" en génération Web quand un champ vide n'est pas signalé en rouge

Bonjour à tous,

Enseignant utilisateur de Canoprof 3.0, je viens vous signaler un comportement un peu piégeux lors de la génération Web (sous SCENARISuite Starter 6.5 (6.5.4 202608261447)).

J’ai eu à plusieurs reprises une alerte bloquante avec le message technique suivant :

desc="Invalid space srcUri: '_met' called in wsp '...'"

À force de chercher d’où venait le problème, j’ai fini par trouver le coupable : ce sont des champs laissés vides, mais que Canoprof n’indique jamais comme indispensables (aucun encadré rouge).

Voici les deux situations où le problème s’est produit :

1. Le bloc « Présentation » vide dans une activité Quiz

Dans une activité Quiz, il y a un bloc « Présentation » grisé qu’on ne peut pas supprimer.

  • Si on ne remplit rien dedans (ni le titre, ni le texte), l’éditeur ne dit rien et ne met pas de liseré rouge : on pense donc légitimement qu’il est facultatif.
  • Pourtant, au moment de la génération Web, ça génère l’alerte _met.
  • Dès que j’ajoute ne serait-ce qu’une seule lettre ou un espace insécable dans le champ, la génération repasse immédiatement au vert !

2. Le titre d’une sous-activité oublié

J’avais déjà rencontré exactement la même alerte sur une activité imbriquée / liée dans une autre :

  • Le champ « Titre » de l’activité était resté vide.
  • Là encore, l’encadré du titre ne passait pas en rouge pour prévenir qu’il manquait quelque chose.
  • Fait surprenant : la génération PDF passait sans aucun problème, alors que la génération Web déclenchait cette fameuse alerte Invalid space srcUri: '_met'.
  • Dès que j’ai remis un titre, tout est rentré dans l’ordre.

Ce qui pourrait être amélioré

Ce serait vraiment plus pratique pour les auteurs :

  • Soit que l’éditeur mette ces champs en rouge pour avertir qu’ils sont obligatoires avant de lancer la génération.
  • Soit que la génération Web gère ces cases vides sans déclencher d’alerte, un peu comme le fait déjà très bien la génération PDF.

Je vous remets la trace d’erreur ci-dessous au cas où cela serve à l’équipe technique.

Merci d’avance pour votre aide et vos retours !

--- Admin details ---
<?xml version="1.0" encoding="UTF-8"?><trace>
<start t="10/09/26 16:54:34"/>
<l t="Warning" d="10/09/26 16:54:34">
<message type="Warning" ts="1789052074480" appCtx="chain" user="Le-Prof" thread="ForkJoinPool-1-worker-4" desc="Invalid space srcUri: '_met' called in wsp '001s83AdBcZ9kPYgwsgNLD'">
<message type="Exception" ts="1789052074480" appCtx="chain" user="Le-Prof" thread="ForkJoinPool-1-worker-4">
<details>eu.scenari.commons.util.lang.ScException
at eu.scenari.commons.log.LogMgr.newException(LogMgr.java:413)
at eu.scenari.commons.log.LogMgr.publishException(LogMgr.java:451)
at com.scenari.m.bdp.item.fs.WspSrcUtil.findWspNodeByUri(WspSrcUtil.java:175)
at com.scenari.m.bdp.item.fs.WspSrcNodeSpace.findNodeByUri(WspSrcNodeSpace.java:148)
at com.scenari.src.feature.ids.SrcFeatureIds.findNodeByRefUri(SrcFeatureIds.java:156)
at eu.scenari.wsp.agt.AgtProviderWsp.getAgtBagByRef(AgtProviderWsp.java:154)
at eu.scenari.wsp.agt.AgtProviderWsp.getAgtPrincByRef(AgtProviderWsp.java:129)
at eu.scenari.core.agt.impl.CtxAdapterAgtProvider.getAgtPrincByRef(CtxAdapterAgtProvider.java:98)
at eu.scenari.core.agt.impl.AgtPathFactory.findAgt(AgtPathFactory.java:211)
at eu.scenari.core.agt.impl.AgtPathFactory$AgtPathString.findAgt(AgtPathFactory.java:110)
at eu.scenari.core.agt.agent.AgentBase.getAgtByAgtPath(AgentBase.java:278)
at com.scenari.m.co.xpath.dom.ZXPath.wGetRefAgent(ZXPath.java:205)
at com.scenari.m.co.xpath.dom.ZXPath.wGetRefAgentAvecResultat(ZXPath.java:296)
at com.scenari.m.co.xpath.dom.ZXPathComputeStrAgent.xExecute(ZXPathComputeStrAgent.java:93)
at com.scenari.m.co.xpath.dom.ZXPath.execute(ZXPath.java:90)
at com.scenari.m.co.xpath.dom.ZXPathReturnFirst.xExecute(ZXPathReturnFirst.java:84)
at com.scenari.m.co.xpath.dom.ZXPath.execute(ZXPath.java:90)
at eu.scenari.xml.xpath.functions.FuncConcat.execute(FuncConcat.java:121)
at eu.scenari.xml.xpath.XPath.execute(XPath.java:392)
at com.scenari.m.co.donnee.WDonneeXPathOnSrcDynamique.getString(WDonneeXPathOnSrcDynamique.java:91)
at eu.scenari.core.agt.agent.value.AgtValue.xComputeCache(AgtValue.java:203)
at eu.scenari.core.agt.agent.value.AgtValue.computeAsString(AgtValue.java:171)
at com.scenari.m.co.xpath.dom.ZXPathComputeStrAgent.xExecute(ZXPathComputeStrAgent.java:100)
at com.scenari.m.co.xpath.dom.ZXPath.execute(ZXPath.java:90)
at eu.scenari.xml.xpath.XPath.execute(XPath.java:392)
at com.scenari.m.co.donnee.WDonneeXPathOnSrcDynamique.getString(WDonneeXPathOnSrcDynamique.java:91)
at eu.scenari.core.agt.agent.AgentBase.getAgtTitle(AgentBase.java:362)
at com.scenari.m.co.xpath.dom.ZXPathTitleAgent.xExecute(ZXPathTitleAgent.java:89)
at com.scenari.m.co.xpath.dom.ZXPath.execute(ZXPath.java:90)
at eu.scenari.xml.xpath.XPath.execute(XPath.java:392)
at eu.scenari.xml.xpath.XPath.execute(XPath.java:432)
at eu.scenari.xml.xalan.templates.ElemValueOf.execute(ElemValueOf.java:276)
at eu.scenari.xml.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:1440)
at eu.scenari.xml.xalan.transformer.TransformerImpl.transformToRTF(TransformerImpl.java:1133)
at eu.scenari.xml.xalan.templates.ElemVariable.getValue(ElemVariable.java:305)
at eu.scenari.xml.xalan.templates.ElemVariable.execute(ElemVariable.java:280)
at eu.scenari.xml.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:1440)
at eu.scenari.xml.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:536)
at eu.scenari.xml.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:1440)
at eu.scenari.xml.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:536)
at eu.scenari.xml.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:1440)
at eu.scenari.xml.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:1348)
at eu.scenari.xml.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:748)
at eu.scenari.xml.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:705)
at com.scenari.m.ge.pages.TplXslPage.producePage(TplXslPage.java:215)
at com.scenari.m.ge.generator.base.TemplatesMgr.producePage(TemplatesMgr.java:298)
at com.scenari.m.ge.generator.base.GeneratorStatic.wTreatStackPages(GeneratorStatic.java:186)
at com.scenari.m.ge.generator.web.WebGenerator.xGenerate(WebGenerator.java:317)
at eu.scenari.gen.GenStatic.generate(GenStatic.java:290)
at eu.scenari.wsp.module.gen.ThreadGen.call(ThreadGen.java:239)
at eu.scenari.wsp.module.gen.ThreadGen.run(ThreadGen.java:200)
at eu.scenari.core.universe.Universe$2.run(Universe.java:489)
at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(ForkJoinTask.java:1753)
at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.compute(ForkJoinTask.java:1745)
at java.base/java.util.concurrent.ForkJoinTask$InterruptibleTask.exec(ForkJoinTask.java:1662)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:511)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1450)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:2019)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:187)
</details>
</message>
</message>
</l>
<end t="10/09/26 16:54:34"/>
</trace>

--- Context ---
reg: {"envKeys":["itemType","securityCtx"],"parent":{"envKeys":["wsp","securityCtx","uiRoot","place","infoBroker","wedSearchCoord","histoEditMgr"],"parent":{"envKeys":["resolver","universe","securityCtx"],"parent":{"envKeys":["resolver","noAuthentication","remoteAuthentications","embeddedAuthentication","universe","securityCtx"]}}}}
uiContext: undefined
wsp: undefined
shortDesc: {"srcUri":"/z--FED-01-Structure de la matière/02-mondeMicroscopique/04-QuizRevision.activite","srcSt":1,"srcDt":1789052070239,"srcRi":511,"srcRoles":["gsCreateWsp","main:manager","depotRead","publicWsp"],"srcId":"id:3HAs83AdBcZ9kPYgwsgNLD","srcStamp":"ReNNkRFpmbGydPIkFeB72sxZHLOMaiARWb0j2RYsKFk=","srcUser":"Le-Prof","itTi":"🏡 [Maison] Activité n°4 : Quiz de révision - [Chapitre : Le monde microscopique 🔬]","itSt":1,"itSgn":"@cp_quizActivity#Xml#Map","itModel":"cp_quizActivity"}
pubNode: {"ch":[{},{},{},{}]}
genInfo: {"codeGenStack":"web","title":"Génération Web","status":"warning","lastGen":1789052074573,"uriPub":"/001s83AdBcZ9kPYgwsgNLD/5S1MN6/PQVT8K/46TFF1/4DK7M6/111/web/index.html","uriTraces":"/001s83AdBcZ9kPYgwsgNLD/5S1MN6/PQVT8K/46TFF1/4DK7M6/111/web/meta/~Traces.xml","mimeDownload":"application/zip","skin":"blue","user":"Le-Prof","storedProps":{"remote-embed@stored":"false","plan-stdt@stored":"true","include-index@stored":"false","view-prof@stored":"false","view-corr@stored":"false","dys@stored":"false","score-corr@stored":"false","access-code@stored":"","view-stdt@stored":"true","add-scar@stored":"false","pwa@stored":"false"},"skins":[{"code":"blue","title":"Bleu","hasIllus":true},{"code":"pink","title":"Rose","hasIllus":true},{"code":"educ","title":"Educ","hasIllus":true},{"code":"purple","title":"Violet","hasIllus":true},{"code":"default","title":"Canoprof","hasIllus":true}]}
genProps: undefined
customDestPath: undefined
cidInfo: null

--- App context ---
url: https://sciences-docs.fr/contenus/~~static/fr-FR/home.xhtml?~12m60#(wsp'001s83AdBcZ9kPYgwsgNLD'srcRef'id%3A3HAs83AdBcZ9kPYgwsgNLD'),
timestamp: 10/09/2026 16:54:44
userAgent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36

Et le détail technique :

Invalid space srcUri: '_met' called in wsp '001s83AdBcZ9kPYgwsgNLD'

Bonjour,

Ceci est une Alerte, un warning, pas une exception. Ce n’est donc pas dangereux et n’affecte pas la publication généré.
Elle arrive uniquement en SCENARI 65 en mode DB (serveur) suite à un contrôle ajouté pour trouver des problèmes de liens profonds incorrectement écrits.

De façon générale, cela survient surtout dans des contextes de code en « free » dans un générateur (un modèle complexe comme Canoprof en contient forcément) qui devrait être écrit différemment.

Ce n’est donc pas un problème dans l’éditeur, c’est juste une correction mineure à apporter dans les publications afffectés.

Je creuse donc ce point.

J’ai pu reproduire le problème du bloc présentation d’une activité quiz vide.
Toutefois, que voulez vous dire par sous-activité ? Une partie d’un activité texte ? Une collection d’activités ?

Un titre d’activité est toujours obligatoire, je comprends mal ce contexte.

Bonsoir @sam
Merci pour votre réponse rapide :slight_smile:
Oui j’ai bien vu que le message était une alert pas une erreur, et donc que ça ne bloque pas la génération.
Mais par experience, j’ai appris qu’il valait mieux ne pas laisser des alertes trainer, et que trouver la cause soulage de problèmes plus grands et plus pénibles à corriger…

Alors, désolé, mais j’ai oublié de poster la capture d’écran de l’endroit qui posait problème :


J’ai surligné en rose ce qui posait problème.

En tout cas, c’est super que vous ayez pu reproduire le problème :slight_smile:

Là c’est moi qui aie mal exprimé ma pensée :wink:
J’ai imbriqué des questions et une liste d’exercice dans une activité type quiz (je précise que c’était la semaine dernière, donc bien avant ce que j’ai constaté (encore) cette après midi) :

Et après avoir tenté diverses choses, j’ai fini par mettre du texte dans le premier bloc ce qui a fait disparaitre l’alerte à la génération.

Bref, même problème en fait.

Le bloc présentation lorsqu’il est vide génère une alerte à la génération web (mais pas à la PDF, ce qui est assez étrange…).
Je sais que ce n’est qu’une alerte, et rien de bloquant, mais moi ça me gène :wink:
Il faudrait soit que ce bloc soit autorisé à être vide sans générer d’alertes, soit qu’il soit mis comme indispensable donc avoir un voyant rouge dans la barre de défilement montrant qu’il y a une erreur à corriger.

Merci et désolé pour l’imbroglio de mes mots :slight_smile:
Bonne soirée

Ce sera corrigé dans la prochaine MAJ de Canoporf 3

1 « J'aime »