PlanetPress for life: Mon lanceur de processus en ligne

Nécessité est mère d’invention, comme on dit. Je pourrais ajouter que la répétitivité est mère d’automatisation, et la paresse son père. Mais je ne veux pas déclencher une guerre des sexes aussi, je dirais simplement que la répétitivité et la paresse sont les parents de l’automatisation ! Le fait est que chaque fois que je dois effectuer la même tâche, encore et encore, je me demande comment elle pourrait être automatisée, que je sois à la maison ou au bureau. Je ne parle pas ici de tâches agréables comme jouer de la guitare, ou de tâches exigeant de grandes connaissances comme la conception, le diagnostic, l’évaluation, etc. Je parle de tâches telles que laver la vaisselle, diviser ou fusionner des fichiers, mettre à jour un fichier de journalisation. Mais, alors que certaines tâches peuvent être entièrement automatisées, comme la sonnerie du réveil que je n’ai pas besoin de régler tous les jours, d’autres tâches peuvent profiter de davantage de contrôle utilisateur comme une interface web de lancement des jobs où un utilisateur peut voir les jobs empilés, sélectionner et effectuer des actions sur les jobs qu’il décide, au moment où il le décide.

Dans ce billet, j’utilise le Serveur HTTP PlanetPress pour héberger un lanceur de processus en ligne. Comme c’est le cas avec les autres billets que j’ai publiés dans ce blog, le contexte est que PlanetPress Suite est installé à la maison (quelle chance !). Bien sûr, comme les autres cas que j’ai présentés, celui-ci peut s’appliquer en entreprise.

1

La problématique

Mes amis et moi faisons de la musique. Nous enregistrons généralement nos morceaux qui donnent lieu à la création de plusieurs fichiers. Nous prenons aussi des photos, enregistrons des vidéos, écrivons des paroles, etc. Après quelques séances, un grand nombre de fichiers peut être créé. Je sauvegarde ces fichiers dans un emplacement temporaire et, quand j’ai le temps, je passe ces fichiers en revue, j’élimine les mauvais et j’archive les bons ou je les prépare simplement pour une étape de traitement supplémentaire. Les photos, mp3, playlists et films doivent être copiés sur mon disque local dans des sous-dossiers appropriés, mais ils doivent aussi être téléchargés sur un système de partage de fichiers que notre groupe utilise, comme un site FTP, Dropbox, etc. De plus, chaque fois que j’ajoute des fichiers dans le système de partage de fichiers, je dois avertir les membres du groupe par e-mail afin qu’ils sachent quel fichier a été ajouté et quand.

En gardant ceci à l’esprit, l’idée d’avoir un gestionnaire web pour visualiser les fichiers et lancer un processus d’archivage d’un clic de souris est particulièrement séduisant. Ce que je voudrais obtenir est :

  1. Une interface personnalisée de gestion de fichiers disponible de n’importe quel ordinateur de mon réseau local.
  2. Avoir plus de temps à consacrer à l’évaluation de la qualité d’un fichier.
  3. Ne pas perdre de temps à copier des fichiers ici et là et à écrire des e-mails à ce propos.
  4. Avoir la possibilité d’effectuer toutes les tâches d’archivage en cliquant sur un bouton, au moment où je le décide.
  5. Effectuer le suivi de toutes mes actions.

Les opportunités

Les outils HTTP/SOAP de PlanetPress Suite sont vraiment géniaux. Ils sont pourtant passés inaperçus lors de leur sortie il y a quelques années, éclipsés par des fonctionnalités plus spectaculaires comme les outils PDF de PlanetPress. Mais au fil des ans, des fonctionnalités telles que la possibilité de traiter des données de formulaire HTML ou d’utiliser des services web se sont révélées être d’incroyables facilitateurs d’affaires. Voici quelques opportunités que j’ai identifiées dans le cadre d’une solution parfaitement utilisable.

PlanetPress peut délivrer des ressources HTTP

Une fonctionnalité utile du Serveur HTTP PlanetPress est sa capacité à délivrer très rapidement des ressources HTTP statiques, tout comme un serveur web, bien qu’il ne soit pas destiné à remplacer un serveur web. En activant cette fonctionnalité dans les préférences de l’outil PlanetPress Workflow, comme le montre la partie gauche de l’illustration ci-dessous, je peux placer un fichier dans un dossier de mon choix pour le rendre disponible dans n’importe quel navigateur web sur mon réseau.

2

PlanetPress peut traiter des données de formulaire HTTP

