Esempi di codice JavaScript nei flussi di lavoro javascript-in-workflows
Questi esempi mostrano come utilizzare il codice JavaScript in un flusso di lavoro:
Ulteriori informazioni informazioni sui metodi SOAP statici e non statici.
In questi esempi viene utilizzata l'estensione ECMAScript for XML (E4X). Con questa estensione, puoi combinare le chiamate JavaScript e le primitive XML nello stesso script.
Per provare questi esempi, segui questi passaggi:
-
Crea un flusso di lavoro e aggiungi queste attività al flusso di lavoro:
- Avvia attività
- Attività codice JavaScript
- Attività Fine
Ulteriori informazioni informazioni sulla creazione di flussi di lavoro.
-
Aggiungi il codice JavaScript a un’attività. Ulteriori informazioni.
-
Salva il flusso di lavoro.
-
Prova gli esempi:
- Avvia il flusso di lavoro. Ulteriori informazioni.
- Apri il diario. Ulteriori informazioni.
Esempio 1: scrivere nel database write-example
Per scrivere nel database, è possibile utilizzare il Write
metodo su xtk:session
schema:
-
Comporre una richiesta di scrittura in XML.
-
Scrivi il record:
-
Chiama il
Write
metodo suxtk:session
schema.note important IMPORTANT Se utilizzi Adobe Campaign v8, ti consigliamo di utilizzare il meccanismo di staging con Acquisizione e Aggiornamento/eliminazione dati API per Write
in una tabella di Snowflake. Ulteriori informazioni. -
Passa il codice XML come argomento per la richiesta di scrittura.
-
Passaggio 1: comporre una richiesta di scrittura
È possibile aggiungere, aggiornare ed eliminare record.
Inserire un record
Perché il insert
è l'operazione predefinita, non è necessario specificarla.
Specificare queste informazioni come attributi XML:
- Schema della tabella da modificare
- Campi della tabella da compilare
Esempio:
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
Aggiornare un record
Utilizza il _update
operazione.
Specificare queste informazioni come attributi XML:
- Schema della tabella da modificare
- Campi della tabella da aggiornare
- Argomento chiave necessario per identificare il record da aggiornare
Esempio:
var myXML = <recipient xtkschema="nms:recipient"
status="Client"
email="isabel.garcia@mycompany.com"
operation="_update"
_key="@email"/>
Eliminare un record
Utilizza il DeleteCollection
metodo. Ulteriori informazioni.
Specifica queste informazioni:
- Schema della tabella da modificare
- Il
where
clausola necessaria per identificare il record da aggiornare, sotto forma di un elemento XML
Esempio:
xtk.session.DeleteCollection(
"nms:recipient",
<where>
<condition expr="[@email] = 'isabel.garcia@mycompany.com'"/>
</where>,
false
)
Passaggio 2: scrivere il record
Chiama il file non statico Write
metodo su xtk:session
schema:
xtk.session.Write(myXML)
Nessun valore restituito per questo metodo.
Aggiungi il codice completo a un’attività di codice JavaScript nel flusso di lavoro:
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
xtk.session.Write(myXML)
Questo video mostra come scrivere nel database:
Esempio 2: eseguire una query sul database read-example
Per eseguire una query sul database, è possibile utilizzare la proprietà non statica xtk:queryDef
metodo di istanza:
- Componi una query in XML.
- Creare un oggetto query.
- Esegui la query.
Passaggio 1: comporre una query
Specifica il codice XML per un queryDef
entità.
Sintassi:
<queryDef schema="nms:recipient" operation="">
<!-- select, where, and orderBy clauses as XML elements -->
</queryDef>
Specifica queste informazioni:
- Schema della tabella da leggere
- L'operazione
- Le colonne da restituire, in un
select
clausola - Le condizioni, in un
where
clausola - I criteri di filtraggio, in un
orderBy
clausola
Puoi utilizzare le seguenti operazioni:
select
getIfExists
get
count
count
attributo.Scrivi il select
, where
, e orderBy
clausole come elementi XML:
-
select
clausolaSpecificare le colonne da restituire. Ad esempio, per selezionare il nome e il cognome della persona, scrivere il codice seguente:
code language-xml <select> <node expr="@firstName"/> <node expr="@lastName"/> </select>
Con il
nms:recipient
schema, gli elementi vengono restituiti nel seguente formato:code language-xml <recipient firstName="Bo" lastName="Didley"/>
-
where
clausolaPer specificare le condizioni, utilizza una
where
clausola. Ad esempio, per selezionare i record che si trovano nel Formazione cartella, puoi scrivere questo codice:code language-xml <where> <condition expr="[folder/@label]='Training'"/> </where>
Quando combini più espressioni, utilizza l’operatore booleano nella prima espressione. Ad esempio, per selezionare tutte le persone denominate Isabel Garcia, puoi scrivere questo codice:
code language-xml <condition boolOperator="AND" expr="@firstName='Isabel'"/> <condition expr="@lastName='Garcia'"/>
-
orderBy
clausolaPer ordinare il set di risultati, specificare
orderBy
come elemento XML consortDesc
attributo. Ad esempio, per ordinare i cognomi in ordine crescente, è possibile scrivere il codice seguente:code language-xml <orderBy> <node expr="@lastName> sortDesc="false"/> </orderBy>
Passaggio 2: creare un oggetto query
Per creare un’entità dal codice XML, utilizza create(
content
)
metodo:
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
…
</queryDef>)
Aggiungi il prefisso create(
content
)
con lo schema dell’entità da creare.
Il content
l'argomento è un argomento stringa ed è facoltativo. Questo argomento contiene il codice XML che descrive l'entità.
Passaggio 3: eseguire la query
Segui questi passaggi:
-
Chiama il
ExecuteQuery
metodo suqueryDef
entità:code language-javascript var res = query.ExecuteQuery()
-
Elabora i risultati:
- Eseguire iterazioni sui risultati del
select
mediante un costrutto di loop. - Testare i risultati utilizzando
getIfExists
operazione. - Contare i risultati, utilizzando
count
operazione.
- Eseguire iterazioni sui risultati del
Risultati di una select
operazione
Tutte le corrispondenze vengono restituite come una raccolta:
<recipient-collection>
<recipient email="jane.smith@mycompany.com">
<recipient email="john.harris@mycompany.com">
</recipient-collection>
Per scorrere i risultati, utilizzare for each
loop:
for each (var rcp in res:recipient)
logInfo(rcp.@email)
Il ciclo include una variabile di destinatario locale. Per ogni destinatario restituito nella raccolta di destinatari, viene stampata l’e-mail del destinatario. Ulteriori informazioni informazioni su logInfo
funzione.
Risultati di una getIfExists
operazione
Ogni corrispondenza viene restituita come elemento:
<recipient id="52,378,079">
Se non viene trovata alcuna corrispondenza, viene restituito un elemento vuoto:
<recipient/>
È possibile fare riferimento al nodo della chiave primaria, ad esempio @id
attributo:
if (res.@id !=undefined)
{ // match was found
…
}
Risultato di un get
operazione
Viene restituita una corrispondenza come elemento:
<recipient id="52,378,079">
Se non viene trovata alcuna corrispondenza, viene restituito un errore.
get
operazione. In caso contrario, utilizza getIfExists
operazione. Se utilizzi questa best practice, gli errori rivelano problemi imprevisti. Se si utilizza get
, non utilizzare il try…catch
dichiarazione. Il problema viene gestito dal processo di gestione degli errori del flusso di lavoro.Risultato di un count
operazione
Un elemento con count
viene restituito l'attributo:
<recipient count="200">
Per utilizzare il risultato, fare riferimento a @count
attributo:
if (res.@count > 0)
{ // matches were found
…
}
Per select
, aggiungi questo codice a un'attività di codice JavaScript nel flusso di lavoro:
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)
Perché il select
è l'operazione predefinita, non è necessario specificarla.
Questo video illustra come leggere dal database:
Attivare un flusso di lavoro trigger-example
Puoi attivare i flussi di lavoro a livello di programmazione, ad esempio nei flussi di lavoro tecnici o per elaborare le informazioni immesse da un utente in una pagina di un’applicazione web.
L’attivazione dei flussi di lavoro avviene tramite l’utilizzo di eventi. Puoi utilizzare queste funzioni per gli eventi:
- Per pubblicare un evento, puoi utilizzare l’
PostEvent
metodo. Ulteriori informazioni. - Per ricevere un evento, puoi utilizzare External signal attività. Ulteriori informazioni.
Puoi attivare i flussi di lavoro in diversi modi:
-
Puoi attivare un flusso di lavoro in linea, ovvero dallo script principale di una JavaScript code attività.
-
Puoi attivare un flusso di lavoro al completamento di un altro:
-
Aggiungere uno script di inizializzazione al End attività del flusso di lavoro iniziale.
-
Aggiungi il External signal attività all’inizio del flusso di lavoro di target.
Al completamento del flusso di lavoro iniziale, viene registrato un evento. La transizione in uscita viene attivata e le variabili dell’evento vengono compilate. Quindi, l’evento viene ricevuto dal flusso di lavoro di destinazione.
note tip TIP Come best practice, quando aggiungi uno script a un’attività, racchiudi il nome dell’attività in trattini doppi, ad esempio: -- end --
. Ulteriori informazioni informazioni sulle best practice per i flussi di lavoro.
-
Sintassi del PostEvent
metodo:
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 questo esempio, al completamento del flusso di lavoro, viene passato un breve testo a segnale attività del wkfExampleReceiver workflow:
var strLabel = "Adobe Campaign, Marketing that delivers"
xtk.workflow.PostEvent(
"wkfExampleReceiver",
"signal",
"",
<variables strLine={strLabel}/>,
false)
Perché l'ultimo parametro è impostato su false
, il wkfExampleReceiver Il flusso di lavoro viene attivato ogni volta che viene completato il flusso di lavoro iniziale.
Quando attivi i flussi di lavoro, tieni presente i seguenti principi:
- Il
PostEvent
viene eseguito in modo asincrono. Il comando viene inserito nella coda del server. Il metodo restituisce dopo la registrazione dell’evento. - È necessario avviare il flusso di lavoro di destinazione. In caso contrario, viene scritto un errore nel file di registro.
- Se il flusso di lavoro di destinazione è sospeso, il
PostEvent
viene inserito nella coda fino alla ripresa del flusso di lavoro. - L’attività attivata non richiede che sia in corso un’attività.
Questo video illustra come utilizzare i metodi API statici:
Questo video mostra come attivare i flussi di lavoro:
Interagire con il database interact-example
Questi esempi mostrano come eseguire queste azioni:
- Utilizza il
get
ecreate
metodi sugli schemi per utilizzare metodi SOAP non statici - Creare metodi che eseguono query SQL
- Utilizza il
write
metodo per inserire, aggiornare ed eliminare record
Segui questi passaggi:
-
Definisci la query:
- Recuperare un'entità utilizzando
create
nello schema corrispondente, ad esempio il metodoxtk:workflow
schema. Ulteriori informazioni. - Utilizza il
queryDef
per eseguire una query SQL.
- Recuperare un'entità utilizzando
-
Eseguire la query utilizzando
ExecuteQuery
metodo. Ulteriori informazioni.Utilizza il
for each
per recuperare i risultati.
Sintassi del queryDef
metodo con un select
clausola
<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
metodo
Esempio 1: selezionare i record e scrivere nel giornale di registrazione
I nomi interni dei flussi di lavoro che si trovano in wfExamples cartella selezionata. I risultati vengono ordinati in base al nome interno, in ordine crescente, e scritti nel giornale di registrazione.
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)
Esempio 2: eliminare record
Vengono selezionati il nome, il cognome, l’e-mail e l’ID di tutti i destinatari di nome Chris Smith. I risultati vengono ordinati per e-mail, in ordine crescente e scritti nel giornale di registrazione. A delete
per eliminare i record selezionati viene utilizzata l'operazione.
// 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}/>)
}
Esempio 3: selezionare i record e scrivere nel giornale di registrazione
In questo esempio viene utilizzato un metodo non statico. L’anno e-mail e l’anno di nascita di tutti i destinatari le cui informazioni sono memorizzate in 1234 e il cui nome di dominio e-mail inizia con "adobe" vengono selezionati. I risultati sono ordinati in ordine decrescente per data di nascita. L'e-mail dei destinatari viene scritta nel giornale di registrazione.
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
metodo
È possibile inserire, aggiornare ed eliminare record. È possibile utilizzare Write
su qualsiasi schema in Adobe Campaign. Poiché questo metodo è statico, non è necessario creare un oggetto. Puoi utilizzare le seguenti operazioni:
-
Il
update
operazione -
Il
insertOrUpdate
con il_key
per identificare il record da aggiornareSe non si specifica Destinatari cartella, se esiste una corrispondenza, il record viene aggiornato in qualsiasi sottocartella. In caso contrario, il record viene creato nella radice Destinatari cartella.
-
Il
delete
operazione
Write
in una tabella di Snowflake. Ulteriori informazioni.Esempio 1: inserire o aggiornare un record
xtk.session.Write(
<recipient
xtkschema="nms:recipient"
_operation="insertOrUpdate" _key="@email"
lastName="Lennon"
firstName="John"
email="johnlennon@thebeatles.com"
/>
)
Esempio 2: eliminare record
Questo esempio combina un metodo statico e un metodo non statico.
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}/>
);
}
Questo video mostra come utilizzare i metodi API non statici:
Questo video mostra un esempio di utilizzo di un metodo API non statico in un flusso di lavoro: