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:
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:
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 dem xtk:session
-Schema auf.
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.
Sie können Datensätze hinzufügen, aktualisieren und löschen.
Da der insert
-Vorgang der Standardvorgang ist, müssen Sie ihn nicht angeben.
Geben Sie diese Informationen als XML-Attribute an:
Beispiel:
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
Verwenden Sie den _update
-Vorgang.
Geben Sie diese Informationen als XML-Attribute an:
Beispiel:
var myXML = <recipient xtkschema="nms:recipient"
status="Client"
email="isabel.garcia@mycompany.com"
operation="_update"
_key="@email"/>
Verwenden Sie die DeleteCollection
-Methode. Weitere Informationen.
Geben Sie diese Informationen an:
where
-Klausel, die erforderlich ist, um den zu aktualisierenden Datensatz in Form eines XML-Elements zu identifizierenBeispiel:
xtk.session.DeleteCollection(
"nms:recipient",
<where>
<condition expr="[@email] = 'isabel.garcia@mycompany.com'"/>
</where>,
false
)
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:
Um die Datenbank abzufragen, können Sie die nicht statische xtk:queryDef
-Instanzmethode verwenden:
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:
select
-Klauselwhere
-KlauselorderBy
-KlauselSie können die folgenden Vorgänge verwenden:
Vorgang | Ergebnis |
---|---|
select |
Null oder mehr Elemente werden als Sammlung zurückgegeben. |
getIfExists |
Ein Element wird zurückgegeben. Wenn kein Übereinstimmungselement vorhanden ist, wird ein leeres Element zurückgegeben. |
get |
Ein Element wird zurückgegeben. Wenn kein Übereinstimmungselement vorhanden ist, wird ein Fehler zurückgegeben. |
count |
Die Anzahl der übereinstimmenden Datensätze wird in Form eines Elements mit einem count -Attribut zurückgegeben. |
Schreiben Sie die select
-, where
- und orderBy
-Klauseln als XML-Elemente:
select
-Klausel
Geben Sie die zurückzugebenden Spalten an. Um beispielsweise den Vor- und Nachnamen der Person auszuwählen, schreiben Sie folgenden Code:
<select>
<node expr="@firstName"/>
<node expr="@lastName"/>
</select>
Mit dem nms:recipient
-Schema werden Elemente in der folgenden Form zurückgegeben:
<recipient firstName="Bo" lastName="Didley"/>
where
-Klausel
Um 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:
<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:
<condition boolOperator="AND" expr="@firstName='Isabel'"/>
<condition expr="@lastName='Garcia'"/>
orderBy
-Klausel
Um die Ergebnismenge zu sortieren, geben Sie die orderBy
-Klausel als XML-Element mit dem sortDesc
-Attribut an. Um beispielsweise die Nachnamen in aufsteigender Reihenfolge zu sortieren, können Sie den folgenden Code schreiben:
<orderBy>
<node expr="@lastName> sortDesc="false"/>
</orderBy>
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.
Führen Sie folgende Schritte aus:
Rufen Sie die ExecuteQuery
-Methode mit der queryDef
-Entität auf:
var res = query.ExecuteQuery()
Verarbeiten Sie die Ergebnisse:
select
-Vorgangs mithilfe eines Schleifenkonstrukts.getIfExists
-Vorgangs.count
-Vorgangs.select
-VorgangsAlle Ü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.
getIfExists
-VorgangsJede Ü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
…
}
get
-VorgangsEine Übereinstimmung wird als Element zurückgegeben:
<recipient id="52,378,079">
Wenn keine Übereinstimmung vorliegt, wird ein Fehler zurückgegeben.
Wenn Sie wissen, dass eine Übereinstimmung vorliegt, verwenden Sie den 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.
count
-VorgangsEin 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:
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:
PostEvent
-Methode verwenden. Weitere Informationen.Sie haben verschiedene Möglichkeiten, Workflows auszulö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.
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:
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.PostEvent
in die Warteschlange aufgenommen, bis der Workflow fortgesetzt wird.In diesem Video wird gezeigt, wie statische API-Methoden verwendet werden können:
In diesem Video wird gezeigt, wie Workflows ausgelöst werden:
Diese Beispiele zeigen, wie Sie diese Aktionen durchführen:
get
und create
für Schemas zur Verwendung nicht statischer SOAP-Methodenwrite
-Methode zum Einfügen, Aktualisieren und Löschen von DatensätzenFühren Sie folgende Schritte aus:
Definieren Sie die Abfrage:
create
-Methode für das entsprechende Schema ab, z. B. das xtk:workflow
-Schema. Weitere Informationen.queryDef
-Methode, um eine SQL-Abfrage auszugeben.Führen Sie die Abfrage mithilfe der ExecuteQuery
-Methode aus. Weitere Informationen.
Verwenden Sie die for each
-Schleife zum Abrufen der Ergebnisse.
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
-MethodeDie 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)
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}/>)
}
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
-MethodeSie 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 Datensatzes
Wenn 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
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.
xtk.session.Write(
<recipient
xtkschema="nms:recipient"
_operation="insertOrUpdate" _key="@email"
lastName="Lennon"
firstName="John"
email="johnlennon@thebeatles.com"
/>
)
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: