Artículo Daniel Aguilar · nov 11, 2024 4m read

 

Hola comunidad,

Quería compartir con vosotros la última aplicación que he publicado en el Open Exchange: "IrisGoogleChat".

Es una utilidad para InterSystems IRIS que permite enviar mensajes a un canal de Google Chat mediante ObjectScript. Esta aplicación provee una colección de utilidades para configurar Canales de Google Chat, crear mensajes potenciados con "estados de humor" con IA y enviarlos a un canal de Google Chat.

Para proveer un estado de humor a tus mensajes será necesario que dispongas de un API Key y un ID de organización de OpenAI Chat GPT.

0
0 83
Pregunta Daniel Aguilar · jul 10, 2024

Buenas tardes,

Estoy intentando arrancar una instancia de la Community Edition con Docker y me da el siguiente error. 

He probado a descargar directamente el template de object-script del OpenExchange, pero me pasa siempre una de estas dos cosas:

 

1 - Se queda iniciando eternamente

[+] Building 147.
3
0 202
Artículo Daniel Aguilar · mayo 19, 2024 4m read

   

 

📜 Santa Tecla, versículo 8: "Extiende tu ratón sobre la pantalla, y el mar de datos abrirá un sendero delante de ti!!"

 

Hola comunidad, lo primero perdón si a alguien le ha ofendido la blasfemia 😔 

 

¿Alguna vez has pensado que sería interesante tener separado el código fuente de los datos de la base de datos?. Quizás te gustaría poder hacer copias de seguridad de tu código sin tener que copiar gigas de información de los datos de tus clientes.

 

A continuación os explico los pasos para separar en 2 bases de datos distintas vuestro mar formado por el código fuente y los datos de un

0
1 234
Artículo Daniel Aguilar · mar 22, 2024 4m read

 

Hola Comunidad!

 

¿Normalmente trabajas con tareas automáticas? Entonces permíteme que comparta contigo un par de consejos ;-)

 

 

Consejo 1: Como conocer cuando una tarea terminará (aproximadamente):

 

Imagina que tienes una tarea ejecutándose y te encuentras en la encrucijada de decidir si paras la tarea porque está afectando a otro proceso o la dejas terminar porque puede que le queden solo 5 o 10 minutos.

 

Aqui tienes una manera para comprobar cuando terminará tu tarea (aproximadamente).

1
1 176
Artículo Daniel Aguilar · feb 4, 2024 7m read

         

 

Hola, comunidad!

He estado trasteando últimamente con Flutter y he desarrollado algunas aplicaciones que usan Firebase como base de datos. Cuando descubría que existía una librería de Firebase para Python, tuve el impulso de que debía crear algo con InterSystems IRIS que pudiese hacer que se comunicase con Firebase Database RealTime y realizar operaciones CRUD. Justo entonces me encontré con esta idea de Evgeny en el portal de ideas:

 

https://ideas.intersystems.com/ideas/DP-I-146 

 

Y me puse manos a la obra!
 

¿Tienes curiosidad por ver que he creado?

0
0 273
Artículo Daniel Aguilar · dic 13, 2023 2m read

Preguntas frecuentes de InterSystems

Se puede obtener usando el comando Size query de la clase del sistema %SYS.GlobalQuery.

 

A continuación os dejo unos ejemplos de uso.