La création de formulaires web est facile. Après quelques minutes de recherche et d’expérimentation, vous pourrez construire un formulaire très complexe avec des boutons radio, listes déroulantes, téléchargement de fichiers, etc. En revanche, le traitement des données de formulaire HTML est un peu plus obscur car il peut s’appuyer sur différentes technologies côté serveur. PlanetPress facilite le traitement des données de formulaire HTML : un processus HTTP commence quand une requête HTTP qui fait référence au paramètre d’action HTTP de la tâche en entrée est effectuée. Le fichier de données du processus est un fichier XML contenant tous les paramètres du formulaire d’entrée HTML, incluant les chemins vers les copies locales de tous les fichiers téléchargés. Contrairement aux processus plus classiques, un processus HTTP doit créer un fichier de réponse qui sera renvoyé au client HTTP. Cette réponse est le fichier du job à la fin du traitement PlanetPress.

3

Le tri des tableaux HTML est facile avec jQuery

Si je travaille avec une interface présentant des données sous forme de tableau, je m’attends au moins à pouvoir trier le tableau sur n’importe quelle colonne. Il y a environ quinze ans, j’aurais étudié le JavaScript et le Document Object Model puis, j’aurais essayé de coder un script de tri de tableau très basique. Il m’aurait fallu un certain temps avant de trouver une solution tout juste utilisable, difficile à maintenir et qui n’aurait probablement fonctionné que dans mon navigateur Netscape ! Mais nous sommes en 2014, j’ai donc simplement tapé “table sorter” sous Google et trouvé ce que je cherchais dans le premier résultat trouvé !

4

