Este artículo ofrece una guía completa sobre cómo utilizar la actividad de JavaScript en Workflow Builder. Cubre los conceptos básicos, las funciones disponibles, cómo acceder y modificar el contexto del flujo de trabajo y las mejores prácticas para escribir código JavaScript eficaz. Al final de este artículo, tendrás una idea clara de cómo aprovechar JavaScript para mejorar tus flujos de trabajo.
Comprender la actividad de JavaScript
La actividad de JavaScript en Workflow Builder te permite ejecutar código JavaScript personalizado directamente dentro de tus flujos de trabajo. Esta función permite la manipulación avanzada de datos, la configuración de lógica condicional y la integración con otros sistemas, dependiendo de la configuración de tu flujo de trabajo. El código JavaScript se ejecuta en un entorno seguro impulsado por Goja, que es una implementación pura de Go de ECMAScript 5.1, lo que garantiza la estabilidad y la seguridad.
Funciones y objetos disponibles
En la actividad de JavaScript, tienes acceso a un conjunto limitado de objetos JavaScript integrados y una función personalizada log
para registrar mensajes. Los objetos disponibles incluyen:
Math
: Proporciona funciones y constantes matemáticas (por ejemplo,Math.random()
,Math.floor()
).JSON
: Métodos para analizar y convertir datos JSON en cadenas (por ejemplo,JSON.parse()
,JSON.stringify()
).Date
: Funciones para gestionar fechas y horas (por ejemplo,new Date()
,Date.now()
).Array
: El objeto Array global para la manipulación de arrays.String
: El objeto String global para la manipulación de texto.Number
: El objeto Number global para operaciones numéricas.Boolean
: El objeto Boolean global para valores verdadero/falso.Error
: El objeto de error global para el manejo de errores.log
: Una función personalizada para mostrar mensajes en los registros de la actividad.
Ejemplo de uso de la función log
:
JavaScript
log("This message will appear in the activity logs.");log("The value of a variable is: " + someVariable);
Acceder al contexto del flujo de trabajo
Tu código JavaScript puede acceder a todo el contexto del flujo de trabajo a través de una variable global llamada context
. Este objeto contiene el estado y los datos actuales de tu flujo de trabajo, lo que te permite leer y modificar valores según lo permita la configuración de tu flujo de trabajo.
Aquí tienes un ejemplo de una estructura típica de context
:
JSON
{ "flow:batch:0": { "batchUid": "692576827", "batchedBy": { "CoatingType": "glossy-lamination", "ColorType": "4-4" }, "quantity": "1" }, "payload": { "facility": { "countryId": "DE", "name": "DE_GCSB", "timeZone": "Europe/Berlin" }, "files": { "default": "https://..." }, "order": { "amount": "19.99", "clientId": "test-orders", "deliveryAddress": { "address_line_1": "123 Test St", "city": "Testville", // ... more address details }, // ... more order details }, "part": { "id": "7101535136", "productDetails": { "attributes": { "CoatingType": "glossy-lamination", "ColorType": "4-4", // ... more attributes }, "derivedAttributes": { "height": { "value": "55" }, // ... more derived attributes } } } // ... more payload data }, "step:print:0": { "machine": { "0": "digital-presses-hp-indigo-7900", "#": "1" }, "machineTypes": "digital-presses", "sheetSizes": { "0": "sra3", "#": "1" } }}
El objeto context
está repleto de datos, incluidos payload
, flow:batch:0
y step:print:0
.
Ejemplos de acceso a valores del context
:
JavaScript
// Get the client ID from the order payloadvar clientId = context.payload.order.clientId;log("Client ID: " + clientId);// Access a product attributevar coatingType = context.payload.part.productDetails.attributes.CoatingType;log("Product Coating Type: " + coatingType);// Access a derived attribute's valuevar productHeight = context.payload.part.productDetails.derivedAttributes.height.value;log("Product Height: " + productHeight);// Get the customer's city from the delivery addressvar city = context.payload.order.deliveryAddress.city;log("Delivery City: " + city);// You can also modify context values (if allowed by workflow permissions)context.payload.order.deliveryAddress.city = "New Testville";log("Updated Delivery City: " + context.payload.order.deliveryAddress.city);
Nota importante: La estructura del objeto context
varía en función de tu flujo de trabajo. Consulta siempre la entrada de tu flujo de trabajo y las salidas de actividades anteriores para obtener rutas de datos precisas.
Escribir tu código JavaScript
Tu código JavaScript se envolverá automáticamente en una expresión de función invocada inmediatamente (IIFE) para una ejecución segura. No necesitas incluir este envoltorio en tu código; simplemente escribe las sentencias JavaScript que deseas ejecutar.
Devolviendo resultados
La actividad de JavaScript puede devolver valores que se almacenarán en la salida de la actividad. El formato del valor devuelto depende de su tipo:
Devolución de un objeto JavaScript: Las propiedades se asignarán como pares clave-valor en el
JSCodeOutput
.Devolver otros valores: Los valores como cadenas, números, booleanos o matrices se incluirán en una clave predeterminada llamada
"result"
en elJSCodeOutput
.
Ejemplo: devolución de un objeto
JavaScript
var myResult = { status: "success", message: "Order processed", orderId: context.payload.order.id};return myResult;
Esto generará un resultado similar a:
JSON
{ "flow:js-script:1": { "message": "Order processed", "orderId": "048aa79f-7d6e-45bd-930a-81be07be0f19", "status": "success" }, "payload": {...}}
Ejemplo: devolución de un valor que no es un objeto (cadena)
JavaScript
return "Processing complete for order " + context.payload.order.customerOrderId;
Esto dará como resultado una salida como esta:
JSON
{ "result": "Processing complete for order test-order-ref"}
Ejemplo: devolver una matriz
JavaScript
var attributes = context.payload.part.productDetails.attributes;var attributeNames = Object.keys(attributes);return attributeNames;
Esto dará como resultado una salida como esta:
JSON
{ "result": ["CoatingType", "ColorType", "Orientation", "PaperFormat", "PaperType", "ProductStatus", "ProtectionType", "ShapeEdgeType", "SpotFinishingType", "State", "Variable"]}
Depuración y registro
La función log()
es esencial para depurar dentro de la actividad JavaScript. Cualquier mensaje enviado a log()
se mostrará en la sección Registros de la salida de la actividad, lo que te permitirá rastrear el flujo de ejecución e inspeccionar los valores de las variables.
Buenas prácticas
Mantén el enfoque: Utiliza la actividad de JavaScript para transformaciones de datos específicas o comprobaciones condicionales. Es mejor manejar una lógica más compleja con pasos de flujo de trabajo dedicados o servicios externos.
Utiliza
try...catch
: Encierra tu código en bloquestry...catch
para gestionar los errores inesperados de forma eficaz y evitar fallos en el flujo de trabajo.Validar entradas: Comprueba siempre que los datos del
contexto
existen y están en el formato esperado antes de utilizarlos.Haz pruebas exhaustivas: Prueba rigurosamente tu código JavaScript con varias entradas para garantizar el comportamiento correcto en diferentes escenarios.
Si sigues estas directrices, podrás utilizar eficazmente la actividad de JavaScript para introducir una potente lógica personalizada y flexibilidad en tus flujos de trabajo de Workflow Builder.
📝 ¿No era esto lo que buscabas?
Ayúdanos a mejorar este artículo, envíanos un correo a [email protected] — por favor, incluye el título del artículo.