Variables
Una variable es un recipiente con nombre donde guardas un dato para usarlo más adelante. Son el mecanismo con el que la información viaja entre actividades: una actividad guarda su resultado en una variable, y otra actividad lo lee desde ahí.
Sin variables, cada actividad estaría aislada. Con variables, puedes leer un correo, extraer su asunto, transformarlo y escribirlo en un Excel, encadenando el dato de un paso al siguiente.

El panel de variables
Sección titulada «El panel de variables»Las variables se gestionan en la pestaña Variables del panel inferior. Cada variable tiene:
- Nombre: cómo la referencias en las expresiones.
- Tipo: qué clase de dato contiene (texto, número, tabla…). Ver Tipos de datos.
- Valor inicial (opcional): una expresión con el valor con que arranca, por ejemplo
0,"pendiente"onewList(). - Descripción (opcional): para qué sirve, para quien lea el playbook después.
Todo se edita directamente en la tabla, celda por celda.
Declarar una variable
Sección titulada «Declarar una variable»- En la pestaña Variables, pulsa + Añadir variable. Aparece una fila nueva (
variable1, de tipostring) con el cursor en el nombre. - Escribe el nombre (ver reglas abajo) y pulsa
Enter. - Elige el tipo en el selector. Tiene buscador, y Tipo compuesto… arma tipos como
List<string>oDictionary<string,object>. - Opcionalmente, escribe un valor inicial y una descripción.

