ScenariBatch et création d'ateliers

Bonjour,

J’ai plusieurs petites questions concernant la création et gestion d’ateliers via Scenari Batch.

Point N°1
J’ai besoin de créer une trentaine d’ateliers basés sur le même modèle Topaze1.6, et affectation de droits différents sur ces ateliers. J’ai fait plusieurs essais de création d’un atelier via scBatch. Le code que j’ai lancé est, à l’anonymisation prêt, le suivant. Le contenu inspiré du readme.md dans le dossier racine de scBatch :

          <createWsp varCreatedWspCode="Topaze" haltOnError="true">
               <!-- Paramètres de création, dépendant de l'implémentation (format extensible xon) -->
               <createParams>
                   <o code="" title="Topaze-Groupe1" description="Blablabla"/>
               </createParams>
               <!-- Spécification du WspType et de ses options -->
               <wspType key="Topaze1-6" lang="fr-FR" version="1.6.007" uri="Topaze1-6_fr-FR_007">
                   <wspOption key="TopazeExtScormMoodle1-6" lang="fr-FR" version="1.6.007" uri="TopazeExtScormMoodle1-6_fr-FR_007" title="Export Scorm Moodle (plugin topaze) 1.6"/>
                           <wspOption key="TopazeExtScormMoodle1-6" version="1.6.007" lang="fr-FR"
           uri="TopazeExtScormMoodle1-6_fr-FR_007" title="Export Scorm Moodle (plugin topaze) 1.6"
       />
               </wspType>
               <!-- Métadonnées du wsp, dépendant de l'implémentation (format extensible xon) -->
               <wspMetaProps>
                   <o externalItemAllowed="true"/>
               </wspMetaProps>

               <!-- Appel d'une sous-task nommée taskXxx dans le contexte de ce nouvel atelier-->
               <specifyRoles>
                   <allowRoles account="idutilisateur1" roles="main:author"/>
               </specifyRoles>

           </createWsp>

Résultat de l’opération quand je consulte la gestion des ateliers :

  • J’obtiens bien un atelier Topaze1.6 valide qui porte le nom/titre « Topaze-Groupe1 »
  • J’ai bien pu ajouter l’utilisateur « idutilisateur1 » avec le rôle Auteur dans cet atelier
  • le descriptif « Blablabla » ne semble pas avoir été pris en compte. Ce n’est pas très important mais c’est le constat que j’ai pu faire
  • l’extension « TopazeExtScormMoodle1-6 » précisée dans <wspOption> n’est pas prise en compte dans la définition de l’atelier. Sur ce point j’ai fait plusieurs essais sans résultat.

Deux petits soucis donc à la création : le descriptif qui n’est pas très important et l’extension pour lequel mon paramétrage ne semble pas être bon.

Point N°2
Comme j’ai fait plusieurs essais j’ai voulu tester la suppression d’atelier en Batch. J’ai copié le code des ateliers à supprimé que j’ai trouvé « Propriétés de l’Atelier » / « Avancé ». J’ai lancé le code suivant :

    <deleteWsp wspCode="rhLjjVOS9S4VxA521u5WL6" dropContent="true" dropGenerations="true"/>
    <deleteWsp wspCode="rhNjjVOS9S4VxA521u5WL6" dropContent="true" dropGenerations="true"/>
    <deleteWsp wspCode="rhOjjVOS9S4VxA521u5WL6" dropContent="true" dropGenerations="true"/>

Je voulais supprimer les 3 ateliers en question. L’opération n’a pas fonctionné. tout en me disant que le batch s’est bien déroulé et sans trace sur le log.

Point N°3
Ensuite il se trouve que je vais devoir ajouter des utilisateurs à ces ateliers mais ça ne sera fait qu’à postériori par manque d’information à l’instant T. J’ai testé ceci :

    <specifyRoles wspCode="rhLjjVOS9S4VxA521u5WL6" >
        <allowRoles account="idutilisateur2" roles="main.author"/>
    </specifyRoles>

Cette opération n’a pas fonctionné. Probablement avec le même souci que le <deleteWsp> : peut être pas le bon code atelier mais je ne vois pas où le trouver ailleurs.

Point N°4
Enfin pour la suppression dans <deleteWsp> comme pour les modifications de rôles dans <specifyRoles> Je me pose la question de l’efficacité d’action en mode batch puisqu’il faut connaitre le code de l’atelier qui est généré automatiquement et donc l’action manuelle via l’interface client est quasi aussi rapide. Votre avis à ce sujet m’intéresse.

Voilà pour mes petites questions.

Franck

Bonjour,

Je me permet une p’tite relance au cas où. Le topic concerne le paramétrage de batchs pour créer des ateliers et affecter des utilisateurs.

merci d’avance
Bonne journée

1 « J'aime »

Salut Franck,

Problème numéro 1:

  • Pour la description, en regardant le code, il me semble que le paramètre à utiliser est « desc » et non pas « description » (pas testé, tu pourras confirmer ?).
  • Pour le wsptype, voilà le wsptype d’un atelier similaire que je viens de créer en local :
<wspType key="Topaze1-6" lang="fr-FR" uri="Topaze1-6_fr-FR_007" title="Topaze 1.6 (fr-FR)" version="1.6.007">
<wspOption key="TopazeExtScormMoodle1-6" lang="fr-FR" uri="TopazeExtScormMoodle1-6_fr-FR_007" title="Export Scorm Moodle (plugin topaze) 1.6 (fr-FR)" version="1.6.007"/>
</wspType>

Peux tester avec ça ?

Point 2, à première vue, ça m’a l’air correct… Si quelqu’un d’autres à une idée…

Point 3, ton role n’est pas bon, tu veux mettre main:author et non main.author.

Point 4, de mon côté, je passe de plus en plus par des scripts Python qui interagissent avec la couche serveur via HTTP comme le font d’autres couches clientes de Scenari. Il est probable que j’essaie de formaliser une petite lib Python pour faire ce genre de chose à l’avenir.
NB : ce genre de script est à la portée de n’importe quel développeur en regardant ce qui transite entre couches cliente et serveur dans l’onglet réseau du debuggeur de son navigateur.

Re bonjour,

J’ai trouvé un bout de réponse à mes questions. Le readme.md indique un attribut « description » dans la balise<o/> de <createParam/> mais il faut utiliser est « desc ». Dans ce cas le descriptif est bien ajouté à la création de l’atelier.
J’ai pu retrouver ça grâce à l’action ExportConfig sur le serveur.
Par contre j’ai tenté de récupérer un bout du xml de cette même commande ExportConfig pour la comparer avec ce que j’avais créé à la main et injecté dans mon script ça donne la même chose, à savoir que je n’ai pas pu ajouter les extensions au modèle. On dirait que le <wspOption/> n’est pas interprété.

A suivre…

1 « J'aime »

Je viens de refaire lev test de suppression d’atelier et d’ajout de rôle via les lignes
<deleteWsp> et <specifyRoles> en précisant à chaque fois le wspCode retrouvé dans les paramètres de l’atelier et ça ne s’exécute pas non plus en batch.

Voila pour mes derniers tests…

Bonjour Thibault,

Désolé j’a vu ton message après mes différents petits mots ;o)

Point 1 : J’ai testé le bout de XML que tu proposes à la place du mien et c’est idem. Pas d’extension ajoutée à l’atelier
Point 3 : Effectivement j’avais mis main.author à la place main:author mais là non plus ça n’a rien changé

merci en tout cas pour ton retour

Autre bizarrerie, si je mets 2 commandes <createWsp> dans le même <scServer> je n’ai que la création du premier, y compris si je mets l’attribut haltOnError à false

Hum… poke @anp sur le sujet

