Buscar

Limpiar filtro
Artículo
Esther Sanchez · 30 jun, 2021

¿Cómo aprender en la Comunidad de Desarrolladores? Parte 1

¡Hola desarrolladores! En este artículo, me gustaría mostraros cómo aprovechar algunas de las opciones y funcionalidades de la Comunidad, para aprovecharla al máximo y aprender todo lo posible de los expertos en la tecnología de InterSystems! ¡Echa un vistazo a estos sencillos pasos para convertirte en un super usuario de la Comunidad! Sigue a los miembros de la Comunidad que te interesen Puedes seguir a cualquier miembro de la Comunidad del que te interese el contenido que publica. Para seguirle, solo tienes que hacer clic en su nombre y accederás a su perfil. En la barra lateral de la derecha, haz clic en el botón "Seguir" y recibirás una notificación por email cada vez que publique algo (un artículo, una pregunta, un anuncio...) en la Comunidad. También, dentro del menú principal en la página de inicio de la Comunidad, puedes hacer clic en "Miembros" y buscar a una persona en concreto, o a las personas con más visualizaciones de sus publicaciones... para empezar a seguirles. Sigue las etiquetas que te interesen Todas las etiquetas con las que se describen las publicaciones de la Comunidad se encuentran en el menú "Publicaciones" en la página de inicio de la Comunidad, aquí: Si te interesa un tema en concreto, puedes buscar su etiqueta en el listado de Etiquetas, seleccionarla y hacer clic en el botón "Seguir" que aparece a su lado. Cuando sigues una etiqueta, recibirás en tu correo electrónico todas las publicaciones que tengan esa etiqueta. Puede ser muy útil seguir las etiquetas "Mejores prácticas" o "Consejos y trucos". Sigue las publicaciones que te interesen También puedes seguir las publicaciones que te interesen. Así, recibirás en tu correo electrónico los comentarios que obtenga esa publicación, o si se publica una segunda parte, o cualquier otra acción relacionada con la publicación a la que te suscribes. Para seguir una publicación, solo tienes que hacer clic en la campana situada debajo de cada publicación: -> ¿Cómo sé qué miembros, etiquetas y publicaciones sigo? Para saber los miembros, las etiquetas y las publicaciones a las que sigues, solo tienes que ir a tu cuenta, en la parte superior derecha de la Comunidad: y después ir a "Suscripciones" en la columna de la izquierda. En la parte de abajo de esa página hay un cuadro con tres pestañas - cada una muestra los miembros, las etiquetas y las publicaciones que sigues. Por ejemplo, yo sigo a David Reche y las etiquetas "Mejores prácticas" y "Consejos y trucos": Nota.- si quieres seguir etiquetas o miembros en otros idiomas, aparecerán en tu perfil de la Comunidad en ese idioma. Para acceder a él, tienes que ir al selector de idiomas de la Comunidad, en la parte superior derecha, al lado de tu cuenta; haz clic en ES para desplegar los distintos idiomas, y luego haz clic en el idioma en el que quieres seguir etiquetas, miembros o publicaciones: Accederás a la Comunidad en ese idioma y, desde ahí puedes repetir los pasos anteriores para empezar a seguir miembros, etiquetas y publicaciones en otros idiomas. Añade publicaciones a favoritos Si te gusta mucho una publicación y te puede resultar útil consultarla de vez en cuando, puedes añadirla a tu listado de publicaciones favoritas donde la encontrarás siempre que la necesites, de forma rápida y sencilla. Para añadir una publicación a tu lista de favoritos, solo tienes que hacer clic en la estrella situada debajo de cada publicación: Y para acceder a tu listado de favoritos, solo tienes que ir a tu cuenta: y después ir a "Favoritos" en la columna de la izquierda. Ahí estarán todas tus publicaciones guardadas. Así que ya podéis empezar a usar todas las funcionalidades que ofrece la Comunidad de Desarrolladores, para convertiros en expertos en la tecnología de InterSystems! Si tenéis alguna duda sobre cómo funciona la Comunidad de Desarrolladores o queréis compartir algún consejo sobre cómo aprender mejor en ella, dejad vuestros comentarios más abajo. ¡Os leemos!
Artículo
Ricardo Paiva · 20 ene, 2020

Puesta en funcionamiento de IRIS usando Docker

