Programación práctica en ObjectScript: de JSON a Globals a SQL
Al comenzar con InterSystems IRIS o Caché, los desarrolladores a menudo se encuentran con tres conceptos fundamentales: Dynamic Objects, Globals y Relational Table. Cada uno tiene su papel en la construcción de soluciones escalables y mantenibles. En este artículo recorreremos ejemplos prácticos de código, destacaremos buenas prácticas y mostraremos cómo estos conceptos se relacionan entre sí.
1. Trabajando con Dynamic Objects:
Los objetos dinámicos (%DynamicObject y %DynamicArray) permiten a los desarrolladores manipular estructuras similares a JSON directamente en ObjectScript. Son especialmente útiles para aplicaciones modernas que necesitan analizar, transformar o generar JSON.
Ejemplo: Crear y manipular Dynamic Objects
// Create a Dynamic objectSet obj - {}
// Add propertiesSet obj.name = "Vachan"Set obj.age = 25// Nested objectsSet obj.address = {"city":"Bengaluru", "zip":"560000"}
// Add an ArraySet obj.skills = ["Objectscript", "SQL"]
// Convert to JSON stringSet json = obj.%ToJSON()
Write json,!
// Parse JSON string back to an objectSet parser = {}.%FromJSON(json)
Write parser.nameMejores prácticas
- Validad siempre la entrada JSON con %FromJSON() para detectar errores.
- Usad obj.%Get("property") cuando no estéis seguros de que una propiedad exista.
- Preferid %DynamicArray para estructuras de tipo lista.
2. Usando Globals de manera efectiva:
Los Globals son arrays dispersos jerárquicos almacenados directamente en el motor de la base de datos IRIS. Son extremadamente rápidos y pueden almacenar prácticamente cualquier estructura.
Ejemplo: Almacenando datos en Globals
// Store student data in a globalSET^Student(1,"Name") = "Alice"SET^Student(1,"Age") = 29SET^Student(2,"Name") = "Bob"SET^Student(2,"Age") = 34// Retrieve dataWRITE^Student(1,"Name") // outputs: Alice// Iterate over all studentsSET id=""FORSET id=$ORDER(^Student(id)) QUIT:id="" {
WRITE"Student ",id,": ",^Student(id,"Name")," (Age ",^Student(id,"Age"),")",!
}Mejores prácticas:
- Definid una estructura clara para el global antes de codificar (evitad claves ad-hoc).
- Usad globals para almacenamiento de alto rendimiento cuando no se necesite la sobrecarga de SQL.
- Para los datos de la aplicación, preferid clases persistentes con globals gestionados internamente.
3. Creación de tablas relacionales SQL:
En IRIS, las tablas relacionales se pueden crear tanto usando SQL DDL como clases persistentes.
Ejemplo: Crear una tabla SQL mediante DDL
CREATETABLE Employee (
IDSERIAL PRIMARY KEY,
NameVARCHAR(50),
Age INT,
Department VARCHAR(50)
);Ejemplo: Crear la misma tabla como Clase Persistente
Class Company.Employee Extends (%Persistent) {
Property Name As%String(MAXLEN=50);Property Age As%Integer;Property Department As%String(MAXLEN=50);
}Una vez compilada, esta clase crea automáticamente un global subyacente y una tabla SQL. Ahora podéis usar tanto ObjectScript como SQL:
// Create and save an employeeSET emp = ##class(Company.Employee).%New()
SET emp.Name = "Charlie"SET emp.Age = 40SET emp.Department = "IT"DO emp.%Save()
// Query employees with SQL
&sql(SELECTName, Age FROM Company.Employee)
WHILE (SQLCODE=0) {
WRITE"Employee: ",Name,", Age: ",Age,!
FETCH NEXT
}Mejores Prácticas:
- Preferid clases persistentes para aplicaciones mantenibles.
- Usad SQL DDL para definiciones rápidas de tablas o integración con sistemas externos.
- Definid siempre índices para las propiedades que se consultan con frecuencia.
RESUMEN:
Ya sea que estéis analizando cargas JSON, gestionando datos de acceso rápido o diseñando tablas relacionales, entender cuándo usar objetos dinámicos, globals o clases persistentes es clave para convertiros en desarrolladores efectivos de ObjectScript.