*Por favor comprueba la documentación de la clase para ver el detalle de las columnas y parámetros.

 

 set dir="C:\intersystems\iris\mgr\user" // IRIS.DAT(or CACHE.DAT) folder
 set rs = ##class(%ResultSet).%New("%SYS.GlobalQuery:Size")
 do rs.Execute(dir) // You can also specify a mask with the 3d parameter
 while (rs.Next()) { 
   set gname= rs.Get("Name") // global name
   set gsize= rs.
1
0 152
Artículo Daniel Aguilar · dic 11, 2023 8m read

InterSystems IRIS tiene un excelente soporte en operaciones de encriptación, desencriptación y hacina. Dentro del manual de la clase %SYSTEM.Encryption existen métodos para el uso de los principales algoritmos del mercado.

Algoritmos y tipos de Encriptación/Desencriptación de IRIS

Como puedes comprobar, las operaciones están basadas en claves y incluyen 3 opciones:

  • Symmetric Keys:  Las partes que realizan operaciones de cifrado y descifrado comparten la misma clave secreta.
0
0 241
Artículo Daniel Aguilar · dic 11, 2023 1m read

Preguntas frecuentes de InterSystems

La cache de las consultas SQL puede ser purgada mediante programación usando el método Purge* de la clase %SYSTEM.SQL.

*Para ver el detalle de cada uno de los métodos, por favor consulta los siguientes enlaces:

%SYSTEM.SQL class【IRIS】

%SYSTEM.SQL class

 

① Comando para borrar todas las consultas SQL cacheadas en el sistema

Do $SYSTEM.SQL.PurgeAllNamespaces()


② Comando para borrar las consultas SQL cacheadas en el namespace actual

// borra todas las consultas SQL cacheadas en el namespace actual
Do $SYSTEM.SQL.
0
0 131
Artículo Daniel Aguilar · nov 25, 2023 1m read

Preguntas frecuentes de InterSystems

Puedes establecer el tamaño máximo de la base de datos IRISTemp en el arranque de IRIS configurando el parámetro MaxIRISTempSizeAtStart.

Después de configurarlo, el sistema truncará IRISTemp al valor establecido (MB) en el siguiente inicio de IRIS. Si el tamaño actual es inferior al especificado MaxIRISTempSizeAtStart, no realizará el truncado. Si se especifica el valor 0 no se realizará el truncado nunca.

Puedes configurarlo en el siguiente menú.

1
0 110
Artículo Daniel Aguilar · nov 24, 2023 1m read

Necesitaba averiguar en tiempo de ejecución si el último test había fallado o no.
 

Después de investigar un poco, aquí está el código:

ClassMethod isLastTestOk() As %Boolean
{
  set in = ##class(%UnitTest.Result.TestInstance).%OpenId(^UnitTest.Result)
  for i=1:1:in.TestSuites.Count() {
    #dim suite As %UnitTest.Result.TestSuite
    set suite = in.TestSuites.GetAt(i)
    return:suite.Status=0 $$$NO
  }
  quit $$$YES
}
0
0 68
Artículo Daniel Aguilar · nov 8, 2023 8m read

    

 

Hola, comunidad!

 

Después de crear la app IrisApiTester, me di cuenta que podría tener mas potencial, y que con algunos ajustes, podría convertirse en una poderosa herramienta colaborativa.

Me pregunté a mi mismo:

  • ¿Podría compartir la colección con un equipo de desarrolladores?
  • ¿Podría usarlo para realizar test unitarios?
  • ¿Y test de integración?
  • ¿Y si le añadiésemos una capa de CI/CD?

 

Después de pensar esto, me decidí a intentarlo. Y descubría que todas las respuestas fueron afirmativas (con algunos matices xD).

0
1 122
Artículo Daniel Aguilar · sep 19, 2023 3m read

Hola Comunidad!

He publicado una nueva versión de IrisApiTester, he incluido algunas nuevas opciones:

  • Repositorio externo: Añadida la posibilidad de usar una colección de Postman alojada en un repositorio de Github o Bitbucket para evitar tener que exportar ficheros y arrastrarlos manualmente a la web.
  • Pull and Run: Creado nuevo endpoint que realiza automáticamente un pull del repositorio configurado y lanza los test automáticamente.
  • Unit Testing / Integration Test: Añadido un ejemplo de como se podría usar IrisApiTester para realizar test unitarios o de integración.
0
0 97
Artículo Daniel Aguilar · jul 3, 2023 2m read

Hola Comunidad!

Voy a explicaros por encima cómo crear test en colecciones de Postman para usarlos en la app IRIS Api Tester.

 

Ok, pero.. ¿qué es Newman?

Newman es una herramienta de línea de comandos que nos permite ejecutar colecciones de Postman de un modo automático y escalable. Creando test en Newman, puedes asegurar la estabilidad de las colecciones en tus API endpoints. En este artículo, vamos a descubrir como crear test para Newman desde Postman, con unos ejemplos prácticos.

1
0 448
Artículo Daniel Aguilar · jul 3, 2023 3m read

Hola Comunidad!!

Acabo de subir mi última aplicación "IRIS Api Tester" al Open Exchange.

Es un proyecto docker con InterSystems IRIS + Newman que permite lanzar test sobre tus colecciones de Postman de una manera rápida y fácil.

El proyecto viene listo para funcionar, solo debes clonar el repositorio: https://github.com/daniel-aguilar-garcia/irisapitester

Arrancar el fichero docker-compose:

Abrir esta url en tu navegador:

http://localhost:52773/csp/user/index

1
0 224
Artículo Daniel Aguilar · jun 26, 2023 9m read

 

¡Hola Comunidad!

¿Habéis tenido que conectar alguna vez IRIS con un sistema SAP?

Tuve que enfrentarme al reto de conectar InterSystems IRIS con SAP, y una vez más pude comprobar el gran acierto que hizo InterSystems añadiendo la posibilidad de ejecutar código nativamente de Python desde IRIS.

Esto me hizo la integración muy fácil gracias a la librería  pyrfc.

Con esta librería, fui capaz de realizar llamadas a RFC's de SAP (Remote Function Call) desde una clase de IRIS y recibir datos de la base de datos de SAP.

1
0 348
Artículo Daniel Aguilar · jun 12, 2023 3m read

ZPM está diseñado para funcionar con aplicaciones y módulos de InterSystems IRIS. Está formado por dos  componentes: el Cliente ZPM, que es un CLI para gestionar módulos; y El Registro, que es una base de datos de módulos y meta-información. Podemos utilizar ZPM para buscar, instalar, actualizar, eliminar y publicar módulos. Con ZPM se pueden instalar clases de ObjectScript, aplicaciones Frontend, producciones de Interoperabilidad, soluciones de BI de IRIS, conjuntos de datos de IRIS o cualquier otro archivo, como paquetes wheel de Python Embebido. 

En este artículo repasaremos tres secciones:

  1. Instalación de ZPM
  2. Generación del Módulo
  3. Búsqueda, Instalación y Publicación de módulos dentro del Registro
2
0 320
Artículo Daniel Aguilar · mar 18, 2023 4m read

Una de las razones por las que me encantan Cache e IRIS es que no solo puedes hacer cualquier cosa que puedas imaginar, sino que también puedes hacerlas de un montón de maneras diferentes!!

Imagina que tienes una integración con IRIS (o Cache) funcionando conectada por ODBC. Probablemente solo uses consultas SQL, pero puedes usar también procedimientos almacenados y dentro de su código puedes hacer cualquier cosa que puedas imaginar.

Voy a darte algunos ejemplos, pero el límite está en tu imaginación!

 

Quizás te estés diciendo... ¡espera!! Yo no sé como crear un procedimiento almacenado en IRIS... Pero eso no es cierto, sabes crearlo! Lo que pasa que todavía no lo sabes...

0
0 318
Artículo Daniel Aguilar · feb 13, 2023 6m read

 

Hola! recientemente tuve que aplicar validación api-key a un desarrollo que teníamos hecho con un montón de endpoints y me he decidido a compartir con vosotros como lo llevé a cabo de una forma centralizada.

En este artículo os voy a explicar como podemos aplicar de una forma genérica (o no) validación api key a todos los endpoints de nuestra Web App.

Para el desarrollo utilicé la clase Base.cls de la plantilla iris-rest-api-template

La cual modifiqué un poco para que se adaptase a lo que necesitaba. La idea es que en vuestros desarrollos copiéis la clase Base.

5
0 610
Artículo Daniel Aguilar · feb 5, 2023 2m read

Hola Comunidad!

Quiero compartir con vosotros mi primera aplicación del Open Exchange.

Es una herramienta para hacernos los desarrollos mas fáciles. Es un microservicio con IRIS en un docker que nos ayuda en los desarrollos de campañas de SMS, Mail y en los links para las tiendas de nuestras apps brindándonos un acortador de Url's.

Es muy fácil de usar.

Simplemente clona este repo:

https://github.com/daniel-aguilar-garcia/cos-url-shortener.git

 

Abre la carpeta en VSCode y arranca el docker:

 

 

Después de esto, podrás crear versiones cortas de cualquier link via petición http.

2
0 246
Artículo Daniel Aguilar · oct 10, 2022 3m read

Hola desarrolladores!,

Ya se lo que estáis pensando. " Una mejora para ZEN.proxyObject...??? ¿Ahora...????

Bueno en España tenemos el dicho de mas vale tarde que nunca.  ;-)