De ce que tu dis, j’ai l’impression que ton XML complet n’est pas complètement conforme…
Peux tu joindre une copie complète du XML anonymisé (et non un extrait ?)

Re,

Voici le code XML anonymisé. Bon je l’ai recréé parce qu’entre deux j’ai fait tellement de manips…

Tentative de création 2 ateliers :

<project name="scBatch" default="main" basedir=".">
    <taskdef name="scServer" classname="com.scenari.scant.batch.ScServerTask"/>
    <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
    <taskdef name="http" classname="org.missinglink.ant.task.http.HttpClientTask"/>

    <property name="tmp.dir" location="${basedir}/tmp"/>
    <property name="lib.dir" location="${basedir}/lib"/>

    <!--**
         *  Run principal
         **-->
    <target name="main">

        <scServer url="ZZZZZZZ" haltOnError="no" verbose="true" user="ZZZZZZZ" password="ZZZZZZZ">
            <createWsp varCreatedWspCode="Topazetest1" haltOnError="false">
                <createParams>
                    <o code="" title="Topaze-test-FRANCK-G01" desc=""/>
                </createParams>
                <wspType key="Topaze1-6" lang="fr-FR" uri="Topaze1-6_fr-FR_007" title="Topaze 1.6 (fr-FR)" version="1.6.007">
                    <wspOption key="TopazeExtScormMoodle1-6" lang="fr-FR" uri="TopazeExtScormMoodle1-6_fr-FR_007"
                        title="Export Scorm Moodle (plugin topaze) 1.6 (fr-FR)" version="1.6.007"/>
                </wspType>
                <wspMetaProps>
                    <o externalItemAllowed="true"/>
                </wspMetaProps>
                <specifyRoles>
                    <allowRoles account="user1" roles="main:author"/>
                    <allowRoles account="user2" roles="main:author"/>
                </specifyRoles>
            </createWsp>
            <createWsp varCreatedWspCode="Topazetest2" haltOnError="false">
                <createParams>
                    <o code="" title="Topaze-test-FRANCK-G02" desc=""/>
                </createParams>
                <wspType key="Topaze1-6" lang="fr-FR" uri="Topaze1-6_fr-FR_007" title="Topaze 1.6 (fr-FR)" version="1.6.007">
                    <wspOption key="TopazeExtScormMoodle1-6" lang="fr-FR" uri="TopazeExtScormMoodle1-6_fr-FR_007"
                        title="Export Scorm Moodle (plugin topaze) 1.6 (fr-FR)" version="1.6.007"/>
                </wspType>
                <wspMetaProps>
                    <o externalItemAllowed="true"/>
                </wspMetaProps>
                <specifyRoles>
                    <allowRoles account="user1" roles="main:author"/>
                    <allowRoles account="user2" roles="main:author"/>
                </specifyRoles>
            </createWsp>
        </scServer>
        <ant antfile="../lib/log.ant" target="file">
            <property name="p.msg" value="${x.logs}"/>
        </ant>
    </target>

</project>

Résultat produit si on relit le xml généré par ExportConfig :

<createWsp varCreatedWspCode="skBjjVOS9S4VxA521u5WL6" haltOnError="true">
<createParams>
<o desc="" title="Topaze-FRANCK-G01">
<a k="skins"/>
</o>
</createParams>
<wspType key="Topaze1-6" version="1.6.007" lang="fr-FR" uri="Topaze1-6_fr-FR_007" title="Topaze 1.6 (fr-FR)"/>
<specifyRoles>
<allowRoles account="user1" roles="main:author"/>
<allowRoles account="user2" roles="main:author"/>
</specifyRoles>
</createWsp>

Donc création de l’atelier Topaze-FRANCK-G01 mais pas le Topaze-FRANCK-G02 et l’option concernant l’extension export moodle n’y est pas. et l’extension est bien installée et visible sur l’ExportConfig d’un atelier créé à la main.

