5 astuces pour améliorer l’usage de la console de script de Liferay

// The english version of this article can be found here: 5 tips to improve usage of the Liferay script console.

// Si vous utilisez un lecteur RSS pour lire ce billet, veuillez basculer vers la page HTML pour voir correctement les morceaux de code.

Depuis la version 6.0,  Liferay propose une console de script intégrée dans le Control Panel. Très puissant, cet outil devient vite indispensable dès que l’on y a goûté (si vous ne connaissez pas encore la console de script, jetez un oeil sur l’article d’introduction de Jeffrey Handa).

Dans la suite de ce billet, je vais vous présenter 5 astuces simples pour encore mieux profiter de la console de script.

Les exemples de mise en oeuvre qui suivent sont basés sur le langage Groovy, mais la plupart de ces astuces sont applicables avec les autres langages supportés par la console de script du portail.
 
 

Astuce n°1 : Mettez du HTML dans vos sorties 

Il faut savoir que la sortie par défaut de la console de script est rendue directement en tant que contenu HTML. Pensez-donc à intégrer des balises HTML dans vos sorties pour bénéficier d’une mise en forme riche.
 
Exemple de script : 
 
Résultat :
 
 

Astuce n°2 : Affichez les exceptions dans l’interface utilisateur 

Lorsque une exception survient lors de l'exécution d’un script,  le message d’erreur est toujours le même quelque soit l’exception et ne donne aucun détail, ce qui oblige à consulter les logs du serveur pour effectuer un diagnostique.
 
 
Pour obtenir le détail de l’exception directement dans l’interface utilisateur, encadrez l’ensemble de votre traitement par un bloc try/catch et affichez la stack trace de l’exception sur la sortie de la console (depuis la clause catch). .
 
Example de script :
 
Résultat : 
 
A noter que cela ne fonctionne pas pour les erreurs liées à la syntaxe du script.
 
 

Astuce n°3 : Exploitez les variables prédéfinies 

Un script exécuté depuis la console du control panel dispose des variables prédéfinies suivantes :
  • out (java.io.PrintWriter)
  • actionRequest (javax.portlet.ActionRequest)
  • actionResponse (javax.portlet.ActionResponse)
  • portletConfig (javax.portlet.PortletConfig)
  • portletContext (javax.portlet.PortletContext)
  • preferences (javax.portlet.PortletPreferences)
  • userInfo (java.util.Map<String, String>)
Lorsque vous écrivez vos scripts, soyez conscient des possibilités offertes par ces variables, tout particulièrement la variable actionRequest, utile pour beaucoup d’appel de méthodes.
 
Exemple de script :
 
Résultat :
.
 
 

Astuce n°4 : Implémentez un mode preview

La console de script ne permettant pas de faire de rollback sur l’exécution d’un script, il est très pratique d’intégrer un mode preview pour les scripts qui modifient les données en base.
 
Ce mode "preview" consiste à utiliser un flag qui détermine si les les opérations à effets de bord sont exécutées ou non, alors que les données parcourues sont systématiquement tracées. Ceci permet donc de se faire une idée des données impactées par un script avant de faire effectivement les mises à jour en base de données.
 
Exemple de script :   

 

Astuce n°5 : Prévoyez une sortie fichier pour les scripts "longue durée"

Lorsque l’exécution d’un script dépasse une certaine durée, la console ne répond plus et retourne une erreur, alors même que le script peut continuer son exécution et potentiellement mener à bien l’ensemble de son traitement... Mais impossible de connaître le statut du traitement sans la sortie correspondante !
 
Pour remédier à cela, il suffit de prévoir une sortie fichier en plus de la sortie console, comme sur l’exemple ci-dessous :
Une fois le script initial exécuté, il est possible de lire le fichier généré sans pour autant avoir d’accès direct au système de fichier, en utilisant un second script :
A noter que cette technique basée sur un fichier de sortie dédié est préférable à l’utilisation d’un logger classique car elle facilite la récupération des données de sortie du script (qui seraient plus difficile à isoler parmi l’ensemble des logs du portail). 
 
Et vous, avez-vous des astuces à propos de la console de script à partager avec la communauté ? Faites en part dans les commentaires de ce billet !
 
Lectures complémentaires