#ObjectScript

2 Seguidores · 234 Publicaciones

InterSystems ObjectScript es un lenguaje de programación para operar con datos mediante cualquier modelo de datos que se encuentre en InterSystems Data Platform (Objetos, relacionales, valores clave, documentos, globales) y desarrollar lógica empresarial para aplicaciones del lado del servidor en InterSystems Data Platform.

Consultar la documentación.

Artículo Daniela Echenique · jun 2, 2025 5m read

Objetivo

Explorar un enfoque de validación estructural adaptativa para mantener estables las pruebas automatizadas frente a cambios en la estructura del JSON generado a partir de datos expuestos desde una base de datos InterSystems IRIS.

Se busca minimizar falsos positivos ante cambios no críticos, siempre que la respuesta siga siendo coherente con la estructura real de la base. En estos casos, la ejecución continúa y se deja registro del evento en un archivo estructurado, que permite trazabilidad y análisis evolutivo.

0
0 88
Artículo Ricardo Paiva · abr 14, 2025 3m read

Lo que encuentro realmente útil de IRIS al enseñar mi asignatura de bases de datos post-relacionales es el hecho de que es una base de datos multimodelo. Lo que significa que podéis abordar la arquitectura y la estructura una sola vez y, después, mostrar el uso de diferentes modelos (como el objeto, documento, jerárquico) utilizando el mismo lenguaje y enfoque. Y no es un gran salto pasar de un lenguaje de programación orientado a objetos (como C#, Java, etc.) a una base de datos orientada a objetos.

Sin embargo, junto con las ventajas (que son muchas), vienen algunos inconvenientes cuando pasamos del modelo orientado a objetos al relacional. Cuando digo que podéis acceder a los mismos datos utilizando diferentes modelos, también necesito explicar cómo es posible trabajar con listas y arrays del modelo objeto en una tabla relacional. Con los arrays es muy sencillo: por defecto se representan como tablas separadas y eso es todo. Con las listas es más complicado, porque por defecto son cadenas de texto. Pero uno sigue queriendo hacer algo con ellas sin dañar la estructura ni volver esta lista ilegible en el modelo objeto.

Así que en este artículo os mostraré un par de predicados y una función que son útiles al trabajar con listas, y no solo como campos.

0
0 64
Artículo Jose-Tomas Salvador · mar 25, 2025 1m read

Rúbrica de preguntas frecuentes de InterSystems

Esto puede hacerse con TRY-CATCH:

 #dim ex As %Exception.AbstractException
 TRY {
    //Code that causes an error
  }
  CATCH ex {
     do ex.Log()
  }

Si utilizáis ^%ETN, llamadlo desde la entrada BACK (BACK^%ETN).

Echad también un vistazo al artículo relacionado: Cómo obtener errores de aplicación (^ERRORS) utilizando un comando

0
1 56
Anuncio Sergio Farago · mar 14, 2025

Hola, comunidad de IRIS,

InterSystems Certification está desarrollando un examen de certificación para profesionales desarrolladores de InterSystems IRIS, y si coincidís con la descripción del candidato al examen que se indica a continuación, nos gustaría que participéis en la prueba beta del examen.

0
0 54
Artículo Luis Angel Pérez Ramos · mar 13, 2025 1m read

¡Hola compañeros!

Otra vez más me he dado cuenta de que no hay una forma supersencilla de mostrar el error de la variable %Status, cosa que necesito con relativa frecuencia desde el terminal.

Sí, conozco las macros $$$, pero no son demasiado útiles en un terminal.

Habitualmente lo que hago es intentar recordar de memoria o copiar de algún sitio la fórmula:

USUARIO>w $System.State.DisplayError(st)
0
0 77
Artículo Luis Angel Pérez Ramos · mar 11, 2025 53m read

Desde la introducción de Embedded Python siempre ha estado la duda sobre su rendimiento respecto a ObjectScript y en más de una ocasión lo he comentado con @Guillaume Rongier , pues bien, aprovechando que estaba haciendo una pequeña aplicación para capturar los datos de los concursos públicos en España y poder realizar búsquedas utilizando las capacidades de VectorSearch he visto la oportunidad de realizar una pequeña prueba.

0
0 83
Artículo Alessandra Carena · feb 11, 2025 7m read

Introducción

Una API REST (Representational State Transfer) es una interfaz que permite que diferentes aplicaciones se comuniquen entre sí a través del protocolo HTTP, utilizando operaciones estándar como GET, POST, PUT y DELETE. Las API REST son ampliamente utilizadas en el desarrollo de software para exponer servicios accesibles por otras aplicaciones, permitiendo la integración entre diferentes sistemas.

Sin embargo, para garantizar que las API sean fáciles de comprender y utilizar, es fundamental contar con una buena documentación. Aquí es donde entra en juego OpenAPI.

2
0 203
InterSystems Official Jose-Tomas Salvador · feb 11, 2025

Primero, ¡queremos desearos un Feliz Año Nuevo a toda la comunidad de desarrolladores! Esperamos traer muchas cosas buenas este año, y hoy queremos presentaros la última versión de la extensión Intersystems Language Server para VS Code. La mayoría de las mejoras del Language Server se experimentan a través de la interfaz de la extensión ObjectScript, por lo que es posible que no hayáis notado los avances en áreas como IntelliSense y las ayudas emergentes que se han lanzado a lo largo de 2024.

0
0 96
InterSystems Official Mario Sanchez Macias · ene 16, 2025

InterSystems ha corregido un defecto que provoca la introducción de registros no válidos en la base de datos y en los ficheros de journal al utilizar una sintaxis específica de $LIST. La probabilidad de encontrar este defecto es muy baja, pero los impactos operativos pueden ser significativos.

Productos afectados

  • InterSystems IRIS® data platform: Versiones 2023.3, 2024.1.0, 2024.1.1, 2024.1.2, 2024.2, 2024.3
  • InterSystems IRIS® for Health: Versiones 2023.3, 2024.1.0, 2024.1.1, 2024.1.2, 2024.2, 2024.3
  • HealthShare® Health Connect: Versiones 2023.3.0, 2024.1, 2024.1.1, 2024.1.2, 2024.2, 2024.
0
0 91
Artículo Ricardo Paiva · dic 9, 2024 1m read

Rúbrica de preguntas frecuentes de InterSystems

 

Si queréis generar un error personalizado arbitrario en un bloque TRY, podéis pasar una excepción con un throw de la siguiente manera. En el siguiente ejemplo, se genera un error personalizado si el valor de Stcount es menor que 1.

Class User.Test
{

ClassMethod ExceptionTest()
 {
    try
    {
      // : some codes
      if (Stcount<1) {
          throw ##class(%Exception.General).
0
0 115
Artículo Ricardo Paiva · nov 5, 2024 2m read

Las funciones de agregación definidas por el usuario han sido compatibles con IRIS desde la versión 2021.1.0. Hace años deseaba tener esta funcionalidad antes de encontrar una forma alternativa y secreta de sobrescribir MAX y MIN en un tipo de dato personalizado, pero no tuve la oportunidad de probarlo realmente hasta hoy. Me pareció una experiencia/ejemplo interesante – ya antes surgió la pregunta de cómo obtener la Mediana en IRIS SQL – así que lo comparto aquí sin extenderme demasiado.

0
0 77
Artículo Jose-Tomas Salvador · oct 16, 2024 2m read

En ObjectScript, tenéis una amplia colección de funciones que devuelven algún valor, típicamente:

set variable = $somefunction(param1,param2, ...)

No hay nada especial en eso.  
Pero hay un conjunto de funciones que clasifico como del LADO IZQUIERDO.  
La especialidad de ellas es que también podéis usarlas a la izquierda del operador igual como un objetivo en el comando SET:

set $somefunction(param1,param2, ...) = value

La razón para plantear ese tema es que con IRIS 2024.

1
0 62
Artículo Muhammad Waseem · oct 8, 2024 4m read

image

Hola Comunidad,

En este artículo, os presentaré mi aplicación iris-DataViz.

iris-DataViz es una aplicación de análisis y visualización de datos exploratorios basada en Streamlit que aprovecha la funcionalidad de IRIS embebido en Python y SQLAlchemy para interactuar con IRIS, así como la biblioteca de Python PyGWalker para el análisis de datos y la visualización de datos.

0
0 160
Pregunta Oscar Tarriño Buen o · sep 17, 2024

Buenos días,

En una integración que estamos haciendo entre dos sistemas recibos un ORU_R01 con los datos de un monitor.  Lo recibimos mediante una llamada a nuestro webservice en formato XML.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://com.gacelacare.ws">
   <soapenv:Header/>
   <soapenv:Body>
      <com:processMessage>
         <String_1><![CDATA[<ORU_R01 xmlns="urn:hl7-org:v2xml">
    <MSH>
        <MSH.1>|</MSH.1>
        <MSH.2> ^~\&amp;amp;</MSH.2>
        <MSH.3>
            <HD.1>AA</HD.1>
        </MSH.3>
        <MSH.
6
0 197
Artículo Alberto Fuentes · sep 23, 2024 8m read

¡Hola, desarrolladores!

En esta serie de artículos hemos hablado del framework iris-datapipe, de cómo nos ayuda a crear "pipes" de datos para la ingesta y procesamiento, y de cómo instalarlo. Vamos a profundizar en cómo implementar uno de esos "pipes" paso a paso.

Si llegaste directamente a este artículo, te recomiendo revisar los anteriores y recordar que iris-datapipe incluye un QuickStart para que puedas explorar sus funcionalidades rápidamente 👌.

El ejemplo que abordaremos está incluido en el QuickStart, por lo que puedes utilizarlo como referencia.

0
0 84
Artículo Alberto Fuentes · sep 20, 2024 5m read

¡Hola a todos de nuevo!

En el artículo anterior hablamos de iris-datapipe, un framework diseñado para ayudarte a definir "pipes" de datos con un patrón de ingesta y procesamiento. Hoy veremos cómo puedes instalarlo y configurarlo paso a paso.

iris-datapipe incluye un QuickStart, que te permite probarlo rápidamente utilizando un contenedor Docker preconfigurado.

Pero, ¿qué debes hacer si quieres usarlo en tu propia instancia?

InterSystems IRIS

Instalación del paquete

0
0 90
Artículo Luis Angel Pérez Ramos · sep 9, 2024 1m read

Rúbrica de preguntas frecuentes de InterSystems

Esto se puede lograr utilizando el procedimiento CSV() de la clase %SQL.Util.Procedures . A continuación, podéis ver un ejemplo de uso (suponiendo que el archivo `test.csv` se encuentra en `c:\temp`):

 Set rowtype="Name VARCHAR(50),UID VARCHAR(50), PHONE VARCHAR(50)"
 Set filename="c:\temp\test.csv"
 Set result=##class(%SQL.Statement).%ExecDirect(,"call %SQL_Util.CSV(,?,?)",.rowtype,.filename)
 Set rset =result.%NextResult()
 
 // To display all results, use do rset.%Display()
 While rset.%Next() {
     Write "Name:",rset.%GetData(1)," UID:",rset.
0
0 100
Artículo Ricardo Paiva · sep 6, 2024 5m read

En la sección anterior, exploramos el proceso de instalación y comenzamos a escribir el IRIS en Python nativo. Ahora procederemos a examinar el recorrido global y a interactuar con los objetos de la clase IRIS.

get: esta función se utiliza para obtener valores del nodo de recorrido

def traversal_firstlevel_subscript():
    """
    ^mygbl(235)="test66,62" and ^mygbl(912)="test118,78"
    """
    for  i in irispy.node('^mygbl'):
        print(i, gbl_node.
0
0 99
Artículo Luis Angel Pérez Ramos · sep 2, 2024 1m read

[FAQ] Preguntas frecuentes de InterSystems

El siguiente código descarga https://www.intersystems.com/assets/intersystems-logo.png y guarda el archivo como c:\temp\test.png.

Es necesario definir una configuración SSL llamada SSLTEST antes de ejecutar este código.

 

ClassMethod download() As %Status
{
    Set sc = $$$OK
    Set httprequest=##class(%Net.HttpRequest).%New()
    set httprequest.Port = 443
    set httprequest.Https = 1
    set httprequest.SSLConfiguration = "SSLTEST"
    Set httprequest.Server="www.intersystems.com"
    Do httprequest.Get("/assets/intersystems-logo.
0
0 82
Artículo Jose-Tomas Salvador · jul 24, 2024 7m read

Para los programadores nuevos en ObjectScript, inevitablemente surgirá una pregunta: “¿Cuál es la diferencia entre Methods y ClassMethods?” Una respuesta típica sería: “Un ClassMethod se aplica a una clase, pero un method se aplica a una instancia de esa clase.” Aunque esa respuesta es correcta, carece de información importante sobre cómo estos métodos difieren y cómo se usan en ObjectScript. Muchas cosas podrían escribirse como cualquiera de los dos. Por ejemplo, supongamos que tenemos una clase llamada “User.Person” con una propiedad llamada “Name”.

0
0 164
Artículo Luis Angel Pérez Ramos · jul 11, 2024 2m read

¡Hola!

Recientemente he estado investigando una situación molesta mientras editaba clases o rutinas ObjectScript en VSCode.
Lo que me estaba pasando era que, como yo estaba escribiendo en las líneas de código en mi clase (por ejemplo: la adición de un nuevo método; el cambio de la firma de la clase; o de un bloque de código), esto hacía que rápidamente la sintaxis fuera revisada, reformateada y compilada  - e inevitablemente, (ya que estaría a la mitad de mi escritura), esto generaba errores de compilación.

0
0 228
InterSystems Official Jose-Tomas Salvador · jun 7, 2024

Nota: esto fue publicado originalmente el 5 de junio de 2024, pero se presentó como si hubiera sido publicado el 9 de mayo de 2024, por lo que este repost corrige la fecha.

Las actualizaciones recientes del InterSystems Language Server introducen muchas mejoras significativas destinadas a mejorar la experiencia y la productividad del desarrollador. Aquí hablaré de algunas de las más importantes, mientras que la lista completa, que incluye numerosas correcciones de errores, se puede encontrar en el CHANGELOG del Language Server.

0
0 165
Artículo Laura Contreras · mayo 27, 2024 4m read

¡Hola a todos! 

Llevo muchos años trabajando con Excel y, últimamente, lo he enfocado al tratamiento de bases de datos.

Realmente mi experiencia con Excel ha sido para labores financieras, no tanto analíticas de datos en sí, pero en un proyecto reciente he podido trabajar mucho con SQL y me he interesado un poco por el tema (no soy para nada una experta, ¡aviso!)

Me he preguntado cómo podría unir varios excels en uno para, por ejemplo, entregárselo al Data Análisis utilizando la tecnología InterSystems. He recopilado la información en un pequeño artículo. Espero que sea útil y por supuesto estoy abierta a correcciones. 

Vamos a utilizar InterSystems IRIS. Lo que buscaremos es leer los archivos Excel, procesarlos y por último fusionarlos. 

1
0 265
Artículo Robert Cemper · mayo 30, 2024 2m read

Después del último concurso de programación sobre OEX tuve algunas observaciones sorprendentes.
Había aplicaciones casi exclusivas basadas en AI en combinación con módulos Py prefabricados.
Pero profundizando más, todos los ejemplos utilizaron las mismas piezas técnicas de IRIS.

Visto desde el punto de vista de IRIS, era más o menos lo mismo si se buscaba texto
o buscar imágenes u otros patrones.Terminó en métodos casi intercambiables.

Esto me recuerda mi situación privada en casa. Mi esposa y mi hija mantienen una (para mí)
increíble y enorme colección de faldas, camisas y todo el resto de prendas.

0
0 129
Artículo Alberto Fuentes · mayo 29, 2024 3m read

  

Hola comunidad,

En esta serie de artículos, exploraremos las siguientes opciones de uso de InterSystems SQL:


  1. SQL embebido


  2. SQL dinámico


  3. Class Queries


Descripción general SQL

InterSystems SQL proporciona un conjunto completo de funciones relacionales estándar, incluida la capacidad de definir esquemas de tablas, ejecutar consultas y definir y ejecutar procedimientos almacenados. Podéis ejecutar InterSystems SQL de forma interactiva desde el portal de gestión o mediante programación utilizando una interfaz de shell SQL.

0
0 162
Artículo Luis Angel Pérez Ramos · mayo 8, 2024 2m read

Hola a todos,

Cuando estamos diseñando un BP que necesita ser reutilizado, a menudo necesitamos desarrollar un componente con un objeto <call> configurable, donde establecemos el destino de la llamada al objeto.

@process.TargetConfigName

Sí, se puede lograr.

Aquí está el código completo:

Property TargetConfigName As Ens.DataType.ConfigName;Parameter
SETTINGS = "TargetConfigName:Basic";
/// BPL Definition
XData BPL [ XMLNamespace = "http://www.intersystems.com/bpl" ]
{
<process language='objectscript' request='Ens.Request' response='Ens.
2
0 134
Artículo Ricardo Paiva · abr 26, 2024 4m read

Si tenéis tablas de sistema que implementan la funcionalidad "VERSIONPROPERTY", podéis encontraros con el error 5800. Este artículo explica cómo se produce este error y proporciona soluciones para resolver el problema.

Cuando se implementa la comprobación de versiones, la propiedad especificada por VERSIONPROPERTY se incrementa automáticamente cada vez que se actualiza una instancia de la clase (ya sea mediante objetos o SQL).

Por ejemplo:

ClassMethod RunVersionChange() As %Status
{
    Set sample = ##class(dado.TblSample).%OpenId("42")
    Write !,"VERSIONPROPERTY value: "_ sample.
0
0 135
Artículo Alberto Fuentes · abr 24, 2024 4m read

¡Hola, amigos!

A menudo, cuando desarrollamos soluciones comerciales, existe la necesidad de desplegar soluciones sin código fuente, por ejemplo, para preservar la propiedad intelectual.

Una de las formas de conseguirlo es utilizar InterSystems Package Manager.

Aquí he pedido a Midjourney que pinte una propiedad intelectual de software:

¿Cómo se puede lograr esto con IPM?

De hecho, es muy sencillo; basta con añadir la cláusula Deploy="true" en el elemento Resource del manifiesto module.xml. Ver Documentación.

He decidido pasaros el ejemplo más simple posible para ilustrar cómo funciona y también para daros una plantilla de entorno de desarrollo que os permita empezar a construir y desplegar vuestros propios módulos sin código fuente. ¡Allá vamos!

0
0 155