Hola comunidad,
Voy a publicar varios artículos de como realizar acciones que puedes hacer desde el web portal, pero por código.
Hoy.... Web Applications por código
La etiqueta de Principiante une los artículos y preguntas para aquellos que apenas comienzan a utilizar InterSystems Data Platform
Hola comunidad,
Voy a publicar varios artículos de como realizar acciones que puedes hacer desde el web portal, pero por código.
Hoy.... Web Applications por código
¡Hola a todos!
InterSystems IRIS tiene un menú llamado Interoperabilidad.
Ofrece mecanismos que permiten crear fácilmente integraciones de sistemas (adaptadores, mapas de registros, BPMs, conversiones de datos, etc.), para que diferentes sistemas puedan conectarse fácilmente.
En el proceso de transmisión de datos se pueden incluir diversas operaciones, por ejemplo: para conectar sistemas que normalmente no están conectados, se pueden recibir (o enviar) datos según las especificaciones del sistema de destino. Además, se puede adquirir y añadir información desde otro sistema antes de enviar los datos. La información también se puede adquirir y actualizar a partir de una base de datos (IRIS u otra).
En esta serie de artículos, comentaremos los siguientes temas, mientras vemos ejemplos de códigos para ayudarte a comprender cómo funciona y qué tipo de desarrollo se requiere cuando se integran sistemas con Interoperabilidad.
En primer lugar, os presento el caso de estudio que utilizaremos en esta serie de artículos:
Una empresa gestiona una tienda online y está cambiando el orden en que se muestra la información de los productos para que coincida con las estaciones del año.
Sin embargo, algunos artículos se venden bien independientemente de la estación del año, mientras otros se venden en momentos inesperados, lo que no coincide con la regla actual de cambiar el orden.
Por lo tanto, estudiamos la posibilidad de cambiar el orden para que coincida con la temperatura del día en lugar de con la estación del año. Fue necesario saber la temperatura de los productos comprados en ese momento.
Como se dispone de una API web externa para comprobar la información meteorológica, planeamos recopilar la información meteorológica en el momento de la compra y registrarla en la base de datos.
Es muy sencillo, pero es necesario utilizar una “API web externa” para recoger la información, y se debe combinar la información obtenida y la de compra para registrarla en la base de datos.
Las instrucciones específicas se comentarán en un artículo relacionado (no incluye la creación de un sitio web). ¡Échale un vistazo!
En cuanto a la "API web externa" que estamos utilizando en esta ocasión, estamos usando los Datos meteorológicos actuales de OpenWeather.
(Si quieres probarlo, debes registrar una cuenta y obtener un ID de API ).
Lo siguiente es el resultado de una solicitud GET de un cliente REST (lo ejecutaremos en el mecanismo que implementaremos en Interoperabilidad).