Ensuite je tente d’ajouter un user à l’atelier qui vient d’être créé (pour le test)

X
<project name="scBatch" default="main" basedir=".">
    <taskdef name="scServer" classname="com.scenari.scant.batch.ScServerTask"/>
    <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
    <taskdef name="http" classname="org.missinglink.ant.task.http.HttpClientTask"/>

    <property name="tmp.dir" location="${basedir}/tmp"/>
    <property name="lib.dir" location="${basedir}/lib"/>

    <!--**
         *  Run principal
         **-->
    <target name="main">

        <scServer url="ZZZZZZZ" haltOnError="no" verbose="true" user="ZZZZZZZ" password="ZZZZZZZ">
        <!--Ajout de rôle à postériori -->
           <specifyRoles wspCode="skBjjVOS9S4VxA521u5WL6" >
              <allowRoles account="user3" roles="main:author"/>
           </specifyRoles>
        </scServer>
        <ant antfile="../lib/log.ant" target="file">
            <property name="p.msg" value="${x.logs}"/>
        </ant>
    </target>

</project>

Et ça n’a pas ajouté le user3

Et si je lance un delete du même atelier

<project name="scBatch" default="main" basedir=".">
    <taskdef name="scServer" classname="com.scenari.scant.batch.ScServerTask"/>
    <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
    <taskdef name="http" classname="org.missinglink.ant.task.http.HttpClientTask"/>

    <property name="tmp.dir" location="${basedir}/tmp"/>
    <property name="lib.dir" location="${basedir}/lib"/>

    <!--**
         *  Run principal
         **-->
    <target name="main">

        <scServer url="ZZZZZZZ" haltOnError="no" verbose="true" user="ZZZZZZZ" password="ZZZZZZZ">
            <deleteWsp wspCode="skBjjVOS9S4VxA521u5WL6" dropContent="true" dropGenerations="true"/>
        </scServer>
        <ant antfile="../lib/log.ant" target="file">
            <property name="p.msg" value="${x.logs}"/>
        </ant>
    </target>

</project>


Et là j’ai droit à une erreur 500


main:
 [scserver] Starting
 [scServer] Scenari Server response unknown (500).
 [scServer]     at com.scenari.scant.batch.ScServerTask.xReadResponse(ScServerTask.java:352)
 [scServer]     at com.scenari.scant.batch.ScServerTask.execute(ScServerTask.java:219)
 [scServer]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 [scServer]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 [scServer]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 [scServer]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
 [scServer]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
 [scServer]     at org.apache.tools.ant.TaskAdapter.execute(TaskAdapter.java:155)
 [scServer]     at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
 [scServer]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 [scServer]     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
 [scServer]     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
 [scServer]     at java.base/java.lang.reflect.Method.invoke(Method.java:566)
 [scServer]     at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99)
 [scServer]     at org.apache.tools.ant.Task.perform(Task.java:350)
 [scServer]     at org.apache.tools.ant.Target.execute(Target.java:449)
 [scServer]     at org.apache.tools.ant.Target.performTasks(Target.java:470)
 [scServer]     at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1401)
 [scServer]     at org.apache.tools.ant.Project.executeTarget(Project.java:1374)
 [scServer]     at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
 [scServer]     at org.apache.tools.ant.Project.executeTargets(Project.java:1264)
 [scServer]     at org.apache.tools.ant.Main.runBuild(Main.java:827)
 [scServer]     at org.apache.tools.ant.Main.startAnt(Main.java:223)
 [scServer]     at org.apache.tools.ant.Main.start(Main.java:190)
 [scServer]     at org.apache.tools.ant.Main.main(Main.java:274)
 [scserver] failed:
Scenari Server response unknown (500).

Bonjour Franck,
Pour cumuler des directives, il faut les mettre dans une balise <sequence>, comme le readme le montre pour enchainer plusieurs « generate ».
Antoine

Les logs serveur en diront plus sur ce pb

