Script pour générer plusieurs publications OPALE

Bonjour, je voudrais générer, pour un même module, avec le moins de manipulations possibles une version web sans corrigé, une version web avec corrigé et un pdf avec corrigé. Est-ce qu’il y aurait une possibilité d’automatiser avec du bash ? Merci par avance pour vos réponses.

Bonjour,
Il faut que tu ais sur ton serveur Scenari, l’extension scenaribatch installée. Dans mon cas elle est dans /opt/scbatch. J’ai en dessous créé un sous dossier du style mesbatch/projet1. Dans ce dossier /opt/scbatch/mesbatch/projet1 j’ai 2 fichiers : un fichier .sh et un fichier .xml. Je te pousse ces deux fichiers en mode « modèle » à adapter. J’ai renommé le fichier sh avec l’extension .txt pour que l’upload soit possible sur le forum.
build_model.xml (1,8 Ko)
build_model_sh.txt (922 Octets)

Les points à regarder :
dans le .sh :

  • vérifier la valeur de la variable lib (dans mon cas j’ai …/…/bin/sclib.xml mais c’est lié à l’arborescence que j’ai décrite plus haut)
  • changer au besoin le nom du xml lancé dans la varable ant.

Dans le fichier xml

  • vérifier la variable lib.dir
  • modifier la balise scServer (champs : url, user et password)
  • créer autant de balises generate que d’item de publi à lancer
    et pour chaque balise :
  • indiquer le code de l’atelier qu’on retrouve dans les propriétés de l’atelier (champ wspCode)
  • indiquer le chemin absolu vers l’item de publication (champs rootItemUri)
  • indiquer le chemin de récupération de la publication (champs destPath)
  • préciser le type de publication web papier… ça peut se faire de 2 façon sut utilisation d’un skin dédié ou non. Dans l’exemple que je de donne c’est avec skin. Ajout de la balise xml type et attribut code qui correspond à ta publi et sous balise param avec key et value pour décrire le skin

Tu as la description de diverses commandes scbatch dans le fichier readme.md du dossier où est déployé ton ScenariBatch (dans mon cas /opt/scbatch)

Quand tu lances l’exécution du fichier .sh, tu récupères le contenu publié dans le dossier de génération de Scenari server. Dans mon cas dans /var/lib/scenari/working/prl-chain/batchGen

Bien cordialement
Franck

Bonjour, merci pour la réponse rapide. J’ai oublié de préciser que j’utilise Opale en local sous Linux sans serveur Scenari. Est-ce que ta solution peut s’adapter à cet environnement ?

Re bonjour,
ScenariBatch étant dédié serveur, ça ne tournera pas sur un Opale local. Je n’ai à mon niveau pas connaissance de solution d’automatisation de publication locale. en tout cas jamais vu ni testé. Je passe la main si quelqu’un a une piste.
Bon courage

Bonjour,

Si si, cela fonctionne aussi en local, avec une couche graphique et un serveur qui répond en http sur un port local.
Sur quelle version de Scenari êtes-vous ?

Merci Sylvain pour le retour. Intéressant de savoir que c’est également opérationnel en local. Je n’ai jamais testé.

J’utilise la dernière version d’Opale (4.0.5) sous Scenari 6.0.6

Vous trouverez le port utilisé ici :

L’url du serveur est donc dans cet exemple : http://127.0.0.1:8173

1 « J'aime »

Chez moi c’est le port 8200. Si je tape http://127.0.0.1:8200 je tombe sur l’interface Opale. Par contre, si je tente l’url donnée dans le fichier de configuration par Franck (http://127.0.0.1:8200/~~chain/s/u/batch) j’obtiens une erreur 404. Ce qui est a priori normal car je n’ai pas l’extension scenaribatch installée ? C’est possible de la mettre dans une installation locale ?

hum, on n’a peut-être pas déclaré les services de batch dans le serveur local de Scenari-chain. Dans ce cas, il faut simplement faire les appels directs aux services sans passer par le Scenari-batch.
Le plus simple est dans votre client, taper la touche « F12 », une fenêtre des « devTools » s’ouvre, allez sur l’onglet « Network », et dans l’interface Scenari, lancez une génération, vous verrez alors la requête qui lance votre génération, par exemple chez moi :

Adaptez l’url d’appel avec vos paramètres…

La génération est asynchrone, donc pour savoir quand la génération est terminée il faut réinterroger le serveur, ce sont les 2 requetes suivantes avec cdaction=GetGenIfno.

A noter que nous prévoyons d’abandonner le SCENAIbatch historique et de proposer à la place des librairies en Python pour effectuer diverses opérations et gérer automatiquement ces types de requêtes asynchrones. Mais je ne peux pas fournir de dates pour une première version de cette nouvelle librairie de scripts…

Ah, sinon, avec SCENARIbatch essayez http://127.0.0.1:8200/web/u/batch (à la place de /~~chain/s)…

Est-ce que c’est documenté les paramètres de wspGen ?