Grâce à Christian Bach et à son module tablesorter JQuery (http://tablesorter.com), je peux maintenant créer facilement un tableau triable en HTML.

Le XML et le XSL sont fantastiques

Le XML (eXtensible Markup Language) a été introduit en 1997 et a eu un impact énorme sur la façon de représenter et afficher les données. Avant le XML, il existait d’autres langages de balisage, le HTML en étant l’exemple le plus marquant. Mais ce n’était pas une bonne idée (cela ne l’est toujours pas aujourd’hui) de stocker des informations dans un fichier HTML, principalement parce que le HTML représente à la fois l’information et la façon de la représenter. En contrepartie, le XML concerne purement les informations. Son homologue, le XSL (eXtensible Stylesheet Language) est en fait un fichier XML contenant des balises et des modèles spéciaux pour transformer un fichier XML en autre chose, comme un autre fichier XML, un fichier HTML, un CSV, etc.

5

Dans le cas qui m’intéresse, le contenu du tableau que je veux afficher peut être un fichier XML alors que la façon de l’afficher peut être décrite dans un fichier XSL. Cette méthode permet de modifier facilement les données XML sans se soucier de la façon dont elles seront affichées.

Le workflow

Grâce à toutes les possibilités que j’ai identifiées, le travail est presque fait pour moi. Presque. Quelques processus doivent être implémentés.

Processus de démarrage

Lorsque les services PlanetPress Suite sont démarrés, je veux que tous les fichiers nécessaires à l’application web soient créés pour travailler immédiatement. Ce sont des fichiers XML, XSL, CSS et JavaScript. Certains de ces fichiers sont des fichiers zip téléchargés sur le web et extraits dans le dossier approprié, spécifié par une variable globale (car elle est utilisée ailleurs). Le processus doit s’exécuter une seule fois, lorsque les services démarrent. C’est précisément ce que fait le processus de démarrage.

Processus HTTP

Grâce à la tâche “Entrée de Serveur”, chaque processus HTTP (Actualiser, Télécharger, Supprimer et Archiver) est lancé lorsque l’utilisateur clique sur un bouton ou un lien web dans l’interface. La plupart de ces processus sont simples, tel que le processus Actualiser qui met à jour le fichier XML et redirige le client vers l’URL d’origine, celle où il était lorsqu’il a cliqué sur le bouton Actualiser.

6

Processus de démarrage

Lorsque les services PlanetPress Suite sont démarrés, je veux que tous les fichiers nécessaires à l’application web soient créés pour travailler immédiatement. Ce sont des fichiers XML, XSL, CSS et JavaScript. Certains de ces fichiers sont des fichiers zip téléchargés sur le web et extraits dans le dossier approprié, spécifié par une variable globale (car elle est utilisée ailleurs). Le processus doit s’exécuter une seule fois, lorsque les services démarrent. C’est précisément ce que fait le processus de démarrage.

Processus HTTP

Grâce à la tâche “Entrée de Serveur”, chaque processus HTTP (Actualiser, Télécharger, Supprimer et Archiver) est lancé lorsque l’utilisateur clique sur un bouton ou un lien web dans l’interface. La plupart de ces processus sont simples, tel que le processus Actualiser qui met à jour le fichier XML et redirige le client vers l’URL d’origine, celle où il était lorsqu’il a cliqué sur le bouton Actualiser.

7

Le processus Télécharger démarre lorsque l’utilisateur clique sur le bouton correspondant dans l’interface web après avoir sélectionné le fichier qu’il veut télécharger. Ce processus ne fait que sauvegarder le fichier dans le dossier dont le contenu est listé dans le XML, puis redirige le client web vers le XML d’origine (qui est affiché correctement grâce au XSL).

Les processus Archiver et Supprimer sont assez similaires. Ils sont tous deux déclenchés lorsque l’utilisateur clique sur les liens Archiver ou Supprimer attenants au fichier sur lequel il veut effectuer une action. Par exemple, cliquer sur un lien Archiver d’un fichier nommé “abc.txt” équivaut à aller à l’URL http://monserveur/archive?f=abc.txt. Au final, toute action que je souhaite effectuer sur un fichier peut être implémentée sous la forme d’un lien web qui déclenche un processus HTTP effectuant les actions suivantes :

  1. Capturer le nom du fichier XML généré par le Serveur HTTP PlanetPress.
  2. Nettoyer le nom de fichier avec des expressions régulières et du JavaScript (on n’est jamais trop prudent !).
  3. Faire ce qu’il y a à faire avec le fichier, par exemple le copier vers un autre emplacement pour déclencher un processus d’archivage.
  4. Mettre à jour la table XML des fichiers (seulement si le processus change le contenu du tableau).
  5. Ajouter une ligne dans un fichier de journalisation que je peux voir à tout moment, pour garder la trace des actions effectuées.

Sous-processus

Lorsque plusieurs processus effectuent le même sous-ensemble de tâches, il est très pratique de placer ces tâches dans un sous-processus et faire en sorte que les processus appellent le sous-processus au lieu de répéter les mêmes actions. Le workflow est alors beaucoup facile à maintenir. Voici les sous-processus que j’ai implémentés :

  1. Mettre à jour XML : Ce sous-processus met simplement à jour le fichier XML. Comme tous mes processus modifient le contenu du tableau, ils utilisent tous ce sous‑processus.
  2. Créer une page de redirection : En appelant ce sous-processus avant qu’ils aient terminé, chaque processus HTTP retourne juste un lien de redirection au client web. Ceci garantit que, quelle que soit l’action de l’utilisateur, il finira toujours par voir s’afficher le tableau HTML. La redirection est implémentée avec une page contenant une seule balise meta “refresh”. Je dois préciser que l’utilisation de cette balise est déconseillée par le W3C mais, pour l’application que je crée, ce n’est vraiment pas un problème.
  3. Nettoyer le nom de fichier : Quelques sous-processus nécessitent un paramètre d’entrée qui peut contenir des caractères non valides (par exemple, un nom de fichier contenant un slash). Ce sous-processus nettoie le nom de fichier à l’aide du JavaScript.
  4. Journalisation : Ce sous-processus ajoute une ligne dans un fichier log.txt, avec des informations provenant du processus d’appel.

Le fun

Au final, j’ai obtenu ce que je voulais : une interface web conviviale qui me permet de télécharger, visualiser, supprimer ou archiver les fichiers. J’ai aussi un système de journalisation simple mais efficace pour garder la trace des actions exécutées sur les fichiers.

En poussant plus loin le raisonnement, le workflow que j’ai implémenté peut être facilement perfectionné en ajoutant des actions qui peuvent être exécutées sur chacun des fichiers, telles que : impression, e-mail, téléchargement FTP, etc. Par ailleurs, en plus des liens web, je pourrais également implémenter des actions de formulaire HTTP personnalisées pour chaque ligne, comme la possibilité de sélectionner l’imprimante sur laquelle je veux imprimer ou les destinataires à qui je souhaite envoyer le fichier par courrier électronique, etc.

En toute honnêteté, j’ai passé plus de temps à écrire ce billet qu’à implémenter le workflow. J’espère qu’il vous donnera des idées pour utiliser le Serveur HTTP PlanetPress. D’un lanceur de job à un système d’entrée de données en ligne, une fois que vous savez ce qu’il peut faire, les possibilités sont infinies.

Si vous souhaitez obtenir une copie du worklow, n’hésitez pas à en faire la demande par e-mail à l’adresse creatingnewways@ca.objectiflune.com

 

THIS ARTICLE IS ABOUT

translated