Escrito por

Sales Engineer at InterSystems Iberia
Artículo Ricardo Paiva · sep 1 3m read

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.name

Mejores 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.