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.

0
0 0
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 namespace.

0
0 174
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).

Para este ejemplo he creado una tarea que ejecuta este código:

0
0 162
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!
 

0
0 234
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:

0
0 197
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

0
0 94
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 83
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 56
Artículo Daniel Aguilar · nov 8, 2023 8m read

    

 

Hola, comunidad!

Después de crear la appIrisApiTester, 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?
0
1 95
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 381
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.html

Luego en Postman, añade algunos test a tu colección:

1
0 198
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 270
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:

2
0 262
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!

0
0 222
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

5
0 562
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:

 

2
0 214
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!!.

1
0 113
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.5)  que he hecho (está dentro de la carpeta dll del repositorio)

0
0 951
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.Adapter pero si sobreescribo la propiedad sigue haciendo lo mismo, ejemplo:

4
0 255
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

4
0 174
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 373