El JSON de la respuesta HTTP es el siguiente:
{
"coord": {
"lon": 135.5022,
"lat": 34.6937
},
"weather": [
{
"id": 803,
"main": "Clouds",
"description": "broken clouds",
"icon": "04d"
}
],
"base": "stations",
"main": {
"temp": 17.05,
"feels_like": 13.33,
"temp_min": 16,
"temp_max": 18,
"pressure": 1017,
"humidity": 55
},
"visibility": 10000,
"wind": {
"speed": 4.63,
"deg": 70
},
"clouds": {
"all": 75
},
"dt": 1611635756,
"sys": {
"type": 1,
"id": 8032,
"country": "JP",
"sunrise": 1611612020,
"sunset": 1611649221
},
"timezone": 32400,
"id": 1853909,
"name": "Osaka",
"cod": 200
}
En el siguiente artículo, comentaremos cómo funciona el menú de Interoperabilidad para la integración del sistema.
¡Hola a tod@s!
Cuando hablo con alguien de perfil técnico por primera vez acerca de InterSystems IRIS, siempre comienzo hablando de que en el centro de todo InterSystems IRIS es una Base de Datos Multimodelo. En mi opinión, esta es la mayor ventaja (desde la visión de Sistemas de Bases de Datos), ya que:
Y en todos los casos, el dato está almacenado de forma única. ¡Tú eliges la manera en la que quieres acceder al mismo!!
De un primer vistazo es una bonita historia - corta, concisa y con un mensaje; pero cuando se empieza a trabajar con InterSystems IRIS, comienzan a surgir preguntas: ¿Cómo están relacionados las clases, las tablas y los globals? ¿Qué son cada uno para el otro? ¿Cómo se almacenan realmente los datos?
En este artículo voy a tratar de responder estas preguntas y explicar qué está pasando realmente.
Hola a todos,
Estoy creando un WS como servidor, pero a la hora de pedir el WSDL me está dando un error porque no encuentra la clase.
He añadido las siguientes intrucciones:
set ^SYS("Security","CSP","AllowClass","MiProyecto.MiClaseWS","%SOAP.WebServiceInfo")=1
set ^SYS("Security","CSP","AllowClass","MiProyecto.MiClaseWS","%SOAP.WebServiceInvoke")=1He creado una entrada en la configuracion de seguridad del WS.png)
En la solapa de Application Role he puesto los permisos de %All
(He puesto el Namespaces "Samples" en la imagen por motivos de seguridad)
¡Hola desarrolladores!
A menudo me preguntan cómo instalar IRIS, cómo conectarse a IRIS desde el IDE, cómo configurar el entono, compilar, depurar, mantener el repositorio...
Os muestro aquí posiblemente el camino más corto para configurar todo el entorno y empezar a desarrollar con ObjectScript en InterSystems IRIS.
Prerrequisitos
Asegúrate de tener Git, Docker y VSCode instalados.
Instala las extensiones de Docker y ObjectScript en VSCode.
(1).png)
Inicia sesión o crea una cuenta en Github.
¡Vamos allá!
Esta publicación es una guía cuya finalidad es implementar una arquitectura básica para DeepSee. Esta implementación incluye una base de datos para la memoria caché de DeepSee y otra base de datos para la configuración e implementación de DeepSee.

¡Hola desarrolladores!
Os invitamos a un nuevo webinar en español: "¿Qué necesitas para empezar con InterSystems IRIS y VS Code?", el miércoles 24 de marzo, a las 4:00 PM (CET).
“IRIS tiene buena pinta, pero no tengo ni idea... ¿por dónde empiezo?” o “Yo usaba Studio y programaba en Ensemble o Caché, pero esto del VS Code... ¿cómo se hace?”. Si te has hecho alguna de estas preguntas... ¡este es tu webinar!
Hola a todos Necesito ayuda con un tema de Iris y docker. Estoy empezando en el area del desarrollo web y a conocer esta plataforma de intersystems, y necesito poder levantar una app con angular y base de datos iris, en docker. Ya se como levantar crear la imagen de iris y dejarla corriendo pero aun no he logrado consumir recursos desde el front. Porfavor consejos.
Uno de los principales beneficios de ObjectScript es la velocidad y eficiencia que ofrece a un desarrollador experimentado. Veamos un ejemplo de todos los beneficios que se pueden obtener con ObjectScript.
Imagina que tienes una clase que almacena nombres de sus usuarios. Llamaremos a la clase **Data.User**, y le daremos las mismas propiedades que tiene una cadena _Name_. A continuación, necesitaremos un método para crear un nuevo usuario o actualizar uno ya existente. Un enfoque inexperto y simplista sería muy similar al siguiente ejemplo:
Estoy pensando en implementar Business Intelligence basada en los datos existentes en mis instancias. ¿Cuál es la mejor manera de configurar mis bases de datos y mi entorno para utilizar DeepSee?