¡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. Obtener Docker Desktop para MAC. Éste se puede descargar desde Docker Hub, pero revise primero todos los requerimientos antes de descargarlo para estar seguro de que funcionará correctamente. Puede encontrar las instrucciones y el enlace de descarga aquí: https://docs.docker.com/docker-for-mac/install/ Las instalaciones de Docker en Windows requieren Docker Toolbox, ya que Docker no puede ejecutarse de forma nativa en Windows. Docker Toolbox crea una máquina virtual sobre la que los usuarios de Windows pueden ejecutar Docker. Los usuarios de Windows deben seguir las instrucciones del sitio web de Docker: https://hub.docker.com/editions/community/docker-ce-desktop-windows Pruebe con Docker. El primer comando lógico es determinar qué imágenes de docker se encuentran en el repositorio local. En el terminal de Mac, escriba: docker images. En esta etapa no encontrará nada, pero podrá ver los siguientes encabezados: Repository, Tag, Image ID, Created y Size. Ahora, para ejecutar un contenedor de prueba, escriba lo siguiente en la línea de comandos: docker run busybox:1.24 echo “hello world”. Como la imagen de busybox no se encontró en el repositorio de docker, se "extrajo" (pull) del hub docker, y el comando echo se ejecutó en el contenedor, para imprimir "hola mundo" en la línea de comandos. Ahora pruebe a ejecutar docker images otra vez. Ahora debería ver la imagen de busybox en el repositorio local. Al usar Docker, es importante especificar tanto el nombre de la imagen como la etiqueta, separándolas con dos puntos. Esto permite a docker saber qué versión de la imagen ejecutar (p. ej. busybox:1.24). Cuando hay un contenedor local, no se volverá a descargar. Pruebe a ejecutar otro comando en la imagen de Docker. Escriba docker run busybox:1.24 ls /. Debería ver un listado de los directorios y archivos en la raíz del contenedor. Al ejecutar un contenedor, hay dos opciones importantes. La marca -I inicia un contenedor interactivo, y la marca -t crea un pseudo TTY que adjunta stdin y stdout. Escriba esto: docker run -i -t busybox:1.24. Ahora podrá ejecutar comandos en el intérprete del contenedor, incluyendo añadir archivos. Si escribe exit, saldrá del contenedor y lo apagará. Perderá cualquier archivo creado mientras estuviera en el contenedor. Los contenedores normalmente se ejecutan en segundo plano (de forma no interactiva). La marca -d, que significa "detach" (separar) ejecuta el contenedor en modo "separado". Escriba este comando: docker run -d busybox:1.24 sleep 1000. Docker devuelve inmediatamente el id del contenedor, y el contenedor se está ejecutando. Para verificarlo, escriba docker ps. Esto mostrará qué contenedores se están ejecutando, lo que en nuestro caso es este único contenedor. Para ver los contenedores que se están ejecutando y que se han ejecutado anteriormente, escriba docker ps -a. Para eliminar un contenedor cuando sale, escriba docker run –rm busybox:1.23 sleep 1. El contenedor se ejecutará pero no aparecerá en el historial que se muestra al usar docker ps -a. Docker genera "nombres" extraños de contenedores al ejecutar contenedores. Para especificar el nombre que queremos que Docker genere, debemos usar la opción –name. Escriba docker run –-name micontenedor busybox:1.24. Ahora, al usar docker ps -a, podremos ver que el nombre del contenedor es micontenedor. Docker ofrece una útil función para obtener detalles sobre información de bajo nivel acerca de contenedores como IPAddress y Ports. Escriba docker inspect IDdeContenedor (sustituya IDdeContenedor con uno de los ID de contenedores de docker ps -a). A menudo, los contenedores ejecutan procesos que "escuchan" en un puerto específico. Para comunicarse con el puerto del contenedor desde el host, debe mapear el puerto del host al contenedor. El formato del comando es -p puerto_host: puerto_contenedor. Si se ejecuta un contenedor de docker localmente, la dirección IP del contenedor es "localhost". En Windows puede ser 127.0.0.1. Un comando útil para resolver errores es consultar el archivo de registro del contenedor. Puede hacer esto fácilmente con el comando docker logs containerId (sustituya ID_contenedor con los ID de los contenedores de docker ps -a) Los contenedores están hechos de capas. Se comienza con la capa base y se agregan capas adicionales. Docker ofrece el comando history para listar las capas de un contenedor. Escriba docker history busybox:1.24 Docker puede hacer mucho más, incluyendo construir imágenes más complejas con el comando "commit" o un Dockerfile (consulte https://docs.docker.com/ ). Esta breve introducción a Docker ofrece lo básico para poner en funcionamiento el contenedor de IRIS community. Puesta en funcionamiento del contenedor IRIS Puede encontrar las instrucciones para usar el contenedor Docker para IRIS Community Edition en: https://hub.docker.com/_/intersystems-iris-data-platform/plans/222f869e-567c-4928-b572-eb6a29706fbd?tab=instructions Debemos explicar un comando adicional de Docker para configurar el archivo de contraseñas. Los contenedores de Docker no pueden acceder directamente al sistema de archivos del host. El contenedor debe montar un directorio que se pone a su disposición desde el host. Inicialmente, Docker para Mac pone a disposición los siguientes directorios para enlazar/montar en contenedores de Docker: /Users, /Volumes, /private, /tmp. Para almacenar contraseñas fuera del contenedor (recuerde que todos los archivos escritos en el contenedor desaparecerán al salir), necesitamos crear un archivo en /Users/suNombreDeUsuario/external/password.txt. Montar un volumen usa la marca -v y luego el nombre de host, seguido por dos puntos y luego el directorio del contenedor. Ahora ejecute el contenedor con el siguiente comando: docker run --name irisdb -v ~/external:/external -d store/intersystems/iris:2019.1.0.511.0-community --password-file /external/password.txt. Después de ejecutar este comando y verificar el estado con el comando docker ps -a, debería ver lo siguiente tras un par de minutos: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d74f2b7a48d5 store/intersystems/iris:2019.1.0.511.0-community "/iris-main --passwo…" 2 minutes ago Up 2 minutes (healthy) irisdb Conéctese al contenedor recién iniciado mediante el comando: docker exec -it irisdb iris session iris. Esta conexión nos permite iniciar una sesión de Iris. El nombre de usuario es SuperUser y la contraseña es SYS. Ahora IRIS le solicitará cambiar la contraseña, como se muestra a continuación: Node: d74f2b7a48d5, Instance: IRIS Username: SuperUser Password: *** Password change required Please enter a new password Password: ********* Please retype your new password Password: ********* USER> Ahora podemos escribir comandos directamente en la línea de comandos del terminal IRIS. Como por ejemplo: USER>set firstname = "Peter" USER>write firstname Peter USER> Podemos escribir comandos interactivos, ¿pero cómo iniciamos el portal de administración?Normalmente, para hacer esto, abriríamos un navegador y escribiríamos la dirección: http://localhost:52773/csp/sys/UtilHome.csp, pero cuando lo hacemos, se muestra un mensaje de error y el sitio del host local rechaza la conexión. ¿Recuerda la sección sobre mapeo de puertos y cómo los contenedores están aislados de la red externa sin ellos? Debemos mapear dos puertos, el puerto predeterminado de superserver de IRIS en 51773, y el puerto de administración en 52773. En el caso anterior, primero detenga el proceso de línea de comandos escribiendo Halt. Luego, detenga el contenedor con: docker stop [containerid] Volvamos a poner este contenedor en funcionamiento con mapeo de puertos: docker run -p 51773:51773 -p 52773:52773 -v ~/external:/external -d store/intersystems/iris:2019.1.0.511.0-community --password-file /external/password.txt Si ahora abrimos una ventana del navegador con la dirección http://localhost:52773/csp/sys/UtilHome.csp, deberíamos acceder al portal de administración. A pesar de que logramos usar el archivo de contraseñas en el sistema host, no pudimos mantener el cambio de contraseña que hicimos antes. ¿Por qué no? Debemos indicar a IRIS el directorio donde guardar sus ajustes de configuración persistentes. Es necesario agregar una marca --env ISC_DATA_DIRECTORY=/external/iconfig. Así, el comando completo es: docker run -p 51773:51773 -p 52773:52773 -v ~/external:/external --env ISC_DATA_DIRECTORY=/external/ifconfig -d store/intersystems/iris:2019.1.0.511.0-community --password-file /external/password.txt En este punto, no debería tener que cambiar la contraseña del portal de administración que definió inicialmente. La cadena del comando es difícil de recordar, y otro método es almacenarlo en un archivo que puede utilizar una utilidad de docker relacionada, llamado Docker-compose. El archivo es de tipo yaml o yml, y debe nombrarse docker-compose. El archivo docker-compose ofrece varias formas de configurar cualquier cantidad de contenedores y sus dependencias. Sin embargo, para nuestro objetivo alcanza con un archivo más simple. Aquí están los contenidos (debe nombrar al archivo docker-compose.yml): version: '3' services: I iris: image: store/intersystems/iris:2019.1.0.511.0-community ports: - "51773:51773" - "52773:52773" volumes: - ~/external:/external environment: - ISC_DATA_DIRECTORY=/external/ifconfig entrypoint: /iris-main --password-file /external/password.txt Tenga en cuenta el parecido con la línea de comandos con unos pocos añadidos. Primero, la versión del archivo docker-compose es la "3". Tenemos un servicio llamado "iris" u otro nombre a elección. La imagen, los puertos, los volúmenes y el entorno son autoexplicativos. La última línea, "entrypoint", es el programa que se ejecuta (incluyendo las opciones, en este caso la ubicación del archivo de contraseñas). Si ahora escribimos docker-compose up -d. El contenedor se gira hacia arriba igual que antes. Para detener el contenedor, escriba docker-compose down. Puede encontrar más información sobre las opciones de Docker-compose en: https://docs.docker.com/compose/
Anuncio
David Reche · 16 mar, 2020

Varios avisos sobre HealthShare (11 de marzo)