Et sinon avec http://127.0.0.1:8200/web/u/batch, j’obtiens une exception :
java.lang.NullPointerException at java.base/java.io.StringReader.(StringReader.java:50) at eu.scenari.core.service.batch.SvcBatchReader.setParamStream(SvcBatchReader.java:114) at eu.scenari.core.service.batch.SvcBatchReader.initDialogFromServlet(SvcBatchReader.java:85) at eu.scenari.core.execframe.httpservlet.reqconn.HttpRequestConnectorApi.createDialogFromServlet(HttpRequestConnectorApi.java:144) at eu.scenari.core.execframe.httpservlet.HttpRequestConnectorBase.handleRequest(HttpRequestConnectorBase.java:91) at eu.scenari.core.execframe.httpservlet.servlets.ServiceServlet.service(ServiceServlet.java:163) at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) at eu.scenari.jetty.servlet.ServletHolder.handle(ServletHolder.java:844) at eu.scenari.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) at eu.scenari.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:226) at eu.scenari.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591) at eu.scenari.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542) at eu.scenari.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) at eu.scenari.jetty.security.SecurityHandler.handle(SecurityHandler.java:536) at eu.scenari.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at eu.scenari.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) at eu.scenari.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1581) at eu.scenari.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) at eu.scenari.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1307) at eu.scenari.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) at eu.scenari.jetty.servlet.ServletHandler.doScope(ServletHandler.java:482) at eu.scenari.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1549) at eu.scenari.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) at eu.scenari.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1204) at eu.scenari.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) at eu.scenari.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) at eu.scenari.jetty.server.Server.handle(Server.java:494) at eu.scenari.jetty.server.HttpChannel.handle(HttpChannel.java:374) at eu.scenari.jetty.server.HttpConnection.onFillable(HttpConnection.java:268) at eu.scenari.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) at eu.scenari.jetty.io.FillInterest.fillable(FillInterest.java:103) at eu.scenari.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) at eu.scenari.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) at eu.scenari.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) at eu.scenari.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) at eu.scenari.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) at eu.scenari.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367) at eu.scenari.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782) at eu.scenari.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918) at java.base/java.lang.Thread.run(Thread.java:829)

avec http://127.0.0.1:8200/web/u/batch, j’obtiens une exception

c’est bon signe :slight_smile: Le service est donc bien déclaré. L’exception indique juste que vous n’avez envoyé aucune instruction pour exécuter ce batch. Vous pouvez donc installer l’extension et par SCENARIbatch si vous le souhaitez.

Est-ce que c’est documenté les paramètres de wspGen ?

Oui mais avec le code, ce qui n’est pas le plus trivial vu de l’extérieur, d’où le projet de librairie python pour rendre tout cela plus aisément accessible de l’extérieur.

Dans le cas du service wspGen, c’est plutôt trivial, une fois que vous avez récupéré l’url d’appel sur le générateur qui vous intéresse, c’est le paramètre refUri qui donne le chemin de l’item sur lequel vous souhaitez générer le contenu (idem avec le cdaction=GetGenInfo pour obtenir l’état de la génération).

un grand merci pour toutes ces infos, une dernière question comment installer SCENARIbatch ?

ici : SCENARIchain-server dans le bloc refermé « Autres téléchargements », oui c’est un peu (trop) caché !

(on va ajouter un lien dans la doc SCENARIchain-server 6.1 (Linux))

Bonjour,
Comment installer SCENARIbatch sur scenari server 6.1.5 ?

il y a pas « d’installation » a proprement dit, SCENARIbatch est un simple zip à dézipper ou vous voulez.

Bonjour @sam
merci pour votre réponse. j’ai arriver à utiliser SCENARIbatch sur notre SCENARICHAINE Server 6.1.5.

Maintenant je voudrais importer les comptes utilisateurs LDAP en masse sur le serveur SCENARICHAINE.

  • Est ce qu’il y a la possibilité d’exécuter SCENARIbatch avec un fichier contenant la liste des utilisateurs LDAP a importé sur notre serveur SCENARICHAINE?

NB : pour tester, j’ai réussi a importer un utilisateur qui se trouve dans un annuaire LDAP manuellement a partir de l’interface graphique de notre serveur SCENARICHAINE.

Merci d’avance.

Bonjour @b.zerabib,

Est ce qu’il y a la possibilité d’exécuter SCENARIbatch avec un fichier contenant la liste des utilisateurs LDAP a importé sur notre serveur SCENARICHAINE?

Le fichier readme.md dans SCENARIbatch vous donne cette réponse : la tache importUsers permet de faire celà. Exemple :

<scServer url="http://localhost:8080/scchainsrv50/web/u/batch" haltOnError="no" verbose="true">
	<sequence haltOnError="false">
		<importUsers>
			<!-- Crée ou met à jour cette liste de users (format xon pour gérer les propriétés étendes en fonction de l'implémenation. -->
			<createOrUpdate>
				<a>
					<o account="groupA" userType="group" groupName="MyGroup">
						<a k="grantedRoles">
							<s>main:author</s>
						</a>
					</o>
					<o account="x" userType="user" lastName="" firstName="" password="" authMethod="">
						<a k="groups">
							<s>groupA</s>
						</a>
					</o>
				</a>
			</createOrUpdate>

			<!-- Supprime un ensemble de users. -->
			<delete>user1 user2</delete>

			<!-- Désactive tous les users (en fonction du type) en excluant les users de type superAdmin. -->
			<disableAll userType="user|group|all" excludeUserCategPattern="system"/>
		</importUsers>

		<!-- Renommage d'un utilisateur -->
		<renameUsers>
			<rename oldAccount="test" newAccount="test2"/>
			<rename oldAccount="xxx" newAccount="yyyy"/>
		</renameUsers>
	</sequence>
</scServer>

Cdt
Antoine
Kelis

Bonjour @anp
Je vous remercier pour votre réponse, effectivement j’ai arrivé a utiliser la tache importUsers pour importer un utilisateur LDAP comme test.

le problème que j’ai reçu un fichier contenant presque 200 utilisateurs, est-ce que l’y a la possibilité de définir une fonction dans build.xml pour solliciter ce fichier et récupérer ces utilisateurs afin d’importer sur le serveur ?

Merci d’avance.