Rechercher

Article
· Août 25 3m de lecture

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 object
    Set obj - {}

    // Add properties
    Set obj.name = "Vachan"
    Set obj.age = 25
    // Nested objects
    Set obj.address = {"city":"Bengaluru", "zip":"560000"}
    
    // Add an Array
    Set obj.skills = ["Objectscript", "SQL"]
    
    // Convert to JSON string
    Set json = obj.%ToJSON()
    Write json,!
    
    // Parse JSON string back to an object
    Set 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 global
SET ^Student(1,"Name") = "Alice"
SET ^Student(1,"Age") = 29
SET ^Student(2,"Name") = "Bob"
SET ^Student(2,"Age") = 34
// Retrieve data
WRITE ^Student(1,"Name")  // outputs: Alice
// Iterate over all students
SET id=""
FOR  SET 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

CREATE TABLE Employee (
    ID SERIAL PRIMARY KEY,
    Name VARCHAR(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 employee
SET emp = ##class(Company.Employee).%New()
SET emp.Name = "Charlie"
SET emp.Age = 40
SET emp.Department = "IT"
DO emp.%Save()

// Query employees with SQL
&sql(SELECT Name, 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.

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Résumé
· Août 25

InterSystems Developers Publications, Week August 18 - 24, 2025, Digest

Articles
Announcements
Questions
#InterSystems IRIS
Is there a way to drop/remove an inherited setting (from the SETTINGS class parameter) in an interoperability business host?
By Timothy Leavitt
Do I need a separate python iris connection for each Namespace?
By Ronaldo Nascimento
How much length of data stored in Binary Resource? the Data is base64bineary it support the large data like 50 lac characters length on base64 data(35mb) pdf data stored in IRIS Binary Resource?
By Rutvik ISM
About the deprecated libraries, is there an expiration time in the code?
By André Dienes Friedrich
How to change the IRIS user when starting a terminal session in an IRIS container?
By Ali Nasser
How to Handel large data like 50 lac characters support in Base64 binary in Binary FHIR Resource ? i
By Rutvik ISM
VS code not importing CSP files
By Peter Smit
Router does not work with number parameter in %CSP.REST
By Sébastien Demoustiez
How to integrate Google Cloud Pub/Sub with InterSystems IRIS?
By Rama Krishna Kummari
#Caché
#HealthShare
#InterSystems IRIS for Health
#Open Exchange
#InterSystems IRIS BI (DeepSee)
BI Architect expressions
By Dmitrij Vladimirov
August 18 - 24, 2025Week at a GlanceInterSystems Developer Community
Résumé
· Août 25

Nuevas publicaciones en la Comunidad de InterSystems, 18-24 agosto

Annonce
· Août 25

线上研讨会 | 以医疗AI枢纽构建智能协同生态:InterSystems IRIS AI 组件注册中心

在医疗 AI 快速发展的今天,数据孤岛、标准不统一、部署效率低等问题日益凸显,如何打破壁垒、实现 AI 能力的高效整合与落地成为行业关键课题。

8月29日14:00,我们邀请InterSystems高级销售工程师 @Nicky Zhu (祝麟) 举办题为“以医疗 AI 枢纽构建智能协同生态”的线上研讨会,聚焦 “医疗 AI 枢纽” 建设,以 InterSystems IRIS 为核心,深度解析医疗 AI 面临的核心挑战 —— 从开放数据可用性、研究可及性到部署基础设施瓶颈,结合国际电信联盟(ITU)AI 就绪框架,剖析行业痛点。

👉点击报名

您将在此次分享中了解到:

  • 针对 AI 组件注册中心架构的系统介绍:依托多模型数据存储( relational+object+K/V+doc+vector )、FHIR 等行业标准协议,实现院内信息能力的一体化整合,通过能力支撑AI应用。
  • 门诊助手实战案例分享:直观展示如何通过 AI 组件注册中心实现执行规划 Agent、上下文感知 Agent 等工具的协同,降低资源整合成本、提升 AI 能力投放效率。
  • 展望医疗 AI 演进趋势:探讨从对话机器人到网络化应用的转型路径,以及 Agent、工具与流程编织的未来方向。

无论您是医疗信息化从业者、AI 技术开发者还是行业决策者,都能在本次研讨会中获取医疗 AI 落地的实战经验、技术架构设计思路与前沿趋势洞察,助力推动医疗 AI 生态的协同创新。我们期待与您的进一步互动。

1. 留言互动

在会议进行过程中,如果您有任何疑问,或者希望与我们进一步讨论,可以在屏幕上方点击“提问”按钮,提交您的问题,我们会在分享结束后整理问题,并通过邮件向您回复。

2. 有奖调研

参会期间,点击屏幕右上角“有奖调研”完成问卷,将有机会获得定制小礼品。

快来加入我们吧٩(๑>◡<๑)۶ 👉点击报名

Discussion (0)1
Connectez-vous ou inscrivez-vous pour continuer
Résumé
· Août 25