Este mensaje contiene cinco Avisos recientes sobre HealthShare. Estos avisos también se encuentran en la página de Alertas y Avisos de Productos de InterSystems Aviso: Gap in medications display if generic names not included Aviso: Updated the Clinical Viewer so that silent encounters do not display Aviso: Corrected gap in custom lab charts not displaying all results in Clinical Viewer Aviso: Residual Locks on Late Update Aviso: Incorrect HealthShare Mirror Upgrade Documentation could lead to Data Integrity issues Si tenéis alguna pregunta sobre estos avisos, contactad por favor con el Centro de Soporte Internacional (WRC). March 11, 2020 – Advisory: Gap in medications display if generic names not included InterSystems has corrected a defect affecting how medications are displayed in the Clinical Viewer, when the generic name is not provided. This problem exists for: HealthShare Information Exchange 2018.1 HealthShare Unified Care Record 2019.1 This defect occurs when incoming medication data does not include the generic name within the Unified Care Record and subsequently is not displaying the Clinical Viewer. This has been corrected as of 2019.1.2. This can be resolved by requesting an Ad hoc with the dev key below. The correction for this defect is identified as dev key WRS1026 and will be included in all future product releases. It is also available via Ad hoc change file (patch) or full kit distribution by contacting the Worldwide Response Center (WRC). If you have any questions regarding this advisory, please contact the WRC. March 11, 2020 – Advisory: Updated the Clinical Viewer so that silent encounters do not display InterSystems has corrected a defect affecting silent encounters in the Clinical Viewer. This problem exists for: HealthShare Information Exchange 2018.1 HealthShare Unified Care Record 2019.1 The Unified Care Record creates a silent encounter when incoming data is not associated with an encounter. The defect is that these silent encounters were displaying within the Clinical Viewer, when they should not. This has been corrected as of 2019.1.2. Customers using 2018.1 and 2019.1 can request an ad hoc with the dev keys below. If customers have not upgraded to HealthShare Information Exchange 2018.1 or Unified Care Record 2019.1, this defect is not present. The Unified Care Record 2019.1.2 release has fixed this defect. The correction for this defect is identified as dev keys WRS1027, WRS1052 and WRS1067, which will be included in all future product releases. It is also available via Ad hoc change file (patch) or full kit distribution by contacting the Worldwide Response Center (WRC). If you have any questions regarding this advisory, please contact the WRC. March 11, 2020 – Advisory: Corrected gap in custom lab charts not displaying all results in Clinical Viewer InterSystems has corrected a defect affecting custom lab charts. This problem exists for: HealthShare Information Exchange 2018.1 HealthShare Unified Care Record 2019.1 This defect occurs when a Unified Care Record customer has created a custom lab chart where not all incoming lab data is tagged with the "lab" category in SDA. This can be resolved by requesting an ad hoc with the dev key below. If customers have not upgraded to HealthShare Information Exchange 2018.1 or Unified Care Record 2019.1, this defect is not present. The Unified Care Record 2019.1.2 release has fixed this defect. The correction for this defect is identified as WRS1025 which will be included in all future product releases. It is also available via Ad hoc change file (patch) or full kit distribution by contacting the Worldwide Response Center (WRC). If you have any questions regarding this advisory, please contact the WRC. March 11, 2020 – Advisory: Residual Locks on Late Update InterSystems has corrected a defect when the InactiveMRNHandlingMode is set to Late Update. This problem exists for: HealthShare Unified Care Record 2019.1 This defect occurs when the InactiveMRNHandlingMode in the HS.Gateway.ECR.Manager is set to Late Update. In rare situations where the Late Update code is triggered, locks on an MRN can fail to be released. This can result in messages becoming stuck in the ECR Manager. The correction for this defect is identified as dev key MCZ110 and included in all product releases from Unified Care Record 2019.1.1 onwards. It is also available via Ad hoc change file (patch) or full kit distribution by contacting the Worldwide Response Center (WRC). If you have any questions regarding this advisory, please contact the WRC. March 11, 2020 – Advisory: Incorrect HealthShare Mirror Upgrade Documentation could lead to Data Integrity issues InterSystems has corrected a defect in the steps needed to upgrade a mirrored HealthShare environment. This problem exists for: All versions of HealthShare Information Exchange, Unified Care Record, Patient Index, Health Insight, or Personal Community that support mirroring prior to version 2019.2. This does not affect any versions of Health Connect or IRIS for Health. In previous versions, the HealthShare mirror upgrade procedure was written in a way that minimized system downtime. Specifically, the mirror upgrade instructions allowed customers to continue processing new data until after the backup mirror member was already successfully upgraded and running the new version. Due to changes in the data model between versions, the recommendation now is to stop processing new data immediately upon beginning the upgrade procedure. If customers were to follow the previously documented mirror upgrade procedure, it could cause an issue where new data comes in using the data model from the previous version, but then gets mirrored to a backup member without going through the proper conversion steps. For more information, please see the 2019.2 mirror upgrade documentation. With each upgrade, it is important to review and follow the upgrade instructions included for the version. The new procedure of turning off data feeds at the beginning of the upgrade should be followed for all upgrades, including those to previous versions such as 2019.1 or 2018.1. The documentation for these version has been updated. Customers upgrading their mirrored environments should NOT reference the documentation available with their current version. Instead, they should reference the HealthShare 2019.2 online documentation for the correct set of instructions, specifically the section titled Upgrading a Unified Care Record Mirror. There are no code changes related to this Advisory and an Ad hoc is not required. If you have any questions regarding this advisory, please contact the Worldwide Response Center (WRC).
Anuncio
David Reche · 30 ene, 2020

Versión de prueba de Health Connect 2020.1

¡Hola a tod@s! Ya está disponible la versión de prueba 2020.1 de HealthShare Health Connect. Los kits para la instalación, las imágenes del contenedor y las licencias de evaluación están disponibles en la página de descargas para pruebas del Centro de Soporte Internacional (WRC). El número de compilación de estas versiones es 2020.1.0.199.0. (Nota: número actualizado de 197 a 199 el 12/2/20) HealthShare Health Connect 2020.1 incluye muchas funcionalidades nuevas: Healthcare Interoperability FHIR R4 Support HL7 Productivity Tools API Management InterSystems API Manager Open API/Swagger Specification-First REST Development New Look in the Management Portal SQL Enhancements Universal Query Cache Interoperability Production Enhancements New Framework for Coding Interoperability Business Hosts in Java and .NET Port Authority for Monitoring Port Usage in Interoperability Productions X12 Validation Enhancements Enhanced DTL Support for X12 X12 Import X12 Schemas from XSD Files MQTT Adapters Infrastructure and Cloud Deployment Improvements New Automatic Configuration Customization Analytics Enhancements Selective Cube Build PowerBI Connector Pivot Table Preview Other Enhancements and Efficiency Improvements El borrador de la documentación está disponible aquí: Documentación de Health Connect 2020.1 Las plataformas en las que Health Connect 2020.1 está soportada para producción y desarrollo se detallan en el Documento de plataformas soportadas.
Artículo
Mathew Lambert · 26 ene, 2021

Variable de entorno Linux TZ no configurada. Su impacto en Caché

En los recientes trabajos de benchmarking a gran escala, observamos un tiempo excesivo de uso del CPU %sys que afectó negativamente en la escalabilidad de la aplicación. **Problema** Encontramos que gran parte del tiempo se pasó llamando a la llamada _localtime()_ del sistema, debido a que la variable de entorno TZ no estaba configurada. Se creó una rutina de prueba sencilla para confirmar la observación, y las diferencias entre el tiempo transcurrido y los recursos que necesitó la CPU con la variable TZ vs. cuando TZ no estaba establecida, fueron extraordinarios. Se descubrió que el uso hereditario de las llamadas _stat()_ de sistema hacia /etc/local_time desde _localtime()_ es muy costoso cuando la variable TZ no está establecida. **Recomendación** InterSystems recomienda encarecidamente que se confirme en cualquier sistema que tenga Linux instalado, ya sea en x86 o Linux on Power, que la variable de entorno TZ está configurada adecuadamente, para obtener un rendimiento óptimo. Para más información, consulta: "man tzset". La versión de prueba de Caché 2016.1 contiene optimizaciones relacionadas con las funciones de fecha y hora, y las pruebas iniciales indican importantes mejoras. A continuación, se muestran ejemplos de salidas, resultado de probar las nuevas llamadas a funciones internas en un bucle con Linux on Power, donde en ambos casos TZ \*no\* se establece: Antes de Caché 2016.1 FT: real 0m22.60s user 0m1.64s sys 0m20.89s Con Caché 2016.1 FT: real 0m0.40s user 0m0.37s sys 0m0.00s Publica tus comentarios sobre cualquier experiencia que hayas tenido con tu aplicación, relacionada con la variable de entorno TZ, y también sobre el impacto que la versión de prueba de Caché 2016.1 tiene con o sin la variable TZ definida.
Pregunta
Héctor Mancilla · 5 mar, 2021

