Escrito por

Analista Desenvolvedora Jr at Bridger
Artigo Heloisa Paiva · Ago. 25 3m read

Programação Prática em ObjectScript: De JSON a Globals e a SQL

Ao começar a usar o InterSystems IRIS ou Cache, os desenvolvedores frequentemente se deparam com três conceitos principais: Objetos Dinâmicos, Globals e Tabela Relacional. Cada um tem seu papel na construção de soluções escaláveis e fáceis de manter. Neste artigo, vamos percorrer exemplos de código práticos, destacar as melhores práticas e mostrar como esses conceitos se conectam.

1. Trabalhando com Objetos Dinâmicos

Objetos dinâmicos (%DynamicObject e %DynamicArray) permitem que os desenvolvedores manipulem estruturas semelhantes a JSON diretamente no ObjectScript. Eles são especialmente úteis para aplicações modernas que precisam analisar, transformar ou gerar JSON.

Exemplo: Criando e Manipulando Objetos Dinâmicos

// 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

Melhores Práticas

  • Sempre valide a entrada JSON com %FromJSON() para capturar erros.
  • Use obj.%Get("property") quando não tiver certeza se uma propriedade existe.
  • Prefira %DynamicArray para estruturas do tipo lista..

2. Usando Globals de forma Eficaz

Globals são arrays esparsos hierárquicos armazenados diretamente no motor de banco de dados do IRIS. Eles são extremamente rápidos e podem armazenar praticamente qualquer estrutura.

Exemplo: Armazenando Dados em 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"),")",!
}

Melhores Práticas:

  • Defina uma estrutura global clara antes de codificar (evite chaves ad hoc).
  • Use globals para armazenamento de alto desempenho quando o overhead do SQL não for necessário.
  • Para dados de aplicação, prefira classes persistentes com globals gerenciados internamente

3. Criando Tabelas SQL Relacionais

No IRIS, tabelas relacionais podem ser criadas usando DDL SQL e classes persistentes.

Exemplo: Criando uma Tabela SQL via DDL

CREATETABLE Employee (
    IDSERIAL PRIMARY KEY,
    NameVARCHAR(50),
    Age INT,
    Department VARCHAR(50)
);

Exemplo: Criando a mesma tabela como uma Classe Persistente

Class Company.Employee Extends (%Persistent) {
    Property Name As%String(MAXLEN=50);Property Age As%Integer;Property Department As%String(MAXLEN=50);
}

Uma vez compilada, esta classe cria automaticamente um global subjacente e uma tabela SQL. Agora você pode usar tanto o ObjectScript quanto o 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
}

Melhores Práticas:

  • Prefira classes persistentes para aplicações fáceis de manter.
  • Use DDL SQL para definições rápidas de tabelas ou integração com sistemas externos.
  • Sempre defina índices para propriedades frequentemente consultadas.

RESUMO:

Seja para analisar payloads JSON, gerenciar dados de consulta de alta velocidade ou projetar tabelas relacionais, entender quando usar objetos dinâmicos, globals ou classes persistentes é fundamental para se tornar um desenvolvedor ObjectScript eficaz.