Verwenden des Service „execute script“ in AEM Forms on JEE Workbench zum Erstellen von XML-Daten

Letzte Aktualisierung: 2023-12-19

Es gibt viele XML-Dateien, die mit AEM Forms on JEE Process Management-Workflows verwendet werden, z. B.: XML-Informationen können in einem Prozess erstellt und an eine Flex-Anwendung in AEM Forms on JEE Workspace gesendet werden, die für Systemeinstellungen verwendet wird oder Informationen an und von Formularen übergeben werden. Es gibt viele Fälle, in denen ein Entwickler für AEM Forms on JEE XML verwalten muss. Häufig muss dazu die XML über einen AEM Forms on JEE-Prozess verwaltet werden.

Bei einfachen XML-Einstellungen kann der Service Set Value verwendet werden. Es handelt sich dabei um einen Standard-Service von AEM Forms on JEE. Dieser Service legt den Wert eines oder mehrerer Datenelemente im Prozessdatenmodell fest. Für Szenarien mit einer einfachen bedingten „wenn, dann“-Logik kann dieser Service den Zweck erfüllen.

In komplexeren Situationen ist der Service „Set Value“ jedoch nicht so effektiv. In diesen Situationen muss man sich auf einen robusteren Satz von Programmierbefehlen verlassen, wie sie beispielsweise eine Programmiersprache wie Java bietet. Die Verwendung von Java™ zum Erstellen komplexer XML-Dateien kann viel einfacher und klarer sein als das Erstellen eines XML-Dokuments aus einfachem Text im Service „Set Value“. Darüber hinaus ist es einfacher, bedingte Programmierung in Java™ einzubinden als in den Service „Set Value“.

Verwenden des Service „Execute Script“ in einem Prozess

Zum Satz der Standard-Services von AEM Forms on JEE, die in der Workbench von AEM Forms on JEE verfügbar sind, gehört der Service Execute Script. Dieser Service ermöglicht die Ausführung von Skripten in Prozessen und stellt hierzu den Vorgang executeScript bereit.

Erstellen eines Programms und eines Prozesses mit dem als Aktivität definierten Service „Execute Script“

Die allgemeine Erstellung von Anwendungen und Prozessen ist nicht Gegenstand dieses Tutorials, aber für diese Anleitung haben wir eine Anwendung namens „DemoApplication02“ erstellt. Wenn eine Anwendung bereits erstellt wurde, müssen Sie in dieser Anwendung einen Prozess erstellen, um den executeScript-Service aufzurufen. So fügen Sie dem Programm einen Prozess hinzu, der den Service Execute Script beinhaltet:

  1. Klicken Sie mit der rechten Maustaste auf Ihre Anwendung und wählen Sie Neu. Wählen Sie im ausklappbaren Menü Neu die Option Prozess. Benennen Sie den Prozess, fügen Sie bei Bedarf eine Beschreibung hinzu und wählen Sie das Symbol aus, das diesen Prozess darstellen soll. Für dieses Tutorial haben wir einen Prozess erstellt und ihn executeScriptDemoProcess genannt.
  2. Definieren Sie die Startpunkte oder entscheiden Sie sich einfach, die Startpunkte später hinzuzufügen.
  3. Der Prozess wird jetzt erstellt und sollte automatisch im Fenster Prozess-Design geöffnet werden. Klicken Sie hier oben im Fenster „Prozess-Design“ auf das Symbol für die Aktivitätsauswahl und ziehen Sie die neue Aktivität auf die Schwimmbahn. Zu diesem Zeitpunkt sollte das Fenster Aktivität definieren angezeigt werden (siehe Abbildung unten).
    Aktivität definieren
  4. Der executeScript-Service befindet sich unter der Gruppe Foundation der Services. Unter „Services“ wird das Objekt als Execute Script – 1.0 mit dem Vorgangsnamen executeScript aufgeführt. Wählen Sie dieses Element aus, indem Sie darauf klicken.
  5. Dieser Prozess sollte jetzt erstellt werden. Standardmäßig sollte das Fenster Prozesseigenschaften im linken Bereich angezeigt werden.