cambiar REPORTNAME de un reporte zen a través de URI

Hola buen día a todos. quería saber si existe alguna forma de cambiar el nombre un reporte excel. estas son las propiedades y parámetros de la clase: /// Nombre de clase de la aplicación a la que pertenece este informe. Parameter APPLICATION; Parameter REPORTNAME; Property RenderTimeOut As %ZEN.Datatype.integer [ InitialExpression = -1 ]; Property ID As %String(ZENURL = "id"); Parameter XSLTMODE = "server"; Property Title(ZENURL = "title"); Principalmente estoy colocando la URI en un anchor en HTML para poder descargar, pero el atributo 'download' en el tag no hace el trabajo, por lo cual quiero hacer el trabajo en la URI misma. Saludos Hola Hector, la verdad es que no entiendo bien que quieres hacer. Puedes darnos más detalles Hola Hector, Si lo entiendo bien, estas hablando de ZEN Reports. Ten en cuenta que es una funcionalidad deprecada en Intersystems IRIS, donde se siguen soportando lo Zen reports ya desarrollados con anterioridad, pero se recomienda migrarlos a "InterSystemt Reports" documentado aquí: https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI.Page.cls?KEY=PAGE_reports En cuanto a la pregunta, parece que puedes sobrescribir el valor del parametro de clase REPORTNAME con un valor de parametro de URL en la petición de Report "?ReportName=MiInforme": Esto es el código en %ZEN.Report.reportPage que usa el parametr de URL si esta definido: //JSL4724 set reportnameurlparam = $get(%request.Data("ReportName",1)) set reportname=$s(reportnameurlparam'="":reportnameurlparam,..#REPORTNAME'="":..#REPORTNAME,1:..%ClassName(1))​​​​​​ Lo puedes probar? Saludos,PYD Muchas gracias por su respuesta, me ayudó mucho!
Artículo
Muhammad Waseem · 9 nov, 2021

Cómo recuperar datos de Caché con Appeon PowerBuilder usando ODBC

