查找

Anúncio
· jan 12

Vídeos para desarrolladores de InterSystems, resumen de diciembre de 2025

Hola y bienvenidos al resumen de diciembre de 2025 de la Comunidad de Desarrolladores en YouTube.
InterSystems Ready 2025
Por Jeffrey Fried y el Dr. Sankalp Khanna, PhD 
 
Por Brenna Quirk, Jim Breen y Kim Koehler
 
Por Thomas Dyar, Fernando Ferreira, Djeniffer Greffin, Claudio Laudeauzer, Holger Müller y Fabio Caré
 
Por Boya Song
 
Por Sean Kennedy
 
Vídeos de "Code to Care"
Usando GenAI en la vida real: casos de uso diarios que funcionan
Por Don Woodlock, Jefe de Soluciones Globales de Salud, InterSystems
Más de los desarrolladores de InterSystems
Trucos y consejos de SQL
Por Ismail Ben Atitallah, Yiwen Huang
 
Estadísticas de tablas más inteligentes
Por Yuchen Liu, Minhao Li
 
10.º aniversario de la Comunidad de Desarrolladores de InterSystems.
Por el equipo de la Comunidad de Desarrolladores de InterSystems
 
Línea del tiempo de la Comunidad de Desarrolladores – Edición del 10.º aniversario
Por el equipo de la Comunidad de Desarrolladores de InterSystems
Discussão (0)1
Entre ou crie uma conta para continuar
Anúncio
· jan 12

Noticias del ecosistema de desarrolladores de InterSystems, cuarto trimestre de 2025

¡Hola y bienvenidos a las Noticias del Ecosistema de Desarrolladores!

El cuarto trimestre del año estuvo lleno de actividades emocionantes en el Ecosistema de Desarrolladores de InterSystems. Por si os perdisteis algo, hemos preparado una selección de las noticias y temas más destacados para que os pongáis al día.

News

🎇 Repaso de 2025: ¡celebrad vuestro año con la Comunidad de Desarrolladores!

🎆 Felicitaciones de temporada a la Comunidad de Desarrolladores

🔔 ¡Nueva interfaz del Chat de IA de la Comunidad de Desarrolladores!

📝 Actualización de las plataformas de InterSystems, T4 de 2025

👨‍💻 Tutoriales prácticos en línea gratuitos para nuevos desarrolladores de InterSystems IRIS

🔔 Cómo enviar informes de errores a través del Portal de Ideas

⌨ Recompensa de artículos de octubre y noviembre en Global Masters

📝 GitHub de la Comunidad de Desarrolladores de InterSystems

🎃 Halloween en Global Masters

🔧 La IA de la Comunidad de Desarrolladores se toma un descanso

🔧 Actualización del buscador de la Comunidad de Desarrolladores

🛠️ Aviso de mantenimiento, 26 de diciembre de 2025

📝 Celebrando 1.000 certificaciones

Concursos y eventos

 
Sorteo "Mejorando la experiencia inicial del desarrollador"

🤝 Encuentro sobre Seguridad e IA para Desarrolladores y Startups

🤝 Encuentro de IA para Desarrolladores y Startups

📺 [Webinar en español] De los datos al conocimiento: aprovechando la información clínica con InterSystems e IA

📺 [Webinar en neerlandés] Intercambio de datos en salud según el estándar FHIR con Python

👩‍💻 InterSystems en el Hack Jak Brno Healthcare Hackathon 2025

Últimas versiones

⬇️ InterSystems anuncia la disponibilidad general de InterSystems IRIS, InterSystems IRIS for Health y HealthShare Health Connect 2025.3

⬇️ Las versiones de mantenimiento 2025.1.2 y 2024.1.5 de InterSystems IRIS, IRIS for Health y HealthShare HealthConnect ya están disponibles

⬇️ Anuncio de la disponibilidad de Adaptive Analytics 2025.4.1

⬇️ Notas de la versión: InterSystems Cloud Services – Versión 25.24.1 (noviembre de 2025)

⬇️ 2025.3 Modernizando la experiencia de usuario en interoperabilidad

⬇️ SDKs de cliente disponibles en repositorios externos

⬇️ Programa de acceso anticipado de "Modelos personalizados IntegratedML"

Mejores prácticas y preguntas clave

❓Preguntas clave: octubre, noviembre, diciembre (por anunciar)

Personas y empresas que debéis conocer

👩‍🏫 ¡Conoced a Henry Hamon Rodrigues Pereira, nuevo moderador de la Comunidad de Desarrolladores!

👩‍🏫 Celebrando una voz guía en la Comunidad de Desarrolladores

