Ces exemples montrent comment vous pouvez utiliser le code JavaScript dans un workflow :
En savoir plus sur les méthodes SOAP statiques et non statiques.
Dans ces exemples, l’extension ECMAScript pour XML (E4X) est utilisée. Avec cette extension, vous pouvez combiner des appels JavaScript et des primitives XML dans le même script.
Pour tester ces exemples, procédez comme suit :
Créez un workflow et ajoutez-y les activités suivantes :
En savoir plus sur la création de workflows.
Ajoutez le code JavaScript à une activité. En savoir plus.
Enregistrez le workflow.
Testez les exemples :
Pour écrire dans la base de données, vous pouvez utiliser la méthode Write
statique sur le schéma xtk:session
:
Composez une demande d’écriture en XML.
Écrivez l’enregistrement :
Appelez la méthode Write
sur le schéma xtk:session
.
Si vous utilisez Adobe Campaign v8, nous vous recommandons d’utiliser le mécanisme d’évaluation avec les API d’ingestion et de mise à jour/suppression des données pour la méthode Write
dans une table Snowflake. En savoir plus.
Transmettez le code XML en tant qu’argument de la demande d’écriture.
Vous pouvez ajouter, mettre à jour et supprimer des enregistrements.
L’opération insert
étant l’opération par défaut, vous n’avez pas besoin de la préciser.
Indiquez ces informations sous forme d’attributs XML :
Exemple :
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
Utilisez l’opération _update
.
Indiquez ces informations sous forme d’attributs XML :
Exemple :
var myXML = <recipient xtkschema="nms:recipient"
status="Client"
email="isabel.garcia@mycompany.com"
operation="_update"
_key="@email"/>
Utilisez la méthode DeleteCollection
. En savoir plus.
Indiquez les informations suivantes :
where
requise pour identifier l’enregistrement à mettre à jour, sous la forme d’un élément XMLExemple :
xtk.session.DeleteCollection(
"nms:recipient",
<where>
<condition expr="[@email] = 'isabel.garcia@mycompany.com'"/>
</where>,
false
)
Appelez la méthode Write
non statique sur le schéma xtk:session
:
xtk.session.Write(myXML)
Aucune valeur n’est renvoyée pour cette méthode.
Ajoutez le code complet à une activité Code JavaScript dans le workflow :
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
xtk.session.Write(myXML)
Cette vidéo montre comment écrire dans la base de données :
Pour interroger la base de données, vous pouvez utiliser la méthode d’instance xtk:queryDef
non statique :
Spécifiez le code XML pour une entité queryDef
.
Syntaxe :
<queryDef schema="nms:recipient" operation="">
<!-- select, where, and orderBy clauses as XML elements -->
</queryDef>
Indiquez les informations suivantes :
select
where
orderBy
Vous pouvez utiliser les opérations suivantes :
Fonctionnement | Résultat |
---|---|
select |
Aucun ou plusieurs éléments sont renvoyés sous forme de collection. |
getIfExists |
Un élément est renvoyé. S’il n’existe aucun élément de correspondance, un élément vide est renvoyé. |
get |
Un élément est renvoyé. Si aucun élément de correspondance n’existe, une erreur est renvoyée. |
count |
Le nombre d’enregistrements correspondants est renvoyé sous la forme d’un élément avec un attribut count . |
Écrivez les clauses select
, where
et orderBy
en tant qu’éléments XML :
Clause select
Indiquez les colonnes à renvoyer. Par exemple, pour sélectionner le prénom et le nom de la personne, écrivez le code suivant :
<select>
<node expr="@firstName"/>
<node expr="@lastName"/>
</select>
Avec le schéma nms:recipient
, les éléments sont renvoyés sous la forme suivante :
<recipient firstName="Bo" lastName="Didley"/>
Clause where
Pour spécifier des conditions, utilisez une clause where
. Par exemple, pour sélectionner les enregistrements qui se trouvent dans le dossier Formation, vous pouvez écrire le code suivant :
<where>
<condition expr="[folder/@label]='Training'"/>
</where>
Lorsque vous combinez plusieurs expressions, utilisez l’opérateur booléen dans la première expression. Par exemple, pour sélectionner toutes les personnes nommées Isabel Garcia, vous pouvez écrire le code suivant :
<condition boolOperator="AND" expr="@firstName='Isabel'"/>
<condition expr="@lastName='Garcia'"/>
Clause orderBy
Pour trier le jeu de résultats, spécifiez la clause orderBy
sous la forme d’un élément XML avec l’attribut sortDesc
. Par exemple, pour trier les noms par ordre croissant, vous pouvez écrire le code suivant :
<orderBy>
<node expr="@lastName> sortDesc="false"/>
</orderBy>
Pour créer une entité à partir du code XML, utilisez la méthode create(
content
)
:
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
…
</queryDef>)
Préfixez la méthode create(
content
)
avec le schéma de l’entité à créer.
L’argument content
correspond à un argument de chaîne et est facultatif. Cet argument contient le code XML qui décrit l’entité.
Procédez comme suit :
Appelez la méthode ExecuteQuery
sur l’entité queryDef
:
var res = query.ExecuteQuery()
Traitez les résultats :
select
, en utilisant une construction de boucle.getIfExists
.count
.select
Toutes les correspondances sont renvoyées sous forme de collection :
<recipient-collection>
<recipient email="jane.smith@mycompany.com">
<recipient email="john.harris@mycompany.com">
</recipient-collection>
Pour effectuer une itération sur les résultats, utilisez la boucle for each
:
for each (var rcp in res:recipient)
logInfo(rcp.@email)
La boucle comprend une variable de destinataire locale. L’e-mail de chaque destinataire renvoyé dans la collection de destinataires est imprimé. En savoir plus sur la fonction logInfo
.
getIfExists
Chaque correspondance est renvoyée en tant qu’élément :
<recipient id="52,378,079">
Si aucune correspondance n’est trouvée, un élément vide est renvoyé :
<recipient/>
Vous pouvez vous référer au nœud de la clé primaire, par exemple, l’attribut @id
:
if (res.@id !=undefined)
{ // match was found
…
}
get
Une correspondance est renvoyée en tant qu’élément :
<recipient id="52,378,079">
Si aucune correspondance n’est trouvée, une erreur est renvoyée.
Si vous savez qu’il existe une correspondance, utilisez l’opération get
. Sinon, utilisez l’opération getIfExists
. Si vous utilisez cette bonne pratique, les erreurs révèlent des problèmes inattendus. Si vous utilisez l’opération get
, n’utilisez pas l’ordre try…catch
. Le problème est géré par le processus de gestion des erreurs du workflow.
count
Un élément avec l’attribut count
est renvoyé :
<recipient count="200">
Pour utiliser le résultat, reportez-vous à l’attribut @count
:
if (res.@count > 0)
{ // matches were found
…
}
Pour l’opération select
, ajoutez ce code à une activité Code JavaScript dans le workflow :
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)
L’opération select
étant l’opération par défaut, vous n’avez pas besoin de la préciser.
Cette vidéo montre comment effectuer une lecture à partir de la base de données :
Vous pouvez déclencher des workflows par programme, par exemple dans des workflows techniques ou pour traiter les informations saisies par un utilisateur sur une page d’application web.
Le déclenchement d’un workflow s’effectue à l’aide d’événements. Vous pouvez utiliser ces fonctionnalités pour les événements :
PostEvent
. En savoir plus.Vous pouvez déclencher des workflows de différentes manières :
Ajoutez un script d’initialisation à l’activité de Fin du workflow initial.
Ajoutez l’activité Signal externe au début du workflow cible.
Une fois le workflow initial terminé, un événement est publié. La transition sortante est activée et les variables d’événement sont renseignées. Ensuite, l’événement est reçu par le workflow cible.
Lorsque vous ajoutez un script à une activité, il est recommandé de placer le nom de l’activité entre des tirets doubles, par exemple : -- end --
. En savoir plus sur les bonnes pratiques relatives aux workflows.
Syntaxe de la méthode PostEvent
:
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.
)
Dans cet exemple, une fois le workflow terminé, un texte court est transmis à l’activité Signal du workflow wkfExampleReceiver :
var strLabel = "Adobe Campaign, Marketing that delivers"
xtk.workflow.PostEvent(
"wkfExampleReceiver",
"signal",
"",
<variables strLine={strLabel}/>,
false)
Comme le dernier paramètre est défini sur false
, le workflow wkfExampleReceiver est déclenché chaque fois que le workflow initial est terminé.
Lorsque vous déclenchez des workflows, tenez compte des principes suivants :
PostEvent
s’exécute de manière asynchrone. La commande est placée dans la file d’attente du serveur. La méthode renvoie une valeur une fois l’événement publié.PostEvent
est mise en file d’attente jusqu’à la reprise du workflow.Cette vidéo montre comment utiliser des méthodes d’API statiques :
Cette vidéo montre comment déclencher des workflows :
Ces exemples montrent comment effectuer ces actions :
get
et create
sur les schémas pour utiliser des méthodes SOAP non statiqueswrite
pour insérer, mettre à jour et supprimer des enregistrementsProcédez comme suit :
Définissez la requête :
create
sur le schéma correspondant, par exemple, le schéma xtk:workflow
. En savoir plus.queryDef
pour émettre une requête SQL.Exécutez la requête à l’aide de la méthode ExecuteQuery
. En savoir plus.
Utilisez la boucle for each
pour récupérer les résultats.
queryDef
avec une clause select
<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
Les noms internes des workflows situés dans le dossier wfExamples sont sélectionnés. Les résultats sont triés par nom interne, par ordre croissant et écrits dans le journal.
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)
Le prénom, le nom, l’e-mail et l’identifiant de tous les destinataires nommés Chris Smith sont sélectionnés. Les résultats sont triés par e-mail, par ordre croissant et écrits dans le journal. Une opération delete
est utilisée pour supprimer les enregistrements sélectionnés.
// 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}/>)
}
Dans cet exemple, une méthode non statique est utilisée. L’e-mail et l’année de naissance de tous les destinataires dont les informations sont stockées dans le dossier 1234 et dont le nom de domaine de messagerie commence par « adobe » sont sélectionnés. Les résultats sont triés par date de naissance dans l’ordre décroissant. L’e-mail du destinataire est écrit dans le journal.
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
Vous pouvez insérer, mettre à jour et supprimer des enregistrements. Vous pouvez utiliser la méthode Write
sur n’importe quel schéma dans Adobe Campaign. Cette méthode étant statique, il n’est pas nécessaire de créer un objet. Vous pouvez utiliser les opérations suivantes :
Opération update
Opération insertOrUpdate
avec argument _key
permettant d’identifier l’enregistrement à mettre à jour
Si vous ne spécifiez pas le dossier Destinataires, en cas de correspondance, l’enregistrement est mis à jour dans n’importe quel sous-dossier. Sinon, l’enregistrement est créé dans le dossier racine Destinataires.
Opération delete
Si vous utilisez Adobe Campaign v8, nous vous recommandons d’utiliser le mécanisme d’évaluation avec les API d’ingestion et de mise à jour/suppression des données pour la méthode Write
dans une table Snowflake. En savoir plus.
xtk.session.Write(
<recipient
xtkschema="nms:recipient"
_operation="insertOrUpdate" _key="@email"
lastName="Lennon"
firstName="John"
email="johnlennon@thebeatles.com"
/>
)
Cet exemple combine une méthode statique à une méthode non statique.
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}/>
);
}
Cette vidéo montre comment utiliser des méthodes d’API non statiques :
Cette vidéo présente un exemple d’utilisation d’une méthode d’API non statique dans un workflow :