¿Alguna vez has necesitado enviar un atributo numérico de un JSON en formato String?

¿Te volviste loco casteando objetos de clases con propiedades fijas y tipadas?

Pues estás de enhorabuena!! porque ahora podrás hacerlo fácilmente!!.

Con esta nueva mejora os propongo una forma en la que podamos continuar trabajando con nuestros amados objetos

1
0 138
Artículo Daniel Aguilar · feb 25, 2022 6m read

Hola!

Llevaba un tiempo queriendo dedicarle un rato para implementar alguna DLL o algo que pudiese usar desde Caché y al final he sacado un huequillo, si te interesa poder producir mensajes que se envíen a Kafka de una manera rápida estás en el lugar adecuado ;-)

Antes de daros la chapa con lo que vamos a ver os hago un resumen para que decidáis si os puede interesar leer el artículo.

En este artículo nos vamos a centrar "solo" en la parte de producir mensajes y enviarlos a Kafka:

¿Cómo funciona?

Uso una DLL de .Net (Netframework 4.

0
0 1012
Pregunta Daniel Aguilar · oct 20, 2020

Buenas tardes, 

Hace ya tiempo que tengo esta duda y no sé si alguno sabrá la respuesta. Cuando realizo un insert por SQL desde una aplicación externa en los campos de tipo %String si están vacíos me graba el caracter $c(0) en el global. 

Revisando la documentación he visto que existe una propiedad para las clases que extienden de %XML.Adapter que si sobreescribes el parametro XMLIGNORENULL = 1 puedes hacer que guarde cadenas vacías en lugar de nulos.

He intentado hacer que mis clases extiendan de %XML.

4
0 269
Pregunta Daniel Aguilar · sep 8, 2020

Buenas tardes estamos probando a actualizar una versión 2014 a la 2018 para posteriormente actualizar a la versión 2019 y nos hemos encontrado con este problema al pasar de la 2014 a la 2018.

Tras actualizar si ejecutamos una Query de actualización desde el portal nos da el siguiente error:

 

He comprobado que si desde el Studio compilo la clase este error desaparece. He podido comprobar que en la clase .int que contiene la compilada tiene un parámetro menos %ouid

He intentado recompilar todas las clases desde un terminal ejecutando  do $SYSTEM.OBJ.

4
0 190
Pregunta Daniel Aguilar · sep 1, 2020

Buenas tardes, estamos probando la migración a la versión de IRIS porque queríamos aprovechar el poder trabajar con el plugin Insertystems ObjectScript de Visual Studio Code para control de versiones pero haciendo pruebas veo lo siguiente:

Nosotros tenemos muchísimas clases y rutinas en nuestros namespaces y cuando hago un cambio de rama en VSCODE para que los cambios se graben en el lado servidor hay que pulsar en Importar y Compilar el namespace completo a fin de que los cambios de la nueva rama queden grabados en el servidor (Este proceso le puede costar fácilmente 20 minutos y no aporta

2
0 1925
Artículo Daniel Aguilar · feb 24, 2020 6m read

El tema del rendimiento de los bucles for/while en Caché ObjectScript surgió recientemente en una discusión, y me gustaría compartir algunas ideas/prácticas recomendadas con el resto de la comunidad. Aunque este es un tema básico por sí mismo, es útil conocer con cuales se obtiene un mayor rendimiento.

En resumen, las opciones más rápidas son los bucles que se iteran por $ListBuild, las listas que se forman con $ListNext o sobre un conjunto local mediante $Order.

Por ejemplo, consideraremos iterar un bucle por cada elemento de una cadena delimitada por comas.

1
0 389