👩‍🏫 Celebrando una mente curiosa de la Comunidad de Desarrolladores

Así que…

¡Aquí tenéis nuestra selección de las cosas más interesantes e importantes!

¿Cuáles fueron vuestros momentos destacados de este último trimestre? Compartidlos en la sección de comentarios y recordemos juntos la diversión que hemos tenido.

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· jan 12 5min de leitura

Plugin do VSCode Moderno e Fácil de Usar para InterSystems ObjectScript: Visualização de Diagrama de Classes com PlantUML

Motivação

Eu não conhecia ObjectScript até começar meu novo emprego. Objectscript não é exatamente uma linguagem de programação jovem. Comparada a C++, Java e Python, a comunidade não é tão ativa, mas estamos empenhados em tornar este lugar mais vibrante, não estamos?

Notei que alguns dos meus colegas acham complicado entender as relações de classes nesses projetos enormes. Não existe nenhuma ferramenta moderna de diagrama de classes fácil de usar para ObjectScript.

Trabalhos Relacionados

Eu testei trabalhos relevantes:

- InterSystems class view: 1. https://github.com/intersystems-community/ClassExplorer Este é um ótimo trabalho, e o diagrama de classes parece muito bom e limpo. Mas ainda há um problema com o build do docker: "#0 0.512 exec ./irissession.sh: no such file or directory". Imagino que seja um recurso de suporte para o studio em vez do VSCode. Parece ser necessário importar seu projeto manualmente. Parece que precisa de alguma configuração para usar este produto.

2. https://github.com/gjsjohnmurray/vscode-objectscript-class-view Este é outro ótimo trabalho que me dá inspiração. A estrutura de classes é clara e suporta não apenas classes no projeto, mas também classes da biblioteca. Mas parece uma versão aprimorada do outline do vscode.

- Plugins de visualização de diagrama de classes do VSCode para outras linguagens

1. https://github.com/OH318/J-Diagram O readme mostra muito bem os resultados rodando com draw.io. Mas quando testei localmente, não consegui usar. Então não vou usá-lo como referência.

2. https://github.com/pierre3/PlantUmlClassDiagramGenerator É relativamente bom e requer alguma configuração. Peguei a ideia de gerar uml primeiro, depois usar o PlantUML para gerar o diagrama de classes.

- Melhor implementação de diagrama de classes: 1. Produtos da Jetbrains, como Intellij Idea e Pycharm, são incríveis para diagramas de classes. Apenas arraste e solte classes, clique em um hiperlink e você está pronto para gerar um diagrama de classes poderoso.

2. Plugin de diagrama de classes typescript para VSCode https://marketplace.visualstudio.com/items?itemName=AlexShen.classdiagra... arrastar, soltar, clicar em hiperlink, suporte para geração de diagrama de classes de pasta.

Tirei a ideia de design deles. Infelizmente, eles são de código fechado, então terei que projetar o projeto por conta própria.

InterSystems ObjectScript Class Diagram View

é uma extensão do Visual Studio Code que gera diagramas de classes UML a partir de arquivos InterSystems ObjectScript (.cls). Ela fornece recursos interativos de visualização e navegação, construídos sobre o PlantUML para renderização confiável de diagramas.

Principais Recursos

  • Gera diagramas de classes UML a partir de arquivos .cls
  • Suporte para geração de diagrama tanto de classe única quanto de nível de pasta
  • Integração com menu de contexto (clique direito) tanto no editor quanto no explorer
  • Visualiza relacionamentos de classes, propriedades e métodos
  • Construído sobre o PlantUML para renderização confiável de diagramas
  • Gera diagramas usando o Servidor Web PlantUML (sem necessidade de Java)
  • Navegação Interativa no Diagrama de Classes
    • Clique em nomes de classes, propriedades ou métodos para pular rapidamente para o código correspondente
    • Diagramas SVG incorporados em HTML para interação suave
    • Navegação visual de relacionamentos de classes

Testei o plugin em outro ótimo projeto objectscript apiPub

Ofereci dois modos, gerar diagrama de classes baseado na análise do sistema de arquivos local do projeto ou com integração iris.

Gerando Diagramas de Classes

Este modo analisa a estrutura de classe do projeto local, a estrutura de herança da classe de biblioteca não será gerada e a classe de biblioteca não pode ser clicada para entrar.

Para uma única classe:

Para uma pasta:

Para o projeto inteiro. O diagrama de classes está no formato SVG, e é sempre nítido e claro.

Gerar Diagrama de Classes com Integração IRIS

Este recurso depende dos plugins da InterSystems e gerará todas as propriedades, parâmetros e métodos da classe escolhida. É importante notar que o recurso gera toda a hierarquia de herança, mesmo para classes que não estão presentes no projeto local.

Configure sua conexão IRIS nas configurações do VS Code:

  • Vá para Configurações > Extensões > InterSystems ObjectScript Class Diagram
  • Insira seu host, porta, namespace, nome de usuário e senha do servidor IRIS

Configurar Definições do IRIS

Abra um arquivo .cls no editor

Clique com o botão direito e selecione "Generate InterSystems Class Diagram"

A extensão se conectará ao seu servidor IRIS e gerará um diagrama usando informações de classe do servidor

Clique em nomes de classes, propriedades ou métodos no diagrama para:

Abrir a classe no IRIS Documatic

Ver definições de propriedades no IRIS

Navegar para implementações de métodos no IRIS

Gerar Diagrama de Classes InterSystems ObjectScript

Requisitos

SO Necessário Opcional (para geração local do PlantUML)
Windows - VSCode 1.96.0+ - Arquivos de Classe ObjectScript(.cls) - Java 8+
Linux - VSCode 1.96.0+ - Arquivos de Classe ObjectScript(.cls) - Java 8+ - Graphviz

Uso

  • Abra um arquivo .cls e gere um diagrama de classes usando:
    • Atalho Ctrl+Alt+U
    • Clique com o botão direito em um arquivo ou pasta e selecione "Generate Class Diagram"
  • Clique em elementos no diagrama para pular para definições de classes, propriedades e métodos

Problemas Conhecidos

  • Geração de Subclasses: Funcionalidade ausente para gerar diagramas de subclasses para a classe atual
  • Desempenho em Projetos Grandes:
    • Gerar diagramas para pastas grandes via clique direito pode sofrer atrasos significativos
    • Webview/SVG gerado para projetos grandes carece de funcionalidade de zoom suave e escala adequada
  • Senha do IRIS em Texto Simples: Senhas não devem ser mostradas como texto simples. Isso será corrigido na próxima versão. Eu não armazeno as informações de conexão e o código é open source, então você pode verificá-lo para ver se é seguro.

Por favor, reporte quaisquer problemas no repositório GitHub.

Contribuição e Licença

  • Aberto para contribuições via GitHub
  • Licenciado sob MIT

Você pode encontrar este plugin no marketplace, sinta-se à vontade para criar issues em issue e contribuir com PR.

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· jan 12 9min de leitura

Solucionando problemas en APIs REST con %CSP.Request y %CSP.Response

Existen numerosas herramientas excelentes para probar vuestras APIs REST, especialmente cuando están en funcionamiento. Postman, distintas extensiones de navegador e incluso código personalizado en ObjectScript usando objetos %Net.HttpRequest pueden hacer el trabajo. Sin embargo, a menudo resulta complicado probar únicamente la API REST sin involucrar, sin querer, el esquema de autenticación, la configuración de la aplicación web o incluso la conectividad de red. Son muchos obstáculos solo para probar el código dentro de vuestra clase dispatch.

La buena noticia es que, si nos tomamos el tiempo para comprender cómo funciona internamente la clase %CSP.REST, encontraremos una alternativa que permite probar únicamente el contenido de la clase dispatch. Podemos configurar los objetos de request y response para invocar los métodos directamente.

Comprendiendo %request y %response

Si alguna vez habéis trabajado con APIs REST en InterSystems, probablemente os hayáis encontrado con los dos objetos que impulsan todo el proceso: %request y %response. Para entender su utilidad, debemos recordar algunos fundamentos de ObjectScript sobre las “variables con porcentaje”. Normalmente, una variable en ObjectScript solo puede ser accesible directamente dentro del proceso que la define. Sin embargo, una variable con el prefijo de porcentaje es pública dentro de ese proceso, lo que significa que todos los métodos del mismo proceso pueden acceder a ella. Por eso, al definir estas variables nosotros mismos, podemos invocar los métodos de nuestra API REST exactamente como se ejecutarían al recibir una solicitud real en la API.

Considerad la siguiente clase básica %CSP.REST. Cuenta con dos rutas y dos métodos correspondientes. La primera ruta acepta una solicitud que contiene una fecha de nacimiento en formato ODBC y devuelve la edad en días. La segunda ruta acepta un nombre como parámetro en la URL, comprueba que el método de la solicitud sea correcto y simplemente devuelve un mensaje de saludo.

Class User.REST Extends %CSP.REST
{

XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
  <!-- Ruta que calcula la edad en días a partir de la fecha de nacimiento -->
  <Route Url="/calc/age" Method="POST" Call="CalcAge" />

  <!-- Ruta que devuelve un saludo con el nombre proporcionado en la URL -->
  <Route Url="/echoname/:david" Method="GET" Call="EchoName" />
</Routes>
}

ClassMethod CalcAge() As %Status
{
    try {
        // Obtenemos los datos de la solicitud en formato JSON
        set reqObj = {}.%FromJSON(%request.Content)
        set dob = reqObj.%Get("dob")

        // Calculamos la fecha actual y la fecha de nacimiento en formato $H
        set today = $P($H,",",1)
        set dobh = $ZDH(dob,3)

        // Calculamos la edad en días
        set agedays = today - dobh

        // Preparamos el objeto de respuesta
        set respObj = {}.%New()
        do respObj.%Set("age_in_days",agedays)

        // Definimos el tipo de contenido de la respuesta como JSON
        set %response.ContentType = "application/json"
        write respObj.%ToJSON()

        return $$$OK
    }
    catch ex {
        return ex.AsStatus()
    }
}

ClassMethod EchoName(name As %String) As %Status
{
    try {
        // Verificamos que el método de la solicitud sea GET
        if %request.Method '= "GET" {
            $$$ThrowStatus($$$ERROR($$$GeneralError,"Método incorrecto."))
        }

        // Devolvemos un mensaje de saludo
        write "Hola, "_name
    }
    catch ex {
        // Mensaje de error si ocurre algún problema
        write "Lo siento, "_name_". Me temo que no puedo hacer eso."
    }
}

} 

Si intentamos llamar a estos métodos desde una sesión de terminal, fallarán porque %request no está definido.

