Estos ejemplos muestran cómo se puede utilizar el código JavaScript en un flujo de trabajo:
Más información acerca de los métodos SOAP estáticos y no estáticos.
En estos ejemplos se utiliza la extensión ECMAScript para XML (E4X). Con esta extensión, puede combinar llamadas de JavaScript y primitivas XML en el mismo script.
Para probar estos ejemplos, siga estos pasos:
Cree un flujo de trabajo y añada estas actividades al flujo de trabajo:
Más información acerca de la creación de flujos de trabajo.
Añada el código JavaScript a una actividad. Más información.
Guarde el flujo de trabajo.
Pruebe los ejemplos:
Para escribir en la base de datos, puede utilizar el método estático Write
en el esquema xtk:session
:
Componga una solicitud de escritura en XML.
Escriba el registro:
Llame al método Write
en el esquema xtk:session
.
Si utiliza Adobe Campaign v8, le recomendamos que utilice el mecanismo de ensayo con las API de Ingesta y Actualización/eliminación de datos para el método Write
en una tabla de Snowflake. Más información.
Pase el código XML como argumento para la solicitud de escritura.
Puede añadir, actualizar y eliminar registros.
Como la operación insert
es la predeterminada, no es necesario especificarla.
Especifique esta información como atributos XML:
Ejemplo:
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
Utilice la operación _update
.
Especifique esta información como atributos XML:
Ejemplo:
var myXML = <recipient xtkschema="nms:recipient"
status="Client"
email="isabel.garcia@mycompany.com"
operation="_update"
_key="@email"/>
Utilice el método DeleteCollection
. Más información.
Especifique esta información:
where
necesaria para identificar el registro que se va a actualizar, en forma de elemento XMLEjemplo:
xtk.session.DeleteCollection(
"nms:recipient",
<where>
<condition expr="[@email] = 'isabel.garcia@mycompany.com'"/>
</where>,
false
)
Llame al método no estático Write
en el esquema xtk:session
:
xtk.session.Write(myXML)
No se devuelve ningún valor para este método.
Añada el código completo a una actividad de código JavaScript en el flujo de trabajo:
var myXML = <recipient xtkschema="nms:recipient"
firstName="Isabel"
lastName="Garcia"
email="isabel.garcia@mycompany.com"/>
xtk.session.Write(myXML)
Este vídeo muestra cómo escribir en la base de datos:
Para consultar la base de datos, puede utilizar el método de instancia no estático xtk:queryDef
:
Especifique el código XML para una entidad queryDef
.
Sintaxis:
<queryDef schema="nms:recipient" operation="">
<!-- select, where, and orderBy clauses as XML elements -->
</queryDef>
Especifique esta información:
select
where
orderBy
Puede utilizar estas operaciones:
Operación | Resultado |
---|---|
select |
Se devuelven cero o más elementos como una colección. |
getIfExists |
Se devuelve un elemento. Si no existe ningún elemento de coincidencia, se devuelve un elemento vacío. |
get |
Se devuelve un elemento. Si no existe ningún elemento de coincidencia, se devuelve un error. |
count |
El número de registros coincidentes se devuelve en forma de elemento con un atributo count . |
Escriba las cláusulas select
, where
y orderBy
como elementos XML:
Cláusula select
Especifique las columnas que desea devolver. Por ejemplo, para seleccionar el nombre y el apellido de la persona, escriba este código:
<select>
<node expr="@firstName"/>
<node expr="@lastName"/>
</select>
Con el esquema nms:recipient
, los elementos se devuelven en este formulario:
<recipient firstName="Bo" lastName="Didley"/>
Cláusula where
Para especificar condiciones, utilice una cláusula where
. Por ejemplo, para seleccionar los registros ubicados en la carpeta Aprendizaje, puede escribir este código:
<where>
<condition expr="[folder/@label]='Training'"/>
</where>
Cuando combine varias expresiones, utilice el operador booleano en la primera expresión. Por ejemplo, para seleccionar todas las personas que se llamen Isabel García, puede escribir este código:
<condition boolOperator="AND" expr="@firstName='Isabel'"/>
<condition expr="@lastName='Garcia'"/>
Cláusula orderBy
Para ordenar el conjunto de resultados, especifique la cláusula orderBy
como elemento XML con el atributo sortDesc
. Por ejemplo, para ordenar los apellidos en orden de subida, puede escribir este código:
<orderBy>
<node expr="@lastName> sortDesc="false"/>
</orderBy>
Para crear una entidad a partir del código XML, utilice el método create(
content
)
:
var query = xtk.queryDef.create(
<queryDef schema="nms:recipient" operation="select">
…
</queryDef>)
Prefije el método create(
content
)
con el esquema de la entidad que se va a crear.
El argumento content
es de cadena y opcional. Este argumento contiene el código XML que describe la entidad.
Siga estos pasos:
Llame al método ExecuteQuery
en la entidad queryDef
:
var res = query.ExecuteQuery()
Procese los resultados:
select
, utilizando una construcción de bucle.getIfExists
.count
.select
Todas las coincidencias se devuelven como una colección:
<recipient-collection>
<recipient email="jane.smith@mycompany.com">
<recipient email="john.harris@mycompany.com">
</recipient-collection>
Para iterar en los resultados, utilice el bucle for each
:
for each (var rcp in res:recipient)
logInfo(rcp.@email)
El bucle incluye una variable de destinatario local. Para cada destinatario que se devuelve en la colección de destinatarios, se imprime el correo electrónico del destinatario. Más información acerca de la función logInfo
.
getIfExists
Cada coincidencia se devuelve como un elemento:
<recipient id="52,378,079">
Si no hay coincidencia, se devuelve un elemento vacío:
<recipient/>
Puede hacer referencia al nodo de clave principal; por ejemplo, el atributo @id
:
if (res.@id !=undefined)
{ // match was found
…
}
get
Se devuelve una coincidencia como elemento:
<recipient id="52,378,079">
Si no hay coincidencia, se devuelve un error.
Si sabe que hay una coincidencia, use la operación get
. De lo contrario, utilice la operación getIfExists
. Si usa esta práctica recomendada, los errores revelarán problemas inesperados. Si usa la operación get
, no utilice la instrucción try…catch
. El problema se gestiona mediante el proceso de gestión de errores del flujo de trabajo.
count
Se devuelve un elemento con el atributo count
:
<recipient count="200">
Para utilizar el resultado, consulte el atributo @count
:
if (res.@count > 0)
{ // matches were found
…
}
Para la operación select
, añada este código a una actividad de código JavaScript en el flujo de trabajo:
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)
Como la operación select
es la predeterminada, no es necesario especificarla.
Este vídeo muestra cómo leer desde la base de datos:
Puede activar flujos de trabajo mediante programación, por ejemplo, en flujos de trabajo técnicos o para procesar información que un usuario haya introducido en una página de aplicación web.
La activación del flujo de trabajo funciona mediante el uso de eventos. Puede usar estas funciones para eventos:
PostEvent
. Más información.Puede activar flujos de trabajo de diferentes maneras:
Añada un script a la actividad End del flujo de trabajo inicial.
Añada la actividad External signal al principio del flujo de trabajo de destinatario.
Al finalizar el flujo de trabajo inicial, se publica un evento. La transición saliente se activa y las variables de evento se rellenan. A continuación, el flujo de trabajo de destinatario recibe el evento.
Como práctica recomendada, cuando añada un script a una actividad, escriba el nombre de la actividad entre guiones dobles, por ejemplo, -- end --
. Más información acerca de las prácticas recomendadas del flujo de trabajo.
Sintaxis del método 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.
)
En este ejemplo, al finalizar el flujo de trabajo, se pasa un texto corto a la actividad de señal del flujo de trabajo wkfExampleReceiver:
var strLabel = "Adobe Campaign, Marketing that delivers"
xtk.workflow.PostEvent(
"wkfExampleReceiver",
"signal",
"",
<variables strLine={strLabel}/>,
false)
Como el último parámetro está establecido en false
, el flujo de trabajo wkfExampleReceiver se activa cada vez que se completa el flujo de trabajo inicial.
Cuando activa flujos de trabajo, tenga en cuenta estos principios:
PostEvent
se ejecuta de forma asíncrona. El comando se coloca en la cola del servidor. El método se devuelve después de que se publique el evento.PostEvent
se pone en cola hasta que se reanuda el flujo de trabajo.Este vídeo muestra cómo utilizar métodos de API estáticos:
Este vídeo muestra cómo activar flujos de trabajo:
Estos ejemplos muestran cómo realizar estas acciones:
get
y create
en esquemas para utilizar métodos SOAP no estáticoswrite
para insertar, actualizar y eliminar registrosSiga estos pasos:
Defina la consulta:
create
en el esquema correspondiente; por ejemplo, el esquema xtk:workflow
. Más información.queryDef
para emitir una consulta SQL.Ejecute la consulta utilizando el método ExecuteQuery
. Más información.
Utilice el bucle for each
para recuperar los resultados.
queryDef
con una cláusula 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
Los nombres internos de los flujos de trabajo ubicados en la carpeta wfExamples están seleccionados. Los resultados se ordenan por nombre interno, en orden de subida, y se escriben en el historial.
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)
Se seleccionan el nombre, el apellido, el correo electrónico y el ID de todos los destinatarios que se llamen Chris Smith. Los resultados se ordenan por correo electrónico, en orden de subida, y se escriben en el historial. Se usa una operación delete
para eliminar los registros seleccionados.
// 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}/>)
}
En este ejemplo, se utiliza un método no estático. El correo electrónico y el año de nacimiento de todos los destinatarios cuya información se almacena en la carpeta 1234 y cuyo nombre de dominio de correo electrónico comience por “adobe” están seleccionados. Los resultados se ordenan por fecha de nacimiento en orden de bajada. El correo electrónico de los destinatarios se escribe en el historial.
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
Puede insertar, actualizar y eliminar registros. Puede usar el método Write
en cualquier esquema de Adobe Campaign. Como este método es estático, no es necesario crear un objeto. Puede utilizar estas operaciones:
La operación update
La operación insertOrUpdate
, con el argumento _key
para identificar el registro que se va a actualizar
Si no especifica la carpeta Destinatarios y existe una coincidencia, el registro se actualiza en cualquier subcarpeta. De lo contrario, el registro se crea en la carpeta raíz Destinatarios.
La operación delete
Si utiliza Adobe Campaign v8, le recomendamos que utilice el mecanismo de ensayo con las API de Ingesta y Actualización/eliminación de datos para el método Write
en una tabla de Snowflake. Más información.
xtk.session.Write(
<recipient
xtkschema="nms:recipient"
_operation="insertOrUpdate" _key="@email"
lastName="Lennon"
firstName="John"
email="johnlennon@thebeatles.com"
/>
)
En este ejemplo se combina un método estático y uno no estático.
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}/>
);
}
Este vídeo muestra cómo utilizar métodos API no estáticos:
Este vídeo muestra un ejemplo del uso de un método de API no estático en un flujo de trabajo: