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"
int / longNúmero entero42, -7
double / decimalNúmero con decimales (el separador decimal es el punto). Usa decimal para dinero3.14, 1250.50m
booleanValor lógico: verdadero o falsotrue, false
DateTimeFecha y horaresultado de now(), today()
TimeSpanUna duraciónnow() - inicio
objectCualquier valor—

El selector de tipo del panel de variables los agrupa (Primitivos, Colecciones, Datos, Seguridad, Sesiones…) y tiene buscador. Tipo compuesto… arma tipos como List<int> o Dictionary<string,string>.

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 declara con su tipo de elemento, por ejemplo List<string>. Se crea con la actividad Crear lista, con new List<string>(), con las funciones newList() o arr(…), o como resultado de funciones como split.

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. El más común es Dictionary<string,object>. Se crea con Crear diccionario, con newDict() o con new Dictionary<string, object>().

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 que escribes tú, 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.

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é
ZoanPageSessionOpen Browser / Attach BrowserClose Browser / Close PageEl navegador y su página (Chrome/Edge)
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 → Guardar resultado en: page
// Get Text → page: page → Guardar resultado en: titulo
// Close Browser → session: 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
.StatusCodeintCó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 Zoan Cloud (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 carril Intentar 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

Para mostrar el error en un log o en un correo, usa error.Message.

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, ",", ".")) // "1234,56" con coma decimal → número

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