Hinzufügen eines Skripts zum Prozess mit dem Service „Execute Script“

Nachdem der Prozess mit der definierten Aktivität „Execute Script“ erstellt wurde, kann diesem Prozess ein Skript hinzugefügt werden. So fügen Sie diesem Prozess ein Skript hinzu:

  1. Navigieren Sie zur Palette Prozesseigenschaften. Erweitern Sie in dieser Palette den Abschnitt Eingabe und klicken Sie auf das Symbol „…“.

  2. Schreiben Sie Ihr Skript in das angezeigte Textfeld. Wenn das Skript vollständig eingegeben wurde, wählen Sie „OK“ (siehe Abbildung unten) aus.
    Execute Script

Erstellen von XML mit dem Service „Execute Script“

Nachdem ein Prozess, der den Service „Execute Script“ enthält, erstellt wurde, kann dieses Skript zur Erstellung von XML verwendet werden. Sie würden die unten beschriebenen Skripte in das Textfeld eingeben, das im Abschnitt „Hinzufügen eines Skripts zum Prozess mit dem Service Execute Script“ weiter oben beschrieben wurde.

Über die Technologie des Service „Execute Script“

Um zu wissen, welche Funktionen und Einschränkungen der Service „Execute Script“ hat, müssen Sie die technologischen Grundlagen des Service kennen. AEM Forms on JEE verwendet den Parser Apache Xerces Document Object Model (DOM), um XML-Variablen in Prozessen zu erstellen und zu speichern. Xerces ist eine Java™-Implementierung der W3C-Spezifikation von Document Object Model, deren Definition hier zu finden ist. Die DOM-Spezifikation ist ein Standardverfahren zur Bearbeitung von XML, das seit 1998 existiert. Die Java™-Implementierung von Xerces, Xerces-J, unterstützt DOM Level 2 Version 1.0.

Die Java™-Klassen, die zum Speichern von XML-Variablen verwendet werden, sind:

  • org.apache.xerces.dom.NodeImpl und

  • org.apache.xerces.dom.DocumentImpl

DocumentImpl ist eine Unterklasse von NodeImpl. Daher kann angenommen werden, dass jede XML-Prozessvariable eine NodeImpl-Ableitung ist. Die Dokumentation für NodeImpl finden Sie hier.

Beispiel für die XML-Erstellung mit dem Service „Execute Script“

Im Folgenden finden Sie ein Beispiel für das Erstellen von XML in einem Service „Execute Script“. Der Prozess verfügt über eine Variable, einen Knoten, der vom Typ XML ist. Das Endergebnis dieser Aktivität ist ein XML-Dokument. Was dieses Dokument tut oder wie es auf den gesamten Prozess angewendet wird, ist für dieses Tutorial nicht relevant. Letztlich geht es darum, was XML im übergeordneten Programm tun muss. Wie in der Einführung erwähnt, kann XML in AEM Forms on JEE-Formularen und -Prozessen für viele Zwecke verwendet werden. Dies ist lediglich eine Erklärung dafür, wie die Aktivität „Execute Script“ kodiert wird, um ein einfaches XML-Dokument auszugeben.

Ein einfaches JavaScript zur Ausgabe von XML würde in etwa wie folgt aussehen:

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);
HINWEIS

Die oben genannten DOM-Objekte müssen in das Skript importiert werden.

Das Ergebnis dieses einfachen Skripts ist ein neues XML-Dokument mit einem Variablenknoten, der auf Folgendes festgelegt ist:

<resources>

<resource id="first item id" value="first item value"/>

</resources>

Verwenden einer iterativen Schleife zum Hinzufügen von Knoten zur XML-Datei

Knoten können auch innerhalb des Prozesses zu einer vorhandenen XML-Variablen hinzugefügt werden. Die Variable "node"enthält das erstellte XML-Objekt.

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>

Auf dieser Seite