En mi artículo anterior, expliqué los pasos para conectarse a Caché desde Appeon PowerBuilder usando ODBC. En este artículo, mostraré cómo recuperar datos de Caché con Appeon PowerBuilder (https://www.appeon.com/products/powerbuilder) utilizando ODBC.Estoy usando Company.cls de Samples-Data (https://github.com/intersystems/Samples-Data/tree/master/cls/Sample) Así que comencemos: Paso 1 : En primer lugar, debemos establecer una conexión. (https://community.intersystems.com/post/connecting-cach%C3%A9-appeon-powerbuilder-using-odbc) Paso 2 : Necesitamos crear un datawindow object (objeto de ventana de datos) que se vinculará a la clase Company. En el menú File (Archivo), selecciona New (Nuevo) y después el objeto Grid (cuadrícula) en la pestaña DataWindow (Ventana de datos). Paso 3 : Selecciona SQL Select de la lista de Data Source (Fuente de datos). Paso 4 : Selecciona sample.company de la lista de Tables (Tablas). Paso 5 : Selecciona las columnas deseadas de la lista de columnas y haz clic en Return. Paso 6 : Esto abrirá una vista de diseño. Guarda datawindow (ventana de datos) como d_company después de los ajustes deseados. Paso 7 : En window control, añade datawindow object (objeto ventana de datos) d_company, que ya creamos, al datawindow control. Paso 8 : Ahora todo lo que necesitamos es llamar a la función de control de ventana de datos Retrieve () después de configurar el objeto de transacción.. Eso es todo. A continuación muestro la captura de pantalla final después de recuperar los datos de Caché con Appeon PowerBuilder utilizando ODBC. Gracias.
Artículo
Eduardo Anglada · 29 mar, 2022

Cómo hacer que los usuarios encuentren el conjunto de datos perfecto

¡Hola a todos! Hoy quiero hablar sobre nuestro proyecto y utilizar el tema del conjunto de datos para el concurso. Nuestra intención nunca fue ser unos gestores de datos, sobre todo porque a veces nuestros preciosos datos significan mucho para nosotros, pero no para el resto del mundo. ![Mi Tesoro](https://raw.githubusercontent.com/diashenrique/iris-kaggle-socrata-generator/master/images/myprecious.gif) Queremos ir un paso más allá y permitir que los usuarios encuentren el conjunto de datos perfecto para satisfacer sus necesidades. Nuestro proyecto es un puente entre la comunidad de la Ciencia de Datos y la Comunidad de Desarrolladores, utilizando InterSystems IRIS para lograr esta misión. La imagen que aparece a continuación es la página inicial para vosotros. Se puede buscar cualquier tema y ver los conjuntos de datos relacionados con él. ![Búsqueda inicial](https://raw.githubusercontent.com/diashenrique/iris-kaggle-socrata-generator/master/images/initialSearch.png) Solo hay que hacer clic en el icono de la lupa al lado de la mascota de Socrata, aparecerá la barra de búsqueda y ahí se puede buscar cualquier tema. ![Búsqueda inicial](https://raw.githubusercontent.com/diashenrique/iris-kaggle-socrata-generator/master/images/exploreSearch.png) Pero recordad que es obligatorio buscar algo, no se puede buscar "nada". Si no se escribe nada, aparecerá una imagen de alerta similar a esta: ![Búsqueda vacía](https://raw.githubusercontent.com/diashenrique/iris-kaggle-socrata-generator/master/images/emptySearch.png) Si se busca un tema específico, se completará la tabla de datos con los conjuntos de datos relacionados con él. Este es un video de demostración, que explica cómo elegir un conjunto de datos, buscar los detalles, bajarlo e instalarlo. ¡Espero que os resulte útil!
Artículo
Alberto Fuentes · 1 sep, 2022

Algunos ejemplos de interoperabilidad FHIR

¡Hola desarrolladores! Quizá os hayáis encontrado con escenarios donde no tenéis que implementar un repositorio FHIR, sino por ejemplo reenviar peticiones FHIR, gestionar las respuestas y tal vez realizar modificaciones o extraer algunos valores por el camino. Aquí encontraréis algunos ejemplos que pueden implementarse con *InterSystems IRIS For Health* o *HealthShare Health Connect*. En estos ejemplos he utilizado producciones de interoperabilidad con el [FHIR Interoperability Adapter](https://docs.intersystems.com/irisforhealthlatest/csp/docbook/DocBook.UI.Page.cls?KEY=HXFHIR_fhir_adapter) y los mensajes tipo `HS.FHIRServer.Interop.Request`. Si por el contrario estáis interesados en implementar un repositorio FHIR, no dejéis de ver el [Webinar](https://comunidadintersystems.com/webinar-comienza-a-trabajar-con-fhir) que hicimos en su día. Un primer escenario podría ser tener que construir una petición FHIR de cero quizá a partir de un fichero o tal vez una consulta SQL y a continuación reenviarlo a un servicio FHIR externo: ![image](/sites/default/files/inline/images/scenario-fhirclient-file-simple.png) Otro escenario podría ser hacer de pasarela de peticiones / respuestas FHIR contra un repositorio externo, gestionando el paso de tokens OAuth. ![image](/sites/default/files/inline/images/scenario-fhirserver-passthrough.png) Y finalmente podríamos pensar quizá en recibir peticiones FHIR para reenviarlas a un servicio FHIR externo, pero pudiendo extraer cierta información o manipulando algunos campos el camino. ![image](/sites/default/files/inline/images/scenario-fhirservice-handler.png) Los detalles de la implementación los encontraréis en la aplicación Open Exchange :) ¡Espero que os sirva!
Anuncio
Esther Sanchez · 24 feb, 2023

Mejoras en los perfiles de los miembros de la Comunidad

Lo habíais pedido... ¡y ya está aquí! Estamos encantados de compartir con vosotros los cambios que hemos hecho en la página de perfil de los miembros de la Comunidad: Biografía del usuario Publicaciones fijas En primer lugar, hemos añadido una nueva sección llamada "Biografía del usuario" en la parte superior de los perfiles de cada persona. Para cada miembro de la Comunidad, permite: acceder rápidamente a su página de Certificaciones de InterSystems ver cuándo se dio de alta en la Comunidad saber más sobre la persona, si ha añadido una biografía Así que... Ya podéis añadir vuestra biografía en la sección "Información Básica" – solo tenéis que hacer clic en "Añadir biografía" y escribir lo que queráis contar a los demás sobre vosotros!: En esa misma página podéis añadir vuestros perfiles en redes sociales, para que puedan contactaros otros miembros de la Comunidad: Este es el ejemplo de un perfil con la biografía completada: Publicaciones fijas en vuestro perfil La segunda mejora es la posibilidad de fijar las publicaciones de las que estéis más orgullosos o queráis mostrar a los demás. Podéis elegir 3 de vuestras publicaciones para fijarlas en la parte superior de vuestra página de perfil. Solo tenéis que hacer clic en "Seleccionar las publicaciones" y hacer clic en la chincheta que aparece a la derecha del título. Las publicaciones fijadas serán las primeras que se verán cuando alguien abra vuestro perfil. Del mismo modo, si queréis dejar de fijar una publicación, solo tenéis que pasar el ratón por encima de la chincheta de la publicación fijada y hacer clic de nuevo sobre ella. ¡Así de fácil! Esperamos que os gusten estas novedades. Hay más mejoras en camino, así que estad atentos a la Comunidad :D
Artículo
Pierre-Yves Duquesnoy · 7 mayo, 2020

Python Gateway. Parte I: Introducción

Esta serie de artículos describe el uso del Python Gateway para InterSystems IRIS. Python Gateway permite acceder a toda la potencia de las librerías Python y las herramientas de Aprendizaje máquina (IAML) desde InterSystems IRIS y: Ejecutar cualquier código Python Transferir datos de forma transparente desde IRIS a Python Construir procesos de interoperabilidad inteligente con el Adaptador de Python Guardar, revisar, modificar y restaurar el contexto de Python desde InterSystems IRIS Índice El plan para la serie hasta el momento (sujeto a cambios). Parte I: Resumen, panorama e introducción <-- usted está aquí Parte II: Instalación y resolución de problemas Parte III: Funcionalidades básicas Parte IV: Adaptador de Interoperabidad Parte V: Cómo ejecutar una función Parte VI: Puerta de enlace dinámica Parte VII: Puerta de enlace proxy Parte VIII: Casos de usos y conjunto de herramientas de aprendizaje automático Resumen El aprendizaje automático (ML, por el inglés "Machine Learning") es el estudio de algoritmos y modelos estadísticos para realizar de forma efectiva una tarea específica sin usar instrucciones específicas, confiando en vez en patrones e inferencias. Los algoritmos y modelos de aprendizaje automático son cada vez más utilizados. Hay una variedad de motivos para eso, pero en el fondo pasa por la economía, la simplicidad y la creación de resultados útiles. ¿El clustering (análisis de grupos) o incluso el modelado de redes neuronales son nuevas tecnologías? Por supuesto que no, pero hoy en día ya no es necesario escribir cientos de líneas de código para ejecutar uno. Las herramientas están evolucionando. Si bien aún no tenemos herramientas de IA/ML totalmente basadas en una interfaz gráfica, observamos en este caso el mismo desarrollo que vimos con muchas otras tecnologías informáticas, en particular las herramientas de Inteligencia empresarial (BI) (desde escribir código a utilizar frameworks a soluciones configurables basadas en interfaces gráficas). Ya pasamos el punto de escribir código y actualmente usamos frameworks para configurar y calcular los modelos. Otras mejoras, como uso de modelos pre-entrenados (“transfer learning” en inglés) , en el que el usuario final sólo debe terminar el entrenamiento de un modelo genérico con sus datos propios más específicos, también simplifican el proceso de adaptación. Estos avances hacen empezar en ML sea mucho más asequible tanto para individuos como para empresas. Por otro lado, hoy en día recolectamos más datos sobre cada transacción que realiza una empresa. Con una plataforma de datos unificada, como InterSystems IRIS, es posible acceder a toda esta información de forma inmediata para usarla como alimento para los modelos predictivos. Gracias al otro gran motor, la nube, procesar cargas de trabajo de IA/ML se vuelve más fácil que nunca. Permite consumir los recursos necesarios sin costes de adquisición, y gracias a la paralelización masiva que ofrecen las plataformas de nube, podemos ahorrar tiempo de implementación de una solución. ¿Pero qué pasa con los resultados? Aquí hay cierta complejidad. Existen muchas herramientas para construir un modelo, de las cuales hablaré más adelante, y no siempre es fácil construir un buen modelo, ¿pero qué viene después? Extraer valor comercial de un modelo tampoco es una tarea trivial. La raíz del problema es la separación de flujos de datos analíticos y transaccionales. Cuando entrenamos al modelo, generalmente lo hacemos con datos históricos de un repositorio analitico. Pero el mejor lugar para usar este modelo es en el corazón del procesamiento transaccional. ¿De qué sirve el mejor modelo de detección de fraude si lo ejecutamos una vez por día? Las transacciones fraudulentas ya habrán sido aceptadas y será demasiado tarde para tomar acción. Necesitamos entrenar un modelo en base a datos históricos, pero también necesitamos aplicar el modelo en tiempo real sobre los nuevos datos entrantes, para que nuestro proceso empresarial pueda actuar en base a las predicciones que realiza el modelo. MLToolkit MLToolkit es un completo conjunto de herramientas que apunta a hacer exactamente eso: unir los modelos predictivos a los entornos transaccionales, para que pueda aprovechar los modelos que construya directamente dentro de su proceso empresarial. El Python Gateway es parte del MLToolkit y brinda integración con un lenguaje Python. Panorama Antes de continuar, quisiera describir varias herramientas y bibliotecas para Python, que usaremos más tarde. Herramientas Python es un lenguaje de programación interpretado, de propósito general y de alto nivel. La principal ventaja del lenguaje es el gran número de librerías matemáticas, de aprendizaje automático e inteligencia artificial. Al igual que ObjectScript, se trata de un lenguaje orientado a objetos y dinámico. Los siguientes artículos asumen que el lector tiene una familiaridad básica con el lenguaje. Si desea comenzar a aprender, le recomiendo comenzar con la documentación. Para nuestros siguientes ejercicios instale Python 3.6.7 64 bit. IDE: Yo uso PyCharm, apuesto a que hay muchos otros. Si usa Atelier, existe Eclipse para desarrolladores Python. Bloc de notas: en lugar del IDE, puede escribir y compartir sus scripts en un bloc de notas web. El más popular es Jupyter. Bibliotecas A continuación encontrará una lista (incompleta) de bibliotecas usadas para aprendizaje automático. Numpy es el paquete fundamental para programación científica con Python. Pandas es una biblioteca que brinda estructuras de datos y herramientas de análisis de datos que son fáciles de usar y potentes. Matplotlib es una biblioteca gráfica 2D parar figuras en varios formatos del entorno o impresos. Seaborn es una biblioteca de visualización de datos basada en matplotlib. Brinda una interfaz de alto nivel para crear gráficos estadísticos atractivos e informativos. Sklearn es una biblioteca para aprendizaje automático. XGBoost es una biblioteca optimizada para mejorar los gradientes distribuidos, diseñada para tener ser altamente eficiente, flexible y portátil. Implementa algoritmos de aprendizaje automático bajo el framework Gradient Boosting. Gensim es una biblioteca para el modelado de temas no supervisado y procesamiento de lenguaje natural. Keras es una API de alto nivel para redes neuronales, escrito en Python y capaz de ejecutarse sobre TensorFlow, CNTK o Theano. Tensorflow es una plataforma de aprendizaje automático de extremo a extremo de código abierto. PyTorch es una plataforma de aprendizaje profundo similar a Tensorflow pero enfocada en Python. Nyoka genera PMML a partir de modelos de Python. Resumen Las tecnologías de inteligencia artificial y aprendizaje automático permiten a las empresas ser más efectivas y más adaptables. Hoy esas tecnologías se están volviendo más fáciles de usar e implementar. Comience a investigar sobre tecnologías de AI/ML y cómo puede ayudar a su organización a crecer y prosperar. Aquí hay ejemplos, historias y casos de uso para casi cualquier industria. No se pierda la oportunidad de usar hoy las tecnologías del futuro. ¿Cómo seguir? En la siguiente sección, instalaremos el Python Gateway. ¡No olvide registrarse para el próximo seminario web (detalles a continuación)! Enlaces Python Gateway Instalar Python 3.6.7 64 bits Documentación/tutorial Python
Artículo
Pierre-Yves Duquesnoy · 16 feb, 2023

Columnar Storage en 2022.3

Como recordaréis, en el [Global Summit de 2022](https://learning.intersystems.com/course/view.php?id=2077) y en el [webinar de lanzamiento de la versión 2022.2](https://www.intersystems.com/resources/whats-new-in-intersystems-iris-2022-2/), presentamos una nueva e interesante funcionalidad para incluir en las soluciones analíticas de InterSystems IRIS. [Columnar Storage](https://learning.intersystems.com/course/view.php?id=2112) introduce una forma alternativa de almacenar los datos de las tablas SQL, que ofrece un aumento significativo en la velocidad de las consultas analíticas. Lanzada por primera vez como funcionalidad experimental en 2022.2, la [última versión de prueba en 2022.3](https://community.intersystems.com/post/intersystems-publishes-developer-preview-5-intersystems-iris-iris-health-healthshare-health) incluye numerosas actualizaciones que pensamos merecen una publicación aquí. ### Un breve resumen Si no estáis familiarizados con Columnar Storage, echad un vistazo a [este breve video](https://learning.intersystems.com/course/view.php?id=2112) o a esta sesión [del Global Summit 2022](http://learning.intersystems.com/course/view.php?id=2077). En resumen, vamos a codificar los datos de la tabla en fragmentos de 64 000 valores por columna utilizando un nuevo tipo de datos `$vector`. `$vector` es un tipo de datos exclusivamente interno (por ahora) que aprovecha los esquemas de codificación adaptativa para permitir el almacenamiento eficiente de datos tanto dispersos como compactos. El código también está optimizado para un grupo de operaciones `$vector` especializadas, como calcular conjuntos, agrupar y filtrar fragmentos enteros de 64 000 valores a la vez, aprovechando las instrucciones [SIMD](https://en.wikipedia.org/wiki/Single_instruction,_multiple_data) cuando sea posible.  Al realizar la consulta SQL, aprovechamos estas operaciones desarrollando un plan de consulta que también opera sobre estos fragmentos, lo que supone, como podéis imaginar, una reducción masiva de la cantidad de IO y del número de instrucciones ObjectScript necesarias para ejecutar la consulta, en comparación con el procesamiento clásico fila por fila. Por supuesto, las IOs individuales son mayores y las operaciones `$vector` son un poco más complejas que las equivalentes a un solo valor del mundo orientado a filas, pero las ganancias son enormes. Utilizamos el término planes de consulta *vectorizados* para las estrategias de ejecución que procesan datos $vector, procesando bloques enteros mediante una cadena de operaciones individuales rápidas. ### Simplemente más rápido Y lo que es más importante, todo va más rápido. Hemos ampliado la comprensión del optimizador sobre los índices en columnas y ahora veréis que más consultas utilizan índices en columnas, incluso si algunos de los campos solicitados no se almacenan en un índice en columnas o mapa de datos. Además, veréis que combina índices en columnas y de mapa de bits en varios casos, lo que es muy útil si estáis empezando a introducir índices en columnas en un esquema existente. El nuevo kit también incluye una serie de cambios más generales que mejoran el rendimiento, desde optimizaciones hasta operaciones `$vector` de bajo nivel pasando por algunas mejoras en el procesamiento de consultas y un conjunto más amplio de planes de consulta vectorizados que se podrán paralelizar. Algunas formas de cargar datos, por ejemplo a través de las sentencias `INSERT .. SELECT`, ahora también emplearán un modelo de búfer que ya utilizamos para generar índices y ahora permiten desarrollar tablas enteras con un rendimiento realmente alto. ### JOINs vectorizados La funcionalidad más interesante que hemos añadido en esta versión es el soporte a JOINs vectorizados sobre datos en columas . En la versión 2022.2, cuando se querían combinar datos de dos tablas en una consulta, aún recurríamos a una estrategia sólida de combinación JOIN fila por fila, que funciona tanto con datos organizados en columnas como en filas. Ahora, cuando ambos extremos del JOIN se almacenan en un formato en columnas, utilizamos una nueva API del kernel para hacer combinaciones JOIN en la memoria, manteniendo su formato `$vector`. Este es otro importante paso hacia los planes de consulta totalmente vectorizados, incluso para las consultas más complejas. A continuación presentamos un ejemplo de consulta que aprovecha las ventajas de la nueva función, efectuando un self-JOIN del conjunto de datos de taxis de Nueva York que ya hemos utilizado en [otras demos](https://github.com/bdeboe/isc-taxi-demo): SELECT   COUNT(*),   MAX(r1.total_amount - r2.total_amount) FROM   NYTaxi.Rides r1,   NYTaxi.Rides r2 WHERE   r1.DOLocationID = r2.PULocationID   AND r1.tpep_dropoff_datetime = r2.tpep_pickup_datetime   AND r2.DOLocationID = r1.PULocationID   AND r1.passenger_count > 2   AND r2.passenger_count > 2 En esta consulta se buscan pares de viajes con más de 2 pasajeros, en los que el segundo viaje comenzó donde terminó el primero, exactamente a la misma hora y en los que el segundo viaje llevó a uno de vuelta a donde comenzó el primero. No es un análisis muy útil, pero solo tenía una tabla real en este esquema y la clave JOIN compuesta lo hizo un poco menos sencillo. En el plan de consulta para esta sentencia, veréis fragmentos sobre como `Apply vector operation %VHASH` (para crear la clave JOIN compuesta) y `Read vector-join temp-file A`, que indica que nuestro nuevo ensamblador vectorizado está funcionando! Esto puede parecer un pequeño detalle trivial en un plan de consulta larga, pero implica una gran cantidad de ingeniería inteligente en el interior, y hay un gran número de proveedores de bases de datos en columnas que simplemente no permiten nada de esto e imponen severas restricciones en el diseño de su esquema, así que ¡únete a nosotros para participar en esto! :-) Cuando el plan de consultas continúa para leer ese archivo temporal, es posible observar que aún queda algo de procesamiento fila por fila en el trabajo posterior a la combinación, lo que nos llevará a preguntarnos... ### ¿Qué sigue? Columnar Storage sigue considerándose "experimental" en 2022.3, pero cada vez estamos más cerca de estar listos para la producción y de disponer de la vectorización completa de extremo a extremo para las consultas de múltiples tablas. Esto incluye el trabajo posterior a la combinación (mencionado anteriormente), un mayor soporte con el optimizador de consultas, una carga aún más rápida de las tablas en columnas y nuevas mejoras del combinador, como el soporte a la memoria compartida. En resumen: ahora es un momento excelente para probar todo esto por primera vez con el [conjunto de datos de taxis de Nueva York](https://github.com/bdeboe/isc-taxi-demo/) (ahora en [IPM](https://openexchange.intersystems.com/package/NY-Taxi-Demo) o con los [scripts de docker](https://github.com/bdeboe/isc-taxi-demo)) utilizando la Community Edition 2022.3, y así solo tendréis que hacer clic en "Run" cuando saquemos la versión 2023.1! Si alguien está interesado en recibir más asesoramiento personalizado sobre cómo aprovechar el almacenamiento en columnas con sus propios datos y consultas, poneos en contacto conmigo o con vuestros consultores habituales, y quizá nos veamos en el [Global Summit 2023](https://www.intersystems.com/gs2023/) ;-).
Artículo
Eduardo Anglada · 10 mayo, 2021

Uso de ZPM para Node.js

Vamos a ver cómo usar el gestor de paquetes [ZPM](https://openexchange.intersystems.com/package/ObjectScript-Package-Manager) para instalar módulos de [Node.js.](https://nodejs.org/es/). Para poder usar Node.js primero tenemos que cargar la [API nativa de Node.js](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=BJSNAT) El principio aplicado con ZPM es similar al de los módulos de Python y funciona perfectamente. Tal y como veremos en el ejemplo de [github](https://github.com/rcemper/Using-ZPM-for-Node.js) ZPM se encarga de todo! En el ejemplo vamos a usar InterSystems IRIS con WebSockets de forma nativa como un [cliente](https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?&LIBRARY=%25SYS&PRIVATE=1&SYSTEM=0&CLASSNAME=%25Net.WebSocket.Client) eco (devuelve el texto introducido). Existen varios ejemplos como [este](https://community.intersystems.com/post/websocket-client-iris-internal), o este [otro](https://openexchange.intersystems.com/package/IRIS-internal-WebSocket-Client) en los que se puede ver a IRIS actuando de cliente. La lógica del ejemplo siempre es la misma, después de la inicialización automática del servicio de eco, se escribe un comando y se espera su respuesta: * seleccionar el servidor eco (en nuestro caso usamos la opción 1) * escribes el texto que se va a transmitir y añades una línea con el carácter * para indicar que ya no hay más texto * las respuestas se ven con el comando **S** * para detener el servicio y salir se emplea **X** Aclaración: como el servicio se ejecuta en segundo plano su salida estándar no es visible, pero se escribe un archivo que puede ser volcado mediante el comando  **L** ## Requisitos previos Asegúrate de tener instalado git y el escritorio Docker. ## Instalación Clona el repositorio en un directorio local: $ git clone https://github.com/rcemper/Using-ZPM-for-Node.js Abre el terminal en este directorio y ejecuta: $ docker-compose build (esto puede llevar algún tiempo hasta que se complete) Ejecuta el contenedor IRIS con este proyecto: $ docker-compose up -d ## Cómo probarlo Utilizando el Terminal de IRIS: $ docker-compose exec iris iris session iris "##class(rccjs.WSockNodeJs).Run()" *** Welcome to WebSocket by Node.js Native API Demo *** ********* Node.js process id = 1650 ********* Known Hosts (*=Exit) [1]: 1 ws://echo.websocket.org/ 2 --- server 2 ---- 3 --- server 3 ---- select (1): 1 ==> ws://echo.websocket.org/ # Enter text to get echoed from WebSocketClient Service Terminate with * at first position or get generated text by % or append new text with @ 1 hello this is connected over 2 IRIS Native API for Node.js 3 ----------------- 4 * Select action for WebClient Service New EchoServer (E), New Text(N), Send+Listen(S) Show Log (L), Exit+Stop WsClient(X) [S] :s %%%%%%%%%%%%%%%%%%%%%%%%%% ******* 3 Replies ******* 1 hello this is connecte over  2 IRIS Native API for Node.js  3 -----------------  Select action for WebClient Service New EchoServer (E), New Text(N), Send+Listen(S) Show Log (L), Exit+Stop WsClient(X) [S]: L %%%%%%%%%%%%%%%%%%%%%%%%%% platform = linux: ubuntu ***************************** *** no IRIS host defined **** Connect to IRIS on: localhost Successfully connected to InterSystems IRIS. *** wait 3sec for request *** ******* Startup done ******** *** wait 3sec for request *** *** wait 3sec for request *** *** wait 3sec for request *** *** wait 3sec for request *** echoserver: ws://echo.websocket.org/ ** Lines to process: 3 ** ********* next turn ********* * WebSocket Client connected * ****** Client is ready ****** Line: 1 text> 'hello this is connecte over ' Received: 1 > 'hello this is connecte over ' Line: 2 text> 'IRIS Native API for Node.js ' Received: 2 > 'IRIS Native API for Node.js ' Line: 3 text> '----------------- ' Received: 3 > '----------------- ' ******* lines sent: 3 ****** *** replies received: 3 **** *** wait 3sec for request *** *** wait 3sec for request *** Select action for WebClient Service New EchoServer (E), New Text(N), Send+Listen(S) Show Log (L), Exit+Stop WsClient(X) [S] :x %%%%%%%%%%%%%%%%%%%%%%%%%% La carga del API nativa para Node.js se realiza en el iris.script: do $System.OBJ.LoadDir("/opt/irisapp/src","ck") zn "USER" zpm "load /opt/irisapp/ -v":1:1 Que a su vez es ejecutado en el Dockerfile.   Este artículo está inspirado en [otro](https://community.intersystems.com/post/deploying-intersystems-iris-embedded-python-solutions-zpm-package-manager)  de  @Evgeny.Shvarov, pero en este caso se aplica a los módulos de **Node.js** y usa [este](https://community.intersystems.com/post/websocket-client-js-iris-native-api-docker-micro-server) ejemplo de la API nativa de IRIS para Node.js.  
Artículo
Muhammad Waseem · 23 ago, 2022

Generar y validar código CAPTCHA

Supongamos que has desarrollado tu propia aplicación web con las tecnologías de InterSystems y ahora quieres realizar una validación de Captcha en el lado del cliente para saber si el usuario es humano o no y hacerla más segura. Existen algunos frameworks modernos para abordar el problema de Captcha, pero la mayoría de ellos necesita acceso a Internet para generar códigos y, a veces, son complejos de implementar. Toma esto como un ejemplo básico, teniendo en cuenta que el reconocimiento de imágenes se ha vuelto demasiado bueno. Por eso hoy en día se tiende a ver más Captchas de reconocimiento de patrones que de solo lectura. (Por ejemplo, hacer clic en todas las imágenes que tengan un escaparate). Si necesitas algo más complejo, adelante, desarrolla, mejora este código y compártelo. Sigue leyendo para descubrir cómo usar este ejemplo básico: Demo.Captcha clase Usando esta clase, puedes crear archivos de imagen Captcha en un directorio físico para que se muestren en tu aplicación. Ten en cuenta que el directorio de imágenes donde se crean las imágenes debe estar disponible para que tu aplicación web acceda a esas imágenes. Para crear la imagen Captcha, llama al siguiente método pasando el nombre completo del archivo como parámetro: Crear archivo de imagen Set tCount = $Increment(^CacheTemp("CAPTCHA",0)) Set tPath = "C:\InterSystems\Ensemble201710\CSP\user\images\captcha\"If '##class(%File).DirectoryExists(tPath) { Set tSC = ##class(%File).CreateDirectoryChain(tPath) } Set tFileName = %session.SessionId_tCount_".bmp" Set tFullName = tPath_tFileNameSet tCaptcha = ##class(Demo.Captcha).CreateImage(tFullName) Write tCaptcha,! En tu Sistema > Administración de seguridad > Aplicaciones web > Editar aplicación web, ten en cuenta que el CSP Files Physical Path es el mismo en el código anterior añadiendo la pieza "\images\captcha\". Después de ejecutar el código anterior para crear las imágenes Captcha, echa un vistazo a esa ruta. Verás así todas las imágenes Captcha generadas (ten en cuenta que necesitarás un objeto %session): El método CreateImage() de la clase Demo.Captcha también devolverá el código Captcha generado que te permitirá validar contra el código Captcha introducido por el usuario en tu aplicación web. Ejemplo Para hacerlo más sencillo, he preparado un archivo CSP simple que representa una imagen Captcha y la valida. Puedes importar el archivo XML adjunto y verificar y cambiar las rutas según sea necesario para que coincidan con tu aplicación web CSP. Instalando en el namespace USER, abre Studio e importa el archivo XML; Abre el archivo captcha.csp en tu navegador; Haz clic en el botón "cambiar imagen" para crear y mostrar una nueva imagen Captcha si es necesario; Introduce el código de la imagen en el cuadro de entrada en blanco; Haz clic en el botón validar y verifica el mensaje; Importación de clases Abre Studio; Selecciona el namespace USER; Ve a Herramientas->Importar local y selecciona el archivo captcha.xml que has descargado; Importa esas clases según la imagen siguiente; Cambia la ruta de las imágenes Captcha según tu aplicación web CSP; Abre los archivos captcha.csp en tu navegador web haciendo clic en el botón Ver página web , en Studio; Si necesitas cambiar la imagen, haz clic en el botón Cambiar imagen; Mira el directorio de imágenes Captcha; Introduce el código Captcha en el cuadro de entrada en blanco y haz clic en validar; Mira los resultados; Repite estos pasos tanto como quieras; No dudéis en poneros en contacto conmigo si tenéis alguna duda. Espero que os resulte útil.
Artículo
Ricardo Paiva · 12 dic, 2022

Aplicación IRIS RAD Studio

@José.Pereira y yo hemos creado un proyecto del que queremos hablar en este artículo. ¿Qué es IRIS RAD Studio? IRIS RAD Studio es nuestra idea de una solución low-code para hacer más fácil la vida del desarrollador. ¿Por qué? ¿Y por qué no? Las aplicaciones low-code se han hecho muy populares últimamente. La imagen de abajo muestra el "Cuadrante mágico" ofrecido por la consultora Gartner para plataformas de aplicaciones low-code empresariales, y que muestra lo interesante que es este mercado. RESTForms2 RESTForms2 es una de las partes principales de nuestro proyecto. Como describió @Eduard.Lebedyuk en este artículo, RESTForms es un backend genérico REST API para aplicaciones web modernas. RESTForms - REST API para tus clases Características Al usar RESTForms2, las clases persistenes heredadas de dc.irisrad.FormAdaptor consiguen automáticamente una forma CRUD (Create, Read, Update, Delete). Las formas disponibles se muestran en la página de inicio. Cada forma, además de las características básicas de CRUD, también tiene: Búsqueda general Búsqueda condicional y avanzada para un campo específico Creación de filtros combinados Agrupación Exportación de Datagrid a Excel Además de la generación automática de formas basadas en JSON, ofrecida por RESTForms2, una cosa que queremos ofrecer a los usuarios es nuestro Import Wizard - Asistente de Importación. Import Wizard La funcionalidad presentada anteriormente con el proyecto iris-analytics-package permite a cualquier usuario: Importar un fichero CSV Crear una clase persistente según el fichero importado Crear un cubo para ser utilizado por InterSystems Analytics Generar un dashboard (cuadro de mando) de muestra, basado en los datos ¿Qué pasaría si también se pudiera editar este fichero? Añadir nueva información, editar la información en CSV, o incluso eliminar lineas innecesarias?! ¡Con IRIS RAD Studio se puede! 😃 Cómo crear nuevas clases Imagina que tienes clases existentes que heredan de dc.irisrad.FormAdaptor, ahora puedes aprovechar las funcionalidades de RAD Studio. Para clases nuevas, creamos un endpoint en el que se pone la clase deseada en formato JSON... y voilà! Ejemplo: { "name": "My.ClassName", "displayFormName": "My tasks", "displayProperty": "text", "fields": [{ "name":"text", "displayName":"Task name", "type":"%Library.String", "required": false },{ "name":"taskDate", "displayName":"Task date", "type":"%Library.TimeStamp" },{ "name":"important", "displayName":"Important", "type":"%Library.Boolean" },{ "name":"completed", "displayName":"Completed", "type":"%Library.Boolean" }]} Bastante fácil, ¿no?! Mmmm... pero puedes estarte preguntando: "¿Qué pasa si no estoy tan familiarizado con JSON, o si no entiendo nada de la parte técnica?" Calma, calma... ¡IRIS RAD Studio también ofrece una interfaz gráfica para la creación de nuevas clases! Cómo crear nuevas clases - Wizard La idea de low-code es precisamente evitar que el código sea escrito por el propio usuario. ¡Y eso incluye una clase y su propiedad en formato JSON! La interfaz ofrecida por RAD Studio permite crear el nombre de la clase y ofrece una descripción que tendrá el formulario. Al hacer clic en el botón Save se abre un cuadro de datos en el que puedes definir las propiedades de tu clase, o si prefieres llamarlo así, las columnas de tu tabla. Una vez que terminas de definir, haz clic en Compile, y estás listo para usar tu nueva forma! Plan Creemos que este proyecto tiene mucho potencial para ser explorado. Si es bien recibido por la Comunidad, nos gustaría explorar sus posibilidades y crear un itinerario con todos. Así, tendremos un producto que atienda cada vez mejor la necesidad general. Descarga https://openexchange.intersystems.com/package/iris-rad-studio iris-rad-studio en el Gran Premio de InterSystems https://openexchange.intersystems.com/contest/12