Il existe beaucoup de données XML associées aux workflows Process Management d’AEM Forms on JEE. Par exemple, les informations XML peuvent être créées dans un processus et envoyées à une application Flex dans AEM Forms on JEE Workspace, utilisées pour les paramètres du système ou pour transmettre des informations à et depuis des formulaires. Il existe de nombreux cas où un développeur d’AEM Forms on JEE doit gérer du XML, ce qui nécessite souvent que le XML soit géré via un processus AEM Forms on JEE.
Lorsque vous utilisez des paramètres XML simples, vous pouvez utiliser le service Set Value
par défaut d’AEM Forms on JEE. Ce service définit la valeur d’un ou plusieurs éléments de données dans le modèle de données de processus. Dans le cadre d’une logique conditionnelle simple, selon les scénarios "ceci, alors cela", ce service peut répondre à l’objectif.
Cependant, dans des situations plus complexes, le service Set Value n’est pas aussi efficace. Dans ce cas, il faut s’appuyer sur un ensemble plus robuste de commandes de programmation, telles que celles fournies par un langage de programmation comme Java™. L’utilisation de Java™ pour créer du code XML complexe peut s’avérer beaucoup plus facile et plus claire que la création d’un document XML à partir d’un texte simple dans le service Set Value. En outre, il est plus facile d’inclure la programmation conditionnelle dans Java™ que dans un service Set Value.
Parmi tous les services AEM Forms on JEE standard disponibles dans AEM Forms on JEE Workbench se trouve le service Execute Script
. Ce service permet d’exécuter des scripts dans des processus et fournit l’opération executeScript
pour ce faire.
La création globale d’applications et de processus est hors de portée pour ce tutoriel, mais dans le cadre de cette instruction, une application nommée "DemoApplication02" a été créée. En supposant qu’une application ait déjà été créée, vous devez créer un processus dans cette application pour appeler le service executeScript. Pour ajouter un processus à l’application qui inclut le service Execute Script
:
executeScriptDemoProcess
.Foundation
. Le nom Services répertorie l’objet sous la forme Execute Script – 1.0
avec le nom d’opération executeScript
. Cliquez pour sélectionner cet élément.Une fois le processus créé avec l’activité de service Execute Script définie, il est possible d’ajouter un script à ce processus. Pour ajouter un script à ce processus :
Accédez à la palette Propriétés du processus. Dans cette palette, développez l’objet Entrée et cliquez sur l’icône "…".
Dans la zone de texte qui s’affiche, écrivez votre script. Une fois le script écrit, appuyez sur OK (voir la figure ci-dessous).
Une fois qu’un processus a été créé avec le service Execute Script inclus, il est possible d’utiliser ce script pour créer du code XML. Il est possible d’écrire les scripts décrits ci-dessous dans la zone de texte décrite dans la section Ajouter un script au processus avec la section Service Execute Script
ci-dessus.
À propos de la technologie du service Execute Script
Pour connaître les capacités et les limites du service Execute Script, vous devez connaître les fondements technologiques du service. AEM Forms on JEE utilise l’analyseur DOM (Apache Xerces Document Object Model) pour créer et stocker des variables XML dans des processus. Xerces est une implémentation Java™ de la spécification Document Object Model du W3C ; définie here. La spécification DOM est un moyen standard de manipuler XML qui existe depuis 1998. L’implémentation Java™ de Xerces, Xerces-J, prend en charge la version 1.0 du DOM Level 2.
Les classes Java™ utilisées pour stocker les variables XML sont les suivantes :
org.apache.xerces.dom.NodeImpl et
org.apache.xerces.dom.DocumentImpl
DocumentImpl est une sous-classe de NodeImpl. On peut donc supposer que toute variable de processus XML est une dérivation de NodeImpl. Vous pouvez trouver la documentation de NodeImpl ici.
Exemple de création de fichier XML à l’aide du service Execute Script
Consultez ci-après un exemple de création de fichier XML au sein d’un service Execute Script. Le processus comporte un noeud de variable de type XML. Le résultat de cette activité est un document XML. Lʼutilité de ce document, ou son application au processus global, est hors de portée de ce tutoriel ; tout dépend de ce que doit accomplir le document XML dans lʼapplication globale. Comme mentionné en introduction, le document XML peut servir à de nombreuses fins dans les formulaires et processus d’AEM Forms sur JEE. Ce tutoriel se contente d’expliquer comment coder l’activité Execute Script afin de générer un simple document XML.
Un simple code JavaScript pour générer du code XML ressemblerait à ceci :
import org.apache.xerces.dom.DocumentImpl;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
Document document = new DocumentImpl();
Element topLevelResources = document.createElement("resources");
Element resource = document.createElement("resource");
resource.setAttribute("id", "first item id");
resource.setAttribute("value", "first item value");
topLevelResources.appendChild(resource);
document.appendChild(topLevelResources);
patExecContext.setProcessDataValue("/process_data/node", document);
Les objets DOM mentionnés précédemment doivent être importés dans le script.
Le résultat de ce script simple est un nouveau document XML avec un nœud de variable défini sur :
<resources>
<resource id="first item id" value="first item value"/>
</resources>
Utiliser une boucle itérative pour ajouter des nœuds au XML
Il est également possible d’ajouter des nœuds à une variable XML existante dans le processus. La variable , le noeud , contient l’objet XML qui vient d’être créé.
Document document = patExecContext.getProcessDataValue("/process_data/node");
NodeList childNodes = document.getChildNodes();
int numChildren = childNodes.getLength();
for (int i = 0; i < numChildren; i++)
{
Node currentChild = childNodes.item(i);
if (currentChild.getNodeType() == Node.ELEMENT_NODE)
{
// found the top level node
Element newResource = document.createElement("resource");
newResource.setAttribute("id", "second item id");
newResource.setAttribute("value", "second item value");
currentChild.appendChild(newResource);
break;
}
}
patExecContext.setProcessDataValue("/process_data/node", document);
The variable node in the XML is now set to:
<resources>
<resource id="first item id" value="first item value"/>
<resource id="second item id" value="second item value"/>
</resources>