Este es un resumen de un tema que aparece en varios lugares de la documentación en línea, sobre todo como observaciones, pero nunca como un capítulo dedicado.
Érase una vez... No, no es un cuento para niños.
En los comienzos de Caché (y antes), tenías tu partición para ejecutar tu código. Parte de esa partición era un espacio con todas tus variables locales bien ordenadas según %,A,..Z,a,...z
En este artículo me gustaría contarle acerca de las macros en InterSystems Caché. Una macro es un nombre simbólico que se reemplaza con un conjunto de instrucciones durante la compilación. Una macro puede "desplegarse" en varios conjuntos de instrucciones cada vez que se llama, dependiendo de los parámetros que se le pasen y los escenarios activados. Esto puede ser tanto código estático como el resultado de la ejecución de ObjectScript. Echemos un vistazo a cómo puede usarlos en su aplicación.

Para empezar, veamos cómo se compila el código ObjectScript:
Como mencioné antes, una macro es un nombre simbólico que se reemplaza por el preprocesador con un conjunto de instrucciones. Una macro se define con la ayuda del comando #Define seguido del nombre de la macro (quizás con una lista de argumentos) y su valor:
#Define Macro[(Args)] [Value]¿Dónde se pueden definir las macros? Ya sea en el código o en forma independiente en archivos INC que contiene solo macros. Los archivos necesarios se incluyen en las clases al comienzo de las definiciones de clase utilizando el comando Include MacroFileName - este es el método principal y preferido para incluir macros en clases. Las macros incluidas de esta manera se pueden usar en cualquier parte de una clase. Puedes usar el comando #Include MacroFileName para incluir un archivo INC con macros en rutinas MAC o el código de métodos de clase particulares.
Tenga en cuenta que los generadores de métodos requieren #Include dentro de su propio cuerpo si quieres usar macros en tiempo de compilación o uso de la palabra clave IncludeGenerator en una clase.
Para hacer que la macro esté disponible en el autocompletado de estudio, agregue /// en una línea anterior:
/// #Define Macro[(Args)] [Value]
Ejemplo 1
Pasemos ahora a algunos ejemplos, y ¿por qué no comenzamos con el mensaje estándar "Hello, World!"? Código COS:
Write "Hello, World!"Crearemos una macro llamada HW que escribirá esta línea:
#define HW Write "Hello, World!"
Todo lo que necesitamos hacer ahora es escribir $$$HW ($$$ para llamar a la macro, luego su nombre):
ClassMethod Test()
{
#define HW Write "Hello, World!"
$$$HW
}Se convertirá en el siguiente código INT durante la compilación:
zTest1() public {
Write "Hello, World!" }El siguiente texto se mostrará en la terminal cuando se llame a este método:
Hello, World!
Ejemplo 2
Usemos variables en el siguiente ejemplo:
ClassMethod Test2()
{
#define WriteLn(%str,%cnt) For ##Unique(new)=1:1:%cnt { ##Continue
Write %str,! ##Continue
}
$$$WriteLn("Hello, World!",5)
}
Aquí la cadena %str está escrita %cnt veces. Los nombres de las variables deben comenzar con %. El comando ##Unique(new) crea una nueva variable única en el código generado, mientras que el comando ##Continue nos permite continuar definiendo la macro en la siguiente línea. Este código se convierte en el siguiente código INT:
zTest2() public {
For %mmmu1=1:1:5 {
Write "Hello, World!",!
} }El terminal mostrará lo siguiente:
Hello, World! Hello, World! Hello, World! Hello, World! Hello, World!
Ejemplo 3
Pasemos a los ejemplos más complejos. El operador ForEach puede ser muy útil para iterar a través de globals, creémoslo:
ClassMethod Test3()
{
#define ForEach(%key,%gn) Set ##Unique(new)=$name(%gn) ##Continue
Set %key="" ##Continue
For { ##Continue
Set %key=$o(@##Unique(old)@(%key)) ##Continue
Quit:%key=""
#define EndFor }
Set ^test(1)=111
Set ^test(2)=222
Set ^test(3)=333
$$$EachFor(key,^test)
Write "key: ",key,!
Write "value: ",^test(key),!
$$$EndFor
}
Así es como se ve en el código INT:
zTest3() public {
Set ^test(1)=111
Set ^test(2)=222
Set ^test(3)=333
Set %mmmu1=$name(^test)
Set key=""
For {
Set key=$o(@%mmmu1@(key))
Quit:key=""
Write "key: ",key,!
Write "value: ",^test(key),!
} }¿Qué está pasando en estas macros?
El terminal muestra lo siguiente cuando se llama a este método:
key: 1 value: 111 key: 2 value: 222 key: 3 value: 333
Si está utilizando listas y matrices heredadas de la clase %Collection.AbstractIterator, puede escribir un iterador similar para ello.
Ejemplo 4
Otra capacidad de las macros es la ejecución de código arbitrario de ObjectScript en la etapa de compilación y la sustitución de sus resultados en lugar de una macro. Creemos una macro para mostrar el tiempo de compilación:
ClassMethod Test4()
{
#Define CompTS ##Expression("""Compiled: " _ $ZDATETIME($HOROLOG) _ """,!")
Write $$$CompTS
}Que se transforma en el siguiente código INT:
zTest4() public {
Write "Compiled: 18.10.2016 15:28:45",! }El terminal mostrará la siguiente línea cuando se llame a este método:
Compiled: 18.10.2015 15:28:45
##Expression ejecuta el código y sustituye el resultado. Los siguientes elementos del lenguaje ObjectScript se pueden utilizar para la entrada:
Ejemplo 5
Directivas del pre procesador #If, #ElseIf, #Else, #EndIf se utilizan para seleccionar el código fuente durante la compilación, según el valor de la expresión que sigue una directiva. Por ejemplo, este método:
ClassMethod Test5()
{
#If $SYSTEM.Version.GetNumber()="2016.2.0" && $SYSTEM.Version.GetBuildNumber()="736"
Write "You are using the latest released version of Caché"
#ElseIf $SYSTEM.Version.GetNumber()="2017.1.0"
Write "You are using the latest beta version of Caché"
#Else
Write "Please consider an upgrade"
#EndIf
}Se compilará en el siguiente código INT en Caché versión 2016.2.0.736:
zTest5() public {
Write "You are using the latest released version of Caché"
}Y lo siguiente se mostrará en la terminal:
You are using the latest released version of Caché
Si usamos Caché descargado del portal beta, el código INT compilado tendrá un aspecto diferente:
zTest5() public {
Write "You are using the latest beta version of Caché"
}Lo siguiente se mostrará en la terminal:
You are using the latest beta version of Caché
Las versiones anteriores de Caché compilarán el siguiente código INT con una sugerencia para actualizar el programa:
zTest5() public {
Write "Please consider an upgrade"
}El terminal mostrará el siguiente texto:
Please consider an upgrade
Esta capacidad puede ser útil, por ejemplo, en situaciones en las que desea garantizar la compatibilidad de la aplicación cliente con versiones anteriores y nuevas, donde se pueden utilizar las nuevas características de Caché. Directivas del pre procesador #IfDef, #IfNDef tienen el mismo propósito al verificar la existencia o ausencia de una macro, respectivamente.
Las macros pueden hacer que su código sea más legible al simplificar las construcciones de uso frecuente y ayudarlo a implementar parte de la lógica de negocios de su aplicación en la etapa de compilación, reduciendo así la carga en tiempo de ejecución.
¡Hola a todos!
Hoy hablaremos de cómo cargar un modelo de Machine Learning en IRIS y cómo probarlo, a través de un artículo genial de Niyaz Khafizov.
Nota: lo siguiente se realizó utilizando Ubuntu 18.04, Apache Zeppelin 0.8.0 y Python 3.6.5.
(La guía definitiva sobre $zv para la galaxia ISC en palabras sencillas y entendibles).
¡Hola Comunidad!
Ahora que la plataforma de datos InterSystems IRIS Data Platform Community Edition está disponible en Docker Hub, parece el momento ideal de probar InterSystems IRIS en un contenedor. Desde hace un tiempo, la Community Edition ha estado disponible en la nube, por ejemplo en AWS, pero podría ser interesante probarla localmente también. Los usuarios de Windows estamos acostumbrados a ver caras de desconfianza y escuchar que "nuestros resultados podrían variar" cada vez que mencionamos usar Docker para Windows. A veces incluso nos dicen que realmente deberíamos considerar ejecutar Docker dentro de máquinas virtuales con Ubuntu. Pfff... ![]()
¡Hola Comunidad!
Este breve documento describe los pasos para iniciar IRIS community edition usando Docker en MAC. Para quienes sean nuevos con Docker, primero se explica cómo instalar Docker y ejecutar algunos comandos básicos necesarios para poner en funcionamiento IRIS community edition. Los usuarios con más experiencia en Docker pueden saltarse esa parte.

Para aquellos expertos que no pueden parar después del concurso "Advent of Code" (AoC2019), he publicado un código bastante antiguo en estilo tradicional para mejorarlo.
Fue escrito en base a una prueba previa en .XLS. Está lejos de ser perfecto. Es más bien un desafío para mejora en todas las direcciones (código, interfaz, ...). Así que cualquiera está invitado a mejorarlo.
¡Hola a tod@s!
En las partes anteriores (1, 2) de este artículo, hablamos de Globals como árboles. En esta tercera parte, los veremos como matrices dispersas.
Una matriz dispersa es un tipo de matriz donde la mayoría de los valores asumen un valor idéntico.
En la práctica, a menudo veréis matrices dispersas tan grandes que no tiene sentido ocupar memoria con elementos idénticos. Por lo tanto, tiene sentido organizar matrices dispersas de tal manera que no se desperdicie memoria al almacenar valores duplicados.
En algunos lenguajes de programación, las matrices dispersas son parte del lenguaje (por ejemplo, en J, MATLAB). En otros lenguajes, hay bibliotecas especiales que permiten usarlas. Para C ++, esos serían Eigen y similares.
Los Globals son buenos candidatos para implementar matrices dispersas por las siguientes razones:
Principiantes- ver Parte 1.

Una estructura, como un árbol ordenado, tiene varios casos especiales. Echemos un vistazo a aquellos que tienen un valor práctico para trabajar con globals.
Los globals pueden usarse no solo como una matriz, sino como variables regulares. Por ejemplo, para crear un contador:
¡Hola a tod@s!
En este artículo voy a hablar sobre los Globals, esas espadas mágicas para almacenar datos, que han estado con nosotros desde hace tiempo, pero no mucha gente las utiliza de forma eficiente o realmente conoce esta súper herramienta.
Si se utilizan globals para realizar las tareas en donde realmente brillan, los resultados pueden ser sorprendentes, ya sea en términos de un mayor rendimiento o en una simplificación drástica de la solución en general (1, 2).
Globals ofrecen una forma especial de almacenar y procesar datos, la cual es completamente diferente de las tablas SQL. Se introdujeron por primera vez en 1966 con el lenguaje de programación M(UMPS), donde inicialmente se utilizaron en las bases de datos médicas. Todavía se usan de la misma manera, pero también fueron adoptados por otras industrias donde la confiabilidad y el alto rendimiento son la máxima prioridad (como en las finanzas, las operaciones comerciales, etc.)
¡Hola Comunidad!
En esta serie de artículos, me gustaría presentar y discutir varios métodos posibles para el desarrollo de software con las tecnologías de InterSystems y GitLab. Trataré temas como:
Todo el mundo tiene un entorno para realizar pruebas.
Algunas personas tienen la suerte de tener un entorno totalmente separado para Producción.
-- Anónimo
.
En esta serie de artículos, me gustaría presentar y discutir varios métodos posibles para el desarrollo de software, con las tecnologías de InterSystems y GitLab. Trataré temas como:
En esta primera parte se abordará la piedra angular del desarrollo de software moderno - el sistema de control de las versiones de Git y varios flujos de Git.
¡Hola Desarrolladores!
Esta es la segunda publicación sobre recursos para desarrolladores. Esta parte es sobre Open Exchange.
Utilizando Open Exchange para avanzar en la tecnología de InterSystems
InterSystems Open Exchange es una galería de herramientas de aplicaciones, conectores y librerías, que los desarrolladores de InterSystems publican para compartir formas de trabajar, enfoques y hacer negocio. Todas las aplicaciones están o construidas con InterSystems Data Platform o pensadas para ser usadas en desarrollos con nuestra tecnología.
¡Hola a tod@s, programadores deseosos de aprender!
Hace poco, un desarrollador que está empezando a utilizar la tecnología de InterSystems me preguntó cómo podía aprender en la Comunidad de Desarrolladores, para mejorar sus conocimientos de programación.
Y me pareció una muy buena pregunta. A la que podía responder con varias opciones. Por eso decidí escribir este artículo, esperando que sea de utilidad no solo para ese desarrollador, sino para otros muchos más.
Así que la pregunta era... ¿Cómo aprender sobre Intersystems IRIS e IRIS for Health en la Comunidad de Desarrolladores?
¡Hola chicos!
Como saben, hay dos (al menos) formas de obtener el valor almacenado de una propiedad de una clase InterSystems IRIS si se conoce el ID de una instancia (o un registro).
1. Obtenerlo mediante la propiedad de una instancia con "Acceso a objetos":
ClassMethod GetPropertyForID(stId As %Integer) As %String
{
set obj=..%OpenId(stId)
return obj.StringData
} +++ ++
2. Obtenerlo mediante una columna del registro con "acceso SQL":
ClassMethod GetColumnForID(stId As %Integer) As %String
{
&sql(select StringData into :sd from Ideal.StoredData where id = :stId)
return sd
}Hola a todos,
En este artículo voy a hacer un paso a paso desde cero para la creación de una simple API REST mediante Node/Express conectada a una instancia de InterSystems IRIS.
No voy a adentrarme en mucho detalle acerca de cómo trabajar con cualquiera de las tecnologías que menciono en el tutorial, pero dejaré enlaces a documentación adicional por si quieres aprender más. El objetivo es proporcionar una guía práctica de cómo configurar y conectar un backend node.js a InterSystems IRIS.
¡Hola Comunidad!
Les dejo una guía para principiantes sobre todo lo que necesitan saber del diseño y la documentación de la Interfaz de programación para aplicaciones (API) RESTful. Mediante este ejemplo aprenderán algunos de los patrones más comunes de la API RESTful.
¡Espero que les sea útil!
¡Hola Comunidad!
Echad un vistazo al nuevo vídeo "Coding Talk" ("Charlas sobre programación") en el Canal de YouTube de la Developer Community:
En este video, presentado por @Evgeny Shvarov, aprenderás a crear clases de InterSystems ObjectScript, ejecutarlo en un contenedor docker con InterSystems IRIS Community Edition, editarlo y compilarlo en Visual Studio Code y, por último, subirlo a Github.
Además...
Ya está disponible la edición gratuita de InterSystems IRIS (InterSystems IRIS Community Edition) en la nube de AWS
¡Hola a tod@s!,
Es muy común que gente nueva usando InterSystems IRIS quiera comenzar a experimentar y trabajar en algún proyecto personal en un entorno gratuito. Si eres uno de ellos, ¡tenemos buenas noticias para ti!! Ya puedes usar la a edición gratuita de InterSystems IRIS (InterSystems IRIS Community Edition) en la nube de AWS.
Hola a todos,
He creado un método para calcular la edad de una persona, o la edade de un porceso, contrato o cualquier otra cosa que quieras.