piste : l’atelier avec ce code n’existe pas

Pour avoir d’autres exemples de syntaxe plus complets que ceux donnés dans le readme de scBatch (qui n’est pas une doc exhaustive), tu peux, sur un environnement serveur donné, exporter les directives batch de re-création/config d’un environnement similaire via [urlWebApp]/web/u/adminWsp?cdaction=ExportConfig.

Si des pbs persistent, tu peux en faire la synthèse dans un exemple complet pour qu’on puisse creuser ?

Hello Antoine,

Merci pour la correction concernant l’ajout de la balise <sequence>. Ca marche effectivement mieux. Katia m’avait fait part de l’url

[urlWebApp]/web/u/adminWsp?cdaction=ExportConfig.

pour le specifyRoles et le deleteWsp l’atelier est bien présent. Je fait exprès un copier/coller depuis cette url. Et en fait j’ai laissé 3 bouts de script car ça utilise le même atelier et je ne peut pas faire de specifyRoles ou de deleteWsp sans connaitre le varCreatedWspCode qui est généré à la création…

Pour le deleteWsp et l’erreur 500, j’ai la remontée de log suivante qui laisse à penser que la commande n’existe pas :


1--- Error : Tue Nov 09 14:40:40 CET 2021[485] - prl-chain-app/system (qtp828441346-361) ---
Error on parsing xml start element 'deleteWsp'

2--- Exception : Tue Nov 09 14:40:40 CET 2021[485] - prl-chain-app/system (qtp828441346-361) ---
eu.scenari.wsp.service.batch.tasks.DeleteWspTask
java.lang.ClassNotFoundException: eu.scenari.wsp.service.batch.tasks.DeleteWspTask
	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
	at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:574)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
...
1 « J'aime »

Après vérif, cette fonction n’est en l’état disponible que dans les contextes Fs.
Il serait possible de faire évoluer celà pour créer le meme type de task dans les contextes odb.

Lorsque tu crées un atelier, tu as la notion d’alias de disponible (dont tu dois gérer l’unicité), mais qui te permet de ne pas subir les codes automatiques des ateliers :

...
<createParams>
    <o desc="Ma desc..." alias="biblio" title="QUALIF Bibliothèque générale"/>
</createParams>
...

OK Merci pour les infos. Je de refaire un test de specifyRoles qui a fonctionné. Je ne sais pas trop pourquoi ça merdouillait avant autrement qu’avec la sequence mais on va dire que l’erreur était entre la chaise et le clavier :slight_smile:

Il me reste juste que lors de la création que les options sont pas prises en compte. Je viens de le rejouer en copiant le code venant de l’url d’admin que tu as placé dans la discussion.

 <wspType key="Topaze1-6" lang="fr-FR" uri="Topaze1-6_fr-FR_007" title="Topaze 1.6 (fr-FR)" version="1.6.007">
    <wspOption key="TopazeExtScormMoodle1-6" version="1.6.007" lang="fr-FR" uri="TopazeExtScormMoodle1-6_fr-FR_007" title="Export Scorm Moodle (plugin topaze) 1.6"/>
</wspType>

me produit toujours un atelier avec ceci

<wspType key="Topaze1-6" version="1.6.007" lang="fr-FR" uri="Topaze1-6_fr-FR_007" title="Topaze 1.6 (fr-FR)"/>

Mais je vais me débrouiller avec ça.

Merci encore pour votre disponibilité.

c’est possiblement un bug ça ! Le sujet a été revu dans SC5, il y a peut etre un pb à ce niveau. Je regarderai

Salut Franck,
On avait bien un problème avec la prise en compte de la directive <wspOption> de la task createWsp, que je viens de corriger.
J’ai également ajouté quelques lignes expliquant le tag <sequence> , et complété tous les exemples du document de présentation de scBatch.
Merci pour ces retours !
Bonne fin de journée
Antoine
Kelis