USER>w $SYSTEM.Status.GetErrorText(##class(User.REST).CalcAge())

ERROR #5002: Error de ObjectScript: <INVALID OREF>CalcAge+2^User.REST.1 

Normalmente, la clase %CSP.REST crea este objeto a partir de la solicitud HTTP recibida como una instancia de %CSP.Request. De la misma manera, el objeto %response se genera como una instancia de %CSP.Response.

USER>set %request = ##class(%CSP.Request).%New()

USER>set %request.Content = ##class(%CSP.CharacterStream).%New()

USER>do %request.Content.Write("{""dob"":""1900-01-01""}")

USER>set %response = ##class(%CSP.Response).%New()

USER>do ##class(User.REST).CalcAge()

{"age_in_days":45990}

En estas pocas líneas, diseñáis la solicitud e inicializáis su propiedad Content como un %CSP.CharacterStream. Este paso es vital, ya que, de lo contrario, esa propiedad permanecerá indefinida y no se podrá escribir en ella. Otra alternativa válida sería %CSP.BinaryStream. Llenáis el flujo de contenido con un JSON e inicializáis %response como un %CSP.Response sin necesidad de hacer nada más. Simplemente debe estar definido para que el método funcione.

Esta vez, al llamar a vuestro método de clase, podéis ver la salida esperada. También podríais usar el comando zwrite %response para inspeccionar el tipo de contenido de la respuesta o el código de estado HTTP, lo que ayuda a solucionar cualquier problema que pudiera surgir.

Probar la salida de vuestro método de clase solo requiere cinco líneas. Evidentemente, es un ejemplo simplificado a propósito. Sin embargo, es mucho más eficiente que navegar por el System Management Portal para configurar una aplicación y crear las solicitudes HTTP necesarias para autenticar y llamar a este método.

Además, os permite verificar el método en total aislamiento. Cuando enviáis una solicitud a través de las herramientas habituales para probar APIs REST, estáis comprobando toda la pila: conectividad de red, configuración de la aplicación, mecanismo de autenticación, despacho de la solicitud y el método, todo a la vez. El enfoque descrito anteriormente, en cambio, permite probar exclusivamente el método definido en la API, lo que facilita encontrar el problema durante la depuración.

De manera similar, podéis probar el segundo método configurando el objeto %request correspondiente y luego llamándolo. En este caso, pasaréis el nombre de la misma manera que lo haríais con cualquier otro método de clase.

USER>set %request = ##class(%CSP.Request).%New()

USER>set %request.Method = “GET”

USER>set %response = ##class(%CSP.Response).%New()

USER>do ##class(User.REST).EchoName(“Dave”)

Hola, Dave

Procesamiento de solicitudes

Podéis llevar esto un paso más allá y probar también el procesamiento de las solicitudes. Es posible que hayáis notado que en el ejemplo de EchoName comprobé manualmente el método HTTP de la solicitud CSP. Lo hice porque las llamadas directas a métodos omiten las reglas de enrutamiento, lo que normalmente evita un mapeo incorrecto.

Si decidís continuar con vuestra sesión de terminal usando el %request que habéis definido, podéis determinar su método HTTP de la siguiente manera:

USER>set %request.Method = “GET”

Para probar el procesamiento, simplemente tenéis que llamar al método DispatchRequest de la clase. Si todo funciona correctamente, volveréis a ver la salida de vuestro método:

USER>do ##class(User.REST).DispatchRequest(“/calc/age/Dave”,%request.Method)

Hola, Dave

Con el objeto %request correctamente configurado, incluyendo el método HTTP, podéis validar vuestras rutas. Podéis realizar una prueba similar para el endpoint de cálculo de edad configurando nuevamente vuestro %request como hicisteis antes y utilizando el método POST:

USER>set %request = ##class(%CSP.Request).%New()

USER>set %request.Content = ##class(%CSP.CharacterStream).%New()

USER>do %request.Content.Write("{""dob"":""1900-01-01""}")

USER>set %request.Method = “POST”

USER>set %response = ##class(%CSP.Response).%New()

USER>do ##class(User.REST).CalcAge()

USER>do ##class(User.REST).DispatchRequest(“/calc/age”,%request.Method)

{"age_in_days":45990}

Tenéis que tener en cuenta que hemos definido el argumento URL para el método DispatchRequest como únicamente la parte de la URL que se encuentra en el nodo route definido en el XData de la clase de despacho. ¡Esto es todo lo que necesitáis para probar el procesamiento! Esto os permite realizar pruebas de forma independiente, sin necesidad de conocer la URL final de despliegue ni la configuración de la aplicación web. De este modo, podéis probar todo lo que normalmente se define dentro de una clase %CSP.REST sin preocuparos por los factores externos habituales que la rodean.

Por cierto, he estado iniciando las sesiones creando %request como una nueva instancia de %CSP.Request. Sin embargo, si tenéis pensado hacer varias pruebas seguidas, también podéis usar el método %request.Reset() para reiniciar el objeto de solicitud. Lo mismo aplica para el objeto %response.

Dado que vuestra solicitud podría ser más compleja que este ejemplo, es recomendable que os familiaricéis con las propiedades y métodos de la clase %CSP.Request. Por ejemplo, es bastante común que vuestra API verifique el tipo de contenido de la solicitud y asegure que sea el esperado. En ese caso, podéis configurar %request.ContentType como application/json o cualquier otro que sea adecuado para vuestro uso. También podéis configurar cookies, datos MIME y datos de la solicitud. Además, podéis ajustar la propiedad Secure para simular si la solicitud utilizó HTTPS o no.

Un par de advertencias

Hay dos consideraciones principales que tenéis que tener en cuenta al probar de esta manera. Primero, si vuestra API devuelve un archivo, la salida en el terminal puede volverse un poco difícil de manejar. En esos casos, debéis redirigir la salida a un archivo. Podéis hacerlo con los siguientes comandos:

USER>set %request = ##class(%CSP.Request).%New()

USER>set %request.Method = "GET"
USER>set io = "C:\Users\DavidHockenbroch\Desktop\output.txt"
USER>open io:"NW":10
USER>write $TEST
1
USER>use io do ##class(User.REST).DispatchRequest("/echoname/Dave",%request.Method)

USER>close io

Ahora tengo un archivo de texto en el escritorio que dice “Hello, Dave.” Usar N y W en el comando open creará el archivo si aún no existe y lo abrirá para escritura. Tened en cuenta que comprobamos $TEST. Si esa variable es 0 al verificarla, ha habido un problema al abrir el archivo como dispositivo para escritura. Esto podría indicar un problema de permisos del archivo, o que el archivo ya esté abierto y bloqueado por otro proceso. Como buena práctica, siempre debéis recordar cerrar el dispositivo.

La segunda advertencia es que, si planeáis configurar una clase de eventos de sesión especial en la configuración de la aplicación web, y esos eventos personalizados afectan la forma en que funcionan vuestros métodos REST, puede causar problemas, ya que estamos omitiendo esos métodos. En ese caso, tendréis que llamarlos manualmente como métodos de clase desde el terminal.

¡Adelante!

Ahora que hemos establecido una manera de probar nuestra API sin complicaciones adicionales, estamos listos para pasar a nuestro verdadero objetivo: las pruebas unitarias. ¡No os perdáis el próximo artículo!

Discussão (0)1
Entre ou crie uma conta para continuar
Resumo
· jan 12

【週間ダイジェスト】 1/05 ~ 1/11 の開発者コミュニティへの投稿