Para eliminar una variable, usa el icono de papelera al final de su fila o Supr. Clic derecho sobre la fila → Buscar referencias te muestra dónde se usa en el playbook.
Reglas para los nombres
Sección titulada «Reglas para los nombres»| Regla | Bien | Mal |
|---|---|---|
| Sin espacios | numeroFactura | numero factura |
| Sin símbolos | clienteId | clienteId# |
Empieza con letra o _ | total, _temp | 1total |
| No es una palabra reservada de C# | clase | class |
| Único en el playbook (entre variables y argumentos) | total | dos total |
| Distingue mayúsculas | total ≠ Total | — |
Si el nombre no es válido, el Designer te lo dice y conserva el anterior.
Capturar el resultado de una actividad
Sección titulada «Capturar el resultado de una actividad»Las actividades que producen un dato tienen, al final del panel de Propiedades, la sección Salida con el campo Guardar resultado en. Ahí escribes el nombre de la variable donde quieres guardar el resultado; a la derecha ves el tipo que devuelve la actividad. El campo te sugiere las variables que ya existen.
Si el nombre que escribes aún no está declarado, el campo lo marca como variable nueva: pulsa Ctrl+Shift+V para declararla con el tipo de la salida.
Ejemplo: una actividad HTTP GET que guarda su resultado en respuesta. En las actividades siguientes puedes leer:
respuesta.StatusCode // 200respuesta.Ok // truerespuesta.Body // cuerpo de la respuesta
Después de una ejecución, la sección Vista previa (última ejecución) de Propiedades muestra el valor que produjo la actividad, sin salir del Designer.
Usar una variable
Sección titulada «Usar una variable»En cualquier campo con ƒx, escribe una expresión que use la variable:
correo.Subject"Hola " + nombreClientetotal > 1000Recuerda: un texto fijo va entre comillas ("Hola"); sin comillas, el Designer lo lee como el nombre de una variable.
Variables de iteración (For Each)
Sección titulada «Variables de iteración (For Each)»Algunas actividades declaran variables por ti. La más común es For Each: recorre una colección (items) y, en cada vuelta, pone el elemento actual en la variable que nombras en itemVariable. Opcionalmente, indexVariable guarda la posición (empezando en 0).
For Each items = correos itemVariable = correo └─ Cuerpo: Log message = "Procesando: " + correo.SubjectAquí correo existe solo dentro del bucle y cambia en cada vuelta. No necesitas declararlo en el panel: lo declara el For Each.
Alcance
Sección titulada «Alcance»- Las variables que declaras pertenecen al playbook donde las creaste.
- Si invocas otro playbook con Invoke Playbook, no comparten variables. En su lugar:
- Le pasas datos a sus entradas.
- Recibes datos de sus salidas.
Esto mantiene cada playbook aislado y reutilizable: un playbook invocado no puede “ensuciar” por accidente las variables del que lo llamó.
Al elegir el playbook en Invoke Playbook, el panel de Propiedades muestra un campo por cada entrada que declara (con su valor por defecto, si lo tiene) y un campo por cada salida, donde escribes la variable que recibirá el valor.
Patrones comunes
Sección titulada «Patrones comunes»| Necesito… | Cómo |
|---|---|
| Un contador | Variable int con valor inicial 0; en cada vuelta, Set Variable con contador + 1 |
| Acumular en una lista | Variable List<string> con valor inicial new List<string>(); en cada vuelta, la actividad Agregar a la lista |
| Una bandera (sí/no) | Variable boolean con valor inicial false; la pones en true cuando ocurre algo |
| Construir un texto | Variable string; concaténale texto + "línea" + nl() |
Variables del sistema
Sección titulada «Variables del sistema»Además de tus variables, cada ejecución expone un conjunto de variables del sistema de solo lectura con información del proceso en curso. No las declaras (ya están disponibles) y las lees en cualquier expresión anteponiendo $. El autocompletado las lista.
| Variable | Contiene |
|---|---|
$system_playbook_name | El nombre del playbook que se está ejecutando (cambia dentro de un playbook invocado). |
$system_invoke_depth | La profundidad de invocación: 0 en el playbook principal, 1 en el primer invocado… |
$system_playbook_started_at | Cuándo empezó este playbook. |
$system_run_started_at | Cuándo empezó la ejecución completa (igual en toda la cadena de invocaciones). |
$system_host_name | El nombre del equipo donde se ejecuta. |
$system_os_user | El usuario de Windows que ejecuta el robot. |
$system_execution_id | El identificador de esta ejecución (el mismo que ves en Zoan Cloud). |
$system_process_name | El nombre del proceso que se está ejecutando. |
$system_process_version | La versión del proceso publicado. |
$system_process_id | El identificador del proceso. |
$system_environment_id | El identificador del ambiente donde se ejecuta. |
$system_entry | El playbook de entrada (el que arranca la ejecución). |
$system_instance_id | El caso del flujo que lanzó esta ejecución. |
$system_step_id | El paso del flujo que lanzó esta ejecución. |
$system_idempotency_key | La clave de idempotencia del paso: la misma en sus reintentos automáticos. Sirve para no repetir trabajo en un sistema externo; ver Robots dentro de un flujo. |
$system_business_key | La clave de negocio del caso del flujo (por ejemplo, el número de factura). |
Las cuatro últimas solo tienen valor cuando un paso de un flujo lanza la ejecución; si no, están vacías.
Por ejemplo, para registrar qué proceso y ejecución generaron un dato, o cuánto lleva la ejecución:
Log message = "Procesado por " + $system_process_name + " v" + $system_process_version + " (exec " + $system_execution_id + ")"Log message = "Segundos transcurridos: " + (now() - $system_run_started_at).TotalSecondsErrores comunes
Sección titulada «Errores comunes»| Síntoma | Causa | Solución |
|---|---|---|
| «El nombre «x» no existe en este contexto» | Usaste una variable que no está declarada, o el nombre no coincide | Declárala (Ctrl+Shift+V desde el campo) o corrige el nombre: Total y total son distintas |
| «Variable de destino no válida» | La salida apunta a una variable sin declarar o a una variable del sistema | Declara la variable o elige otro nombre |
| El valor “no se guarda” entre actividades | La actividad no tenía Guardar resultado en configurado | Escribe el nombre de la variable en la sección Salida |
| Se guarda el nombre en vez del valor | Pusiste el nombre de la variable entre comillas | Quita las comillas: cliente, no "cliente" |
Siguientes pasos
Sección titulada «Siguientes pasos»- Tipos de datos: qué puedes hacer con cada tipo de variable.
- Expresiones: leer y transformar variables.
- Depuración: inspeccionar los valores de tus variables al ejecutar.