Ir al contenido

Tipos de datos

Cada variable y cada resultado de actividad tiene un tipo de dato. El tipo determina qué puedes hacer con ese valor: un texto se puede pasar a mayúsculas, un número se puede sumar, una tabla se puede recorrer fila por fila. Conocer el tipo de tus variables es clave para escribir expresiones correctas.

Son los valores más simples: un texto, un número, un sí/no.

TipoDescripciónEjemplos
stringTexto"Hola mundo", "FAC-001"
numberNúmero entero o decimal (el separador decimal es el punto)42, 3.14, -7
booleanValor lógico: verdadero o falsotrue, false
DateTimeFecha y horaresultado de now(), today()

Sobre un texto puedes llamar estos métodos (además de las funciones integradas como upper, trim…):

MiembroDevuelveDescripción
.LengthintCantidad de caracteres
.ToUpper()stringMayúsculas
.ToLower()stringMinúsculas
.Trim() / .TrimStart() / .TrimEnd()stringQuita espacios
.Contains(valor)bool¿Contiene el sub-texto?
.StartsWith(valor) / .EndsWith(valor)bool¿Empieza / termina con?
.Replace(viejo, nuevo)stringReemplaza ocurrencias
.Split(separador)string[]Divide en partes
.Substring(inicio) / .Substring(inicio, largo)stringExtrae una porción
.IndexOf(valor)intPosición de la primera aparición (-1 si no está)
.PadLeft(ancho, car) / .PadRight(ancho, car)stringRellena hasta un ancho
= nombre.ToUpper()
= codigo.Substring(0, 3) // primeros 3 caracteres
= correo.Split("@")[1] // dominio del correo
MiembroDevuelveDescripción
.Year .Month .DayintComponentes de la fecha
.Hour .Minute .Second .MillisecondintComponentes de la hora
.DayOfWeekDayOfWeekDía de la semana
.DayOfYearintDía del año (1–366)
.DateDateTimeSolo la fecha (00:00:00)
.ToString(formato)stringDa formato. Ej: "yyyy-MM-dd", "dd/MM/yyyy HH:mm"
.AddDays(n) .AddHours(n) .AddMinutes(n)DateTimeSuma tiempo (n puede ser negativo)
.AddMonths(n) .AddYears(n)DateTimeSuma meses / años
.Subtract(otraFecha)TimeSpanDiferencia entre dos fechas
= today().AddDays(-7) // hace una semana
= now().ToString("yyyy-MM-dd_HH-mm") // útil para nombrar archivos
= fechaVencimiento.Subtract(today()).Days // días que faltan

Agrupan varios valores. Los índices empiezan en 0.

Una secuencia de elementos. Se crea con la actividad List Create, con la función newList(), o como resultado de actividades como split o Page Extract Table.

MiembroDevuelveDescripción
.CountintNúmero de elementos
.Add(item)Agrega un elemento al final
.Remove(item) / .RemoveAt(indice)Quita un elemento
.Clear()Vacía la lista
.Contains(item)bool¿Está el elemento?
.IndexOf(item)intPosición del elemento
.First() / .FirstOrDefault()elementoPrimero (FirstOrDefault devuelve nulo si está vacía)
.Last()elementoÚltimo
.Any() / .All(cond)bool¿Hay alguno / cumplen todos?
.Where(cond)IEnumerableFiltra (LINQ — terminar con .ToList())
.Select(proy)IEnumerableTransforma (LINQ — terminar con .ToList())
.OrderBy(clave)IEnumerableOrdena (LINQ)
.ToList() / .ToArray()List / arrayMaterializa el resultado
= productos.Count
= productos.Where(p => p > 100).ToList()
= nombres.Contains("Ana")

Asocia una clave de texto a un valor. Se crea con Dict Create o newDict().

MiembroDevuelveDescripción
.CountintNúmero de claves
.Keys / .ValuescolecciónTodas las claves / valores
.ContainsKey(clave)bool¿Existe la clave?
.Add(clave, valor)Agrega un par
.Remove(clave)boolQuita una clave
.GetValueOrDefault(clave)valorValor o nulo si no existe
= config["timeout"] // acceso por clave
= config.ContainsKey("proxy")
= config.GetValueOrDefault("idioma")

Una tabla con columnas nombradas, como una hoja de Excel. Es el formato común que comparten Excel, CSV, bases de datos y Google Sheets: lo que lees de una fuente lo puedes escribir en otra sin convertir.

MiembroDevuelveDescripción
.RowsDataRowCollectionLas filas
.Rows.CountintNúmero de filas
.ColumnsDataColumnCollectionLas columnas
.Columns.CountintNúmero de columnas
.AsEnumerable()IEnumerable<DataRow>Para usar LINQ sobre las filas
.Select(filtro)DataRow[]Filtra con una expresión SQL (ej. "Total > 1000")
.NewRow()DataRowCrea una fila vacía con la misma estructura
.Clone()DataTableCopia la estructura sin filas
.Copy()DataTableCopia estructura y filas

Funciones cómodas para tablas: rowCount(dt), colCount(dt), firstRow(dt), asRows(dt), selectRows(dt, cond) (ver Expresiones).

Cada elemento de un For Each sobre una DataTable es una DataRow. Accedes a sus celdas por nombre de columna con corchetes:

= fila["Cliente"] // valor crudo (puede ser DBNull)
= str(fila["Cliente"]) // texto seguro (recomendado)
= num(fila["Total"]) // número seguro
MiembroDevuelveDescripción
fila["columna"]objectValor de la celda
.TableDataTableTabla a la que pertenece
.ItemArrayobject[]Todas las celdas como arreglo
.IsNull("columna")bool¿La celda está vacía?

Cuando un parámetro acepta una lista, un diccionario o una tabla literal, el panel de Propiedades muestra un botón Editar con un editor visual, para que no tengas que escribir la estructura a mano. Lo mismo para las condiciones de filtrado y los valores de fila.

Todos los editores visuales del Designer están explicados en Editores de parámetros.

Algunas actividades abren un recurso (un navegador, un libro de Excel, una conexión a base de datos) y devuelven una sesión que representa ese recurso abierto. Pasas esa sesión a las demás actividades del mismo paquete, y al final la cierras. Es el mismo patrón en toda la plataforma: abrir → usar → cerrar.

TipoLo abreLo cierraPara qué
ZoanBrowserSessionOpen Browser / Browser AttachBrowser CloseNavegador web (Chrome/Edge)
ZoanPageSessionBrowser Open / Browser New PagePage CloseUna pestaña/página concreta del navegador
ZoanExcelSessionExcel Open / Excel CreateExcel CloseLibro de Excel
ZoanWordSessionWord Open / Word CreateWord CloseDocumento de Word
ZoanDbSessionDB ConnectDB CloseConexión a base de datos
ZoanSftpSessionSFTP ConnectSFTP CloseServidor SFTP
ZoanGoogleSheetsSessionGoogleSheets OpenGoogleSheets CloseHoja de cálculo de Google
ZoanOutlookSession(actividades de Outlook)Sesión de Outlook
ZoanDesktopSessionOpen App / Win AttachWin CloseAplicación de escritorio Windows
// Patrón típico: la salida de "abrir" alimenta a las siguientes actividades
// Open Browser → output: page
// Page Navigate → page: = page
// Page Get Text → page: = page → output: titulo
// Browser Close → browser: = page

Otras actividades devuelven un objeto con datos estructurados que sí lees por sus propiedades.

Resultado de las actividades HTTP (GET, POST, PUT, PATCH, DELETE).

PropiedadTipoDescripción
.StatusCodenumberCódigo HTTP (200, 404, 500…)
.Okbooleantrue si el código es 2xx
.BodyobjectCuerpo de la respuesta. Si es JSON, se deserializa automáticamente
.HeadersDictionaryCabeceras de la respuesta
= respuesta.Ok
= respuesta.StatusCode == 200
= respuesta.Body["token"] // si el body es JSON
= respuesta.Headers["Content-Type"]

Resultado de actividades de lectura de correo (Outlook, IMAP, POP3).

PropiedadTipoDescripción
.IdstringIdentificador único (úsalo en mover/eliminar/adjuntos)
.SubjectstringAsunto
.FromstringRemitente
.To / .Cc / .Bccstring[]Destinatarios
.BodystringCuerpo (texto plano o HTML según IsHtml)
.IsHtmlboolean¿El cuerpo es HTML?
.SentAtDateTimeFecha de envío/recepción
.IsReadboolean¿Está leído?
.AttachmentsZoanAttachment[]Adjuntos (si se pidió incluirlos)
= correo.Subject
= correo.From
= count(correo.Attachments) > 0
PropiedadTipoDescripción
.NamestringNombre del archivo
.ContentTypestringTipo MIME (ej. application/pdf)
.Contentbyte[]Contenido binario

Resultado de consumir una cola de Nexus (paquete Queue).

PropiedadTipoDescripción
.IdstringIdentificador del ítem
.QueueIdstringCola a la que pertenece
.Referencestring?Referencia de negocio (ej. número de factura)
.Prioritystringlow / normal / high
.Statusstringnew / inProgress / success / failed
.SpecificContentDictionaryDatos del ítem (los campos que pusiste al encolarlo)
.OutputDictionary?Resultado, una vez procesado
.AttemptsintNúmero de intentos
.CreatedAtstringFecha de creación
= item.Reference
= item.SpecificContent["nit"]

Es el objeto que recibe la variable errorVariable de Try / Catch cuando algo en el try falla.

PropiedadTipoDescripción
.MessagestringMensaje del error
.TypestringTipo de excepción (p. ej. "HttpRequestException", "TimeoutException"); úsalo para distinguir errores
.SourcestringOrigen de la excepción
.StackTracestringTraza de la pila
= error.Message
= error.Type == "TimeoutException" // ramificar según el tipo de error

Tratarlo como texto usa el mensaje (= "Error: " + error), así que leerlo como string sigue funcionando.

Cuando un valor llega como texto pero necesitas un número (o al revés), conviértelo explícitamente:

= toNumber(fila["Total"]) // texto → número
= toInt(cantidadTexto) // texto → entero
= toString(contador) // número → texto
= parseDouble(replace(monto, ",", ".")) // "1.234,56" con coma decimal → número

Consulta la lista completa en Expresiones › Conversión de tipos.