Exemples de code JavaScript dans les workflows javascript-in-workflows
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 :
- Activité Début
- Activité Code JavaScript
- Activité Fin
En savoir plus sur la création de workflows.
-
Ajoutez le code JavaScript à une activité. En savoir plus.
-
Enregistrez le workflow.
-
Testez les exemples :
- Démarrez le workflow. En savoir plus.
- Ouvrez le journal. En savoir plus.
Exemple 1 : écriture dans la base de données write-example
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émaxtk:session
.note important IMPORTANT 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.
-
Étape 1 : composer une demande d’écriture
Vous pouvez ajouter, mettre à jour et supprimer des enregistrements.
Insertion d’un enregistrement
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 :
- Le schéma de la table à modifier
- Les champs de la table à renseigner
Exemple :
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
Mise à jour d’un enregistrement
Utilisez l’opération _update
.
Indiquez ces informations sous forme d’attributs XML :
- Le schéma de la table à modifier
- Les champs de la table à mettre à jour
- L’argument clé requis pour identifier l’enregistrement à mettre à jour
Exemple :
var myXML = <recipient xtkschema="nms:recipient"
status="Client"
email="isabel.garcia@mycompany.com"
operation="_update"
_key="@email"/>
Suppression d’un enregistrement
Utilisez la méthode DeleteCollection
. En savoir plus.
Indiquez les informations suivantes :
- Le schéma de la table à modifier
- La clause
where
requise pour identifier l’enregistrement à mettre à jour, sous la forme d’un élément XML
Exemple :
xtk.session.DeleteCollection(
"nms:recipient",
<where>
<condition expr="[@email] = 'isabel.garcia@mycompany.com'"/>
</where>,
false
)
Étape 2 : écrire l’enregistrement
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 :
Exemple 2 : interrogation de la base de données read-example
Pour interroger la base de données, vous pouvez utiliser la méthode d’instance xtk:queryDef
non statique :
- Composez une requête au format XML.
- Créez un objet de requête.
- Exécutez la requête.
Étape 1 : composer une requête
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 :
- Le schéma de la table à lire
- L’opération
- Les colonnes à renvoyer, dans une clause
select
- Les conditions, dans une clause
where
- Les critères de filtrage, dans une clause
orderBy
Vous pouvez utiliser les opérations suivantes :
select
getIfExists
get
count
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 :
code language-xml <select> <node expr="@firstName"/> <node expr="@lastName"/> </select>
Avec le schéma
nms:recipient
, les éléments sont renvoyés sous la forme suivante :code language-xml <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 :code language-xml <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 :
code language-xml <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’attributsortDesc
. Par exemple, pour trier les noms par ordre croissant, vous pouvez écrire le code suivant :code language-xml <orderBy> <node expr="@lastName> sortDesc="false"/> </orderBy>
Étape 2 : créer un objet de requête
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é.
Étape 3 : exécuter la requête
Procédez comme suit :
-
Appelez la méthode
ExecuteQuery
sur l’entitéqueryDef
:code language-javascript var res = query.ExecuteQuery()
-
Traitez les résultats :
- Effectuez une itération sur les résultats de l’opération
select
, en utilisant une construction de boucle. - Testez les résultats à l’aide de l’opération
getIfExists
. - Comptez les résultats à l’aide de l’opération
count
.
- Effectuez une itération sur les résultats de l’opération
Résultats d’une opération 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
.
Résultats d’une opération 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
…
}
Résultat d’une opération 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.
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.Résultat d’une opération 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 :
Déclenchement d’un workflow trigger-example
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 :
- Pour publier un événement, vous pouvez utiliser la méthode statique
PostEvent
. En savoir plus. - Pour recevoir un événement, vous pouvez utiliser l’activité Signal externe. En savoir plus.
Vous pouvez déclencher des workflows de différentes manières :
-
Vous pouvez déclencher un workflow en ligne, c’est-à-dire à partir du script principal d’une activité Code JavaScript.
-
Vous pouvez déclencher un workflow à la fin d’un autre :
-
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.
note tip TIP 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 :
- La commande
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é. - Le workflow cible doit être démarré. Dans le cas contraire, une erreur est consignée dans le fichier journal.
- Si le workflow cible est suspendu, la commande
PostEvent
est mise en file d’attente jusqu’à la reprise du workflow. - L’activité déclenchée ne nécessite pas qu’une tâche soit en cours.
Cette vidéo montre comment utiliser des méthodes d’API statiques :
Cette vidéo montre comment déclencher des workflows :
Interaction avec la base de données interact-example
Ces exemples montrent comment effectuer ces actions :
- Utilisation des méthodes
get
etcreate
sur les schémas pour utiliser des méthodes SOAP non statiques - Création de méthodes qui exécutent des requêtes SQL
- Utilisation de la méthode
write
pour insérer, mettre à jour et supprimer des enregistrements
Procédez comme suit :
-
Définissez la requête :
- Récupérez une entité en utilisant la méthode
create
sur le schéma correspondant, par exemple, le schémaxtk:workflow
. En savoir plus. - Utilisez la méthode
queryDef
pour émettre une requête SQL.
- Récupérez une entité en utilisant la méthode
-
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.
Syntaxe de la méthode 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>
Méthode Create
Exemple 1 : sélection d’enregistrements et écriture dans le journal
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)
Exemple 2 : suppression d’enregistrements
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}/>)
}
Exemple 3 : sélection des enregistrements et écriture dans le journal
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)
Méthode 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 à jourSi 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
Write
dans une table Snowflake. En savoir plus.Exemple 1 : insertion ou mise à jour d’un enregistrement
xtk.session.Write(
<recipient
xtkschema="nms:recipient"
_operation="insertOrUpdate" _key="@email"
lastName="Lennon"
firstName="John"
email="johnlennon@thebeatles.com"
/>
)
Exemple 2 : suppression d’enregistrements
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 :