Beispiele für JavaScript-Code in Workflows javascript-in-workflows
Diese Beispiele zeigen, wie Sie JavaScript-Code in einem Workflow verwenden können:
Weitere Informationen über statische und nicht statische SOAP-Methoden.
In diesen Beispielen wird die Erweiterung ECMAScript for XML (E4X) verwendet. Mit dieser Erweiterung können Sie JavaScript-Aufrufe und XML-Primitive im selben Script kombinieren.
Gehen Sie wie folgt vor, um diese Beispiele auszuprobieren:
-
Erstellen Sie einen Workflow und fügen Sie die folgenden Aktivitäten zum Workflow hinzu:
- Startaktivität
- JavaScript-Code-Aktivität
- Endaktivität
Weitere Informationen über das Erstellen von Workflows.
-
Fügen Sie den JavaScript-Code zu einer Aktivität hinzu. Weitere Informationen.
-
Speichern Sie den Workflow.
-
Testen Sie die Beispiele:
- Starten Sie den Workflow. Weitere Informationen.
- Öffnen Sie das Protokoll. Weitere Informationen.
Beispiel 1: In Datenbank schreiben write-example
Zum Schreiben in die Datenbank können Sie die statische Write
-Methode mit dem xtk:session
-Schema verwenden:
-
Erstellen Sie eine Schreibabfrage in XML.
-
Schreiben Sie den Datensatz:
-
Rufen Sie die
Write
-Methode mit demxtk:session
-Schema auf.note important IMPORTANT Wenn Sie Adobe Campaign v8 verwenden, empfehlen wir, den Staging-Mechanismus mit den Aufnahme- und Datenaktualisierungs/-löschungs-APIs für die Write
-Methode in einer Snowflake-Tabelle zu verwenden. Weitere Informationen. -
Übergeben Sie den XML-Code als Argument für die Schreibabfrage.
-
Schritt 1: Erstellen einer Schreibabfrage
Sie können Datensätze hinzufügen, aktualisieren und löschen.
Einfügen eines Datensatzes
Da der insert
-Vorgang der Standardvorgang ist, müssen Sie ihn nicht angeben.
Geben Sie diese Informationen als XML-Attribute an:
- Das Schema der zu ändernden Tabelle
- Die auszufüllenden Tabellenfelder
Beispiel:
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
Aktualisieren eines Datensatzes
Verwenden Sie den _update
-Vorgang. Weitere Informationen.
Geben Sie diese Informationen als XML-Attribute an:
- Das Schema der zu ändernden Tabelle
- Die zu aktualisierenden Tabellenfelder
- Das Schlüsselargument, das erforderlich ist, um den zu aktualisierenden Datensatz zu identifizieren
Beispiel:
var myXML = <recipient xtkschema="nms:recipient"
status="Client"
email="isabel.garcia@mycompany.com"
operation="_update"
_key="@email"/>
Löschen eines Datensatzes
Verwenden Sie die DeleteCollection
-Methode. Weitere Informationen.
Geben Sie diese Informationen an:
- Das Schema der zu ändernden Tabelle
- Die
where
-Klausel, die erforderlich ist, um den zu aktualisierenden Datensatz in Form eines XML-Elements zu identifizieren
Beispiel:
xtk.session.DeleteCollection(
"nms:recipient",
<where>
<condition expr="[@email] = 'isabel.garcia@mycompany.com'"/>
</where>,
false
)
Schritt 2: Datensatz schreiben
Rufen Sie die nicht statische Write
-Methode mit dem xtk:session
-Schema auf:
xtk.session.Write(myXML)
Für diese Methode wird kein Wert zurückgegeben.
Fügen Sie zu einer JavaScript-Code-Aktivität im Workflow den vollständigen Code hinzu:
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
xtk.session.Write(myXML)
In diesem Video wird gezeigt, wie in die Datenbank geschrieben wird:
Beispiel 2: Datenbank abfragen read-example
Um die Datenbank abzufragen, können Sie die nicht statische xtk:queryDef
-Instanzmethode verwenden:
- Erstellen Sie eine Abfrage in XML.
- Erstellen Sie ein Abfrageobjekt.
- Führen Sie die Abfrage aus.
Schritt 1: Abfrage erstellen
Geben Sie den XML-Code für eine queryDef
-Entität an.
Syntax:
<queryDef schema="nms:recipient" operation="">
<!-- select, where, and orderBy clauses as XML elements -->
</queryDef>
Geben Sie diese Informationen an:
- Das Schema der zu lesenden Tabelle
- Der Vorgang
- Die zurückzugebenden Spalten in einer
select
-Klausel - Die Bedingungen in einer
where
-Klausel - Die Filterkriterien in einer
orderBy
-Klausel
Sie können die folgenden Vorgänge verwenden:
select
getIfExists
get
count
count
-Attribut zurückgegeben.Schreiben Sie die select
-, where
- und orderBy
-Klauseln als XML-Elemente:
-
select
-KlauselGeben Sie die zurückzugebenden Spalten an. Um beispielsweise den Vor- und Nachnamen der Person auszuwählen, schreiben Sie folgenden Code:
code language-xml <select> <node expr="@firstName"/> <node expr="@lastName"/> </select>
Mit dem
nms:recipient
-Schema werden Elemente in der folgenden Form zurückgegeben:code language-xml <recipient firstName="Bo" lastName="Didley"/>
-
where
-KlauselUm Bedingungen festzulegen, verwenden Sie eine
where
-Klausel. Um beispielsweise die Datensätze auszuwählen, die sich im Ordner Training befinden, können Sie den folgenden Code schreiben:code language-xml <where> <condition expr="[folder/@label]='Training'"/> </where>
Verwenden Sie beim Kombinieren mehrerer Ausdrücke den booleschen Operator im ersten Ausdruck. Um beispielsweise alle Personen mit Namen Isabel Garcia auszuwählen, können Sie den folgenden Code schreiben:
code language-xml <condition boolOperator="AND" expr="@firstName='Isabel'"/> <condition expr="@lastName='Garcia'"/>
-
orderBy
-KlauselUm die Ergebnismenge zu sortieren, geben Sie die
orderBy
-Klausel als XML-Element mit demsortDesc
-Attribut an. Um beispielsweise die Nachnamen in aufsteigender Reihenfolge zu sortieren, können Sie den folgenden Code schreiben:code language-xml <orderBy> <node expr="@lastName> sortDesc="false"/> </orderBy>
Schritt 2: Abfrageobjekt erstellen
Um eine Entität aus dem XML-Code zu erstellen, verwenden Sie die create(
content
)
-Methode:
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
…
</queryDef>)
Stellen Sie der create(
content
)
-Methode das Schema der zu erstellenden Entität als Präfix voran.
Das content
-Argument ist ein Zeichenfolgenargument und optional. Dieses Argument enthält den XML-Code, der die Entität beschreibt.
Schritt 3: Abfrage ausführen
Führen Sie folgende Schritte aus:
-
Rufen Sie die
ExecuteQuery
-Methode mit derqueryDef
-Entität auf:code language-javascript var res = query.ExecuteQuery()
-
Verarbeiten Sie die Ergebnisse:
- Iterieren Sie über die Ergebnisse des
select
-Vorgangs mithilfe eines Schleifenkonstrukts. - Testen Sie die Ergebnisse mithilfe des
getIfExists
-Vorgangs. - Zählen Sie die Ergebnisse mithilfe des
count
-Vorgangs.
- Iterieren Sie über die Ergebnisse des
Ergebnisse eines select
-Vorgangs
Alle Übereinstimmungen werden als Sammlung zurückgegeben:
<recipient-collection>
<recipient email="jane.smith@mycompany.com">
<recipient email="john.harris@mycompany.com">
</recipient-collection>
Um die Ergebnisse zu durchlaufen, verwenden Sie die for each
-Schleife:
for each (var rcp in res:recipient)
logInfo(rcp.@email)
Die Schleife enthält eine lokale Empfängervariable. Für jeden Empfänger, der in der Empfängersammlung zurückgegeben wird, wird die E-Mail des Empfängers ausgedruckt. Weitere Informationen über die logInfo
-Funktion.
Ergebnisse eines getIfExists
-Vorgangs
Jede Übereinstimmung wird als Element zurückgegeben:
<recipient id="52,378,079">
Wenn keine Übereinstimmung vorliegt, wird ein leeres Element zurückgegeben:
<recipient/>
Sie können auf den Primärschlüsselknoten verweisen, z. B. das @id
-Attribut:
if (res.@id !=undefined)
{ // match was found
…
}
Ergebnis eines get
-Vorgangs
Eine Übereinstimmung wird als Element zurückgegeben:
<recipient id="52,378,079">
Wenn keine Übereinstimmung vorliegt, wird ein Fehler zurückgegeben.
get
-Vorgang. Verwenden Sie andernfalls den getIfExists
-Vorgang. Wenn Sie diese Best Practice verwenden, zeigt das Auftreten von Fehlern, dass unerwartete Probleme vorliegen. Wenn Sie den get
-Vorgang verwenden, verwenden Sie nicht die Anweisung try…catch
. Das Problem wird durch den Fehlerverarbeitungsprozess des Workflows behoben.Ergebnis eines count
-Vorgangs
Ein Element mit dem count
-Attribut wird zurückgegeben:
<recipient count="200">
Um das Ergebnis zu verwenden, verweisen Sie auf das @count
-Attribut:
if (res.@count > 0)
{ // matches were found
…
}
Fügen Sie für den select
-Vorgang den folgenden Code zu einer JavaScript-Code-Aktivität im Workflow hinzu:
var myXML =
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@firstName"/>
<node expr="@lastName"/>
</select>
</queryDef>
var query = xtk.queryDef.create(myXML)
var res = query.ExecuteQuery()
for each (var rcp in res.recipient)
logInfo(rcp.@firstName + " " + rcp.@lastName)
Da der select
-Vorgang der Standardvorgang ist, müssen Sie ihn nicht angeben.
In diesem Video wird gezeigt, wie aus der Datenbank gelesen wird:
Auslösen eines Workflows trigger-example
Sie können Workflows programmgesteuert auslösen, beispielsweise in technischen Workflows oder zur Verarbeitung von Informationen, die ein Benutzer auf einer Web-Anwendungsseite eingegeben hat.
Das Auslösen von Workflows erfolgt durch die Verwendung von Ereignissen. Sie können die folgenden Funktionen für Ereignisse verwenden:
- Um ein Ereignis zu posten, können Sie die statische
PostEvent
-Methode verwenden. Weitere Informationen. - Um ein Ereignis zu erhalten, können Sie die Aktivität Externes Signal verwenden. Weitere Informationen.
Sie haben verschiedene Möglichkeiten, Workflows auszulösen:
-
Sie können einen Workflow inline auslösen, d. h. vom Hauptskript einer JavaScript-Code-Aktivität aus.
-
Sie können einen Workflow nach Abschluss eines anderen auslösen:
-
Fügen Sie zur Endaktivität des ersten Workflows ein Initialisierungsscript hinzu.
-
Fügen Sie die Aktivität Externes Signal am Beginn des Ziel-Workflows hinzu.
Nach Abschluss des ersten Workflows wird ein Ereignis gepostet. Die ausgehende Transition wird aktiviert und die Ereignisvariablen werden ausgefüllt. Anschließend wird das Ereignis vom Ziel-Workflow empfangen.
note tip TIP Wenn Sie ein Script zu einer Aktivität hinzufügen, empfiehlt es sich, den Aktivitätsnamen in doppelte Bindestriche einzuschließen, beispielsweise -- end --
. Weitere Informationen zu Best Practices für Workflows.
-
Syntax der PostEvent
-Methode:
PostEvent(
String //ID of the target workflow
String //Name of the target activity
String //Name of the transition to be activated in case of multiple transitions
XML //Event parameters, in the <variables/> element
Boolean //To trigger the target workflow only once, set this parameter to true.
)
In diesem Beispiel wird nach Abschluss des Workflows ein kurzer Text an die Signalaktivität des Workflows wkfExampleReceiver übergeben:
var strLabel = "Adobe Campaign, Marketing that delivers"
xtk.workflow.PostEvent(
"wkfExampleReceiver",
"signal",
"",
<variables strLine={strLabel}/>,
false)
Da der letzte Parameter auf false
festgelegt ist, wird der Workflow wkfExampleReceiver jedes Mal ausgelöst, wenn der erste Workflow abgeschlossen ist.
Beachten Sie beim Auslösen eines Workflows die folgenden Grundsätze:
- Der Befehl
PostEvent
wird asynchron ausgeführt. Der Befehl wird in die Server-Warteschlange eingefügt. Die Methode gibt nach der Veröffentlichung des Ereignisses etwas zurück. - Der Ziel-Workflow muss gestartet werden. Andernfalls wird ein Fehler in die Protokolldatei geschrieben.
- Wenn der Ziel-Workflow ausgesetzt wird, wird der Befehl
PostEvent
in die Warteschlange aufgenommen, bis der Workflow fortgesetzt wird. - Die ausgelöste Aktivität erfordert nicht, dass eine Aufgabe in Bearbeitung ist.
In diesem Video wird gezeigt, wie statische API-Methoden verwendet werden können:
In diesem Video wird gezeigt, wie Workflows ausgelöst werden:
Interagieren mit der Datenbank interact-example
Diese Beispiele zeigen, wie Sie diese Aktionen durchführen:
- Verwenden Sie die Methoden
get
undcreate
für Schemata zur Verwendung nicht statischer SOAP-Methoden - Erstellen von Methoden zum Ausführen von SQL-Abfragen
- Verwenden Sie die
write
-Methode zum Einfügen, Aktualisieren und Löschen von Datensätzen
Führen Sie folgende Schritte aus:
-
Definieren Sie die Abfrage:
- Rufen Sie eine Entität mithilfe der
create
-Methode für das entsprechende Schema ab, z. B. dasxtk:workflow
-Schema. Weitere Informationen. - Verwenden Sie die
queryDef
-Methode, um eine SQL-Abfrage auszugeben.
- Rufen Sie eine Entität mithilfe der
-
Führen Sie die Abfrage mithilfe der
ExecuteQuery
-Methode aus. Weitere Informationen.Verwenden Sie die
for each
-Schleife zum Abrufen der Ergebnisse.
Syntax der queryDef
-Methode mit der select
-Klausel
<queryDef schema="schema_key" operation="operation_type">
<select>
<node expr="expression1">
<node sql="expression2">
</select>
<where>
<condition expr="expression1"/>
<condition sql="expression2"/>
</where>
<orderBy>
<node expr="expression1">
<node sql="expression2">
</orderBy>
<groupBy>
<node expr="expression1">
<node sql="expression2">
</groupBy>
<having>
<condition expr="expression1"/>
<condition sql="expression2"/>
</having>
</queryDef>
Create
-Methode
Beispiel 1: Datensätze auswählen und in das Protokoll schreiben
Die internen Namen der Workflows, die sich im Ordner wfExamples befinden, werden ausgewählt. Die Ergebnisse werden nach internem Namen in aufsteigender Reihenfolge sortiert und in das Protokoll geschrieben.
var query = xtk.queryDef.create(
<queryDef schema="xtk:workflow" operation="select">
<select>
<node expr="@internalName"/>
</select>
<where>
<condition expr="[folder/@name]='wfExamples'"/>
</where>
<orderBy>
<node expr="@internalName" sortDesc="false"/>
</orderBy>
</queryDef>
)
var res = query.ExecuteQuery()
for each (var w in res.workflow)
logInfo(w.@internalName)
Beispiel 2: Datensätze löschen
Vorname, Nachname, E-Mail-Adresse und Kennung aller Empfänger mit dem Namen Chris Smith werden ausgewählt. Die Ergebnisse werden nach E-Mail-Adresse in aufsteigender Reihenfolge sortiert und in das Protokoll geschrieben. Ein delete
-Vorgang wird zum Löschen der ausgewählten Datensätze verwendet.
// Build the query, create a query object and hold the object in a variable
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@firstName"/>
<node expr="@lastName"/>
<node expr="@email"/>
<node expr="@id"/>
</select>
<where>
<condition expr="[folder/@label]='Recipients'"/>
<condition expr="[@lastName]='Smith'"/>
<condition expr="[@firstName]='Chris'"/>
</where>
<orderBy>
<node expr="@email" sortDesc="false"/>
</orderBy>
</queryDef>
)
//Run the query using the ExecuteQuery method against the created object
var res = query.ExecuteQuery()
//Loop through the results, print out the person's name and email, then delete the records
for each (var rec in res.recipient)
{
logInfo("Delete record = Email: " + rec.@email + ', ' + rec.@firstName + ' ' + rec.@lastName)
xtk.session.Write(<recipient xtkschema="nms:recipient" _operation="delete" id={rec.@id}/>)
}
Beispiel 3: Datensätze auswählen und in das Protokoll schreiben
In diesem Beispiel wird eine nicht statische Methode verwendet. Die E-Mail-Adresse und das Geburtsjahr aller Empfänger, deren Informationen im Ordner 1234 gespeichert sind und deren E-Mail-Domain-Name mit "adobe" beginnt, werden ausgewählt. Die Ergebnisse werden nach Geburtsdatum in absteigender Reihenfolge sortiert. Die E-Mail-Adressen der Empfänger werden in das Protokoll geschrieben.
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@email"/>
<node sql="sEmail"/>
<node expr="Year(@birthDate)"/>
</select>
<where>
<condition expr="[@folder-id] = 1234 and @domain like 'adobe%'"/>
<condition sql="iFolderId = 1234 and sDomain like 'adobe%'"/>
</where>
<orderBy>
<node expr="@birthDate" sortDesc="true"/>
</orderBy>
</queryDef>
)
var res = query.ExecuteQuery()
for each (var w in res.recipient)
logInfo(w.@email)
Write
-Methode
Sie können Datensätze einfügen, aktualisieren und löschen. Sie können die Write
-Methode für ein beliebiges Schema in Adobe Campaign verwenden. Da diese Methode statisch ist, müssen Sie kein Objekt erstellen. Sie können die folgenden Vorgänge verwenden:
-
Der
update
-Vorgang -
Der
insertOrUpdate
-Vorgang mit dem_key
-Argument zur Identifizierung des zu aktualisierenden DatensatzesWenn Sie den Ordner Empfänger nicht angeben und eine Übereinstimmung vorhanden ist, wird der Datensatz in allen Unterordnern aktualisiert. Andernfalls wird der Datensatz im Stammverzeichnis des Ordners Empfänger erstellt.
-
Der
delete
-Vorgang
Write
-Methode in einer Snowflake-Tabelle zu verwenden. Weitere Informationen.Beispiel 1: Datensatz einfügen oder aktualisieren
xtk.session.Write(
<recipient
xtkschema="nms:recipient"
_operation="insertOrUpdate" _key="@email"
lastName="Lennon"
firstName="John"
email="johnlennon@thebeatles.com"
/>
)
Beispiel 2: Datensätze löschen
In diesem Beispiel werden eine statische Methode und eine nicht statische Methode kombiniert.
var query=xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
<select>
<node expr="@Id"/>
</select>
<where>
<condition expr="[@email]='johnlennon@thebeatles.com'"/>
</where>
</queryDef>
);
var res = query.ExecuteQuery()
for each (var w in res.recipient) {
xtk.session.Write(
<recipient xtkschema="nms:recipient" _operation="delete" id={w.@id}/>
);
}
In diesem Video wird gezeigt, wie nicht statische API-Methoden verwendet werden:
In diesem Video wird ein Beispiel für die Verwendung einer nicht statischen API-Methode in einem Workflow gezeigt: