Tuve el mismo problema que contaba Jerry en el siguiente enlace al conectar IRIS con el servidor SQL. Mi conexión ODBC está configurada para autenticarse mediante autenticación nativa de Windows.
¿Cómo lo solucioné yo?
Es la experiencia en el sector de la tecnología de InterSystems que resuelve algún problema en particular de una manera elegante o inusual.
Tuve el mismo problema que contaba Jerry en el siguiente enlace al conectar IRIS con el servidor SQL. Mi conexión ODBC está configurada para autenticarse mediante autenticación nativa de Windows.
¿Cómo lo solucioné yo?
Hola a todos,
Este es un rápido consejo de como usar URL en servicios RES API sin distinción de mayúsculas y minúsculas.
Si tienes una clase que extiende de %CSP.REST y Ens.BusinessService, para crear un servicoi REST API, y tienes definido tu WebApplication en minúsculas
XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
<Route Url="/user" Method="POST" Call="User"/>
<Route Url="/login" Method="POST" Call="Login"/>
</Routes>
}Solo aceptará URL en minúsculas, por ejemplo: http://myserver/myproduction/user
Una novedad que apareció en la versión 2024.1 de InterSystems IRIS for Health y que quizá te pasó desapercibida. Se trata de la capacidad de realizar una validación basada en perfiles FHIR.
En este artículo os ofreceré una visión general básica de esta funcionalidad.
Si FHIR es importante para vosotros, deberíais probar sin duda esta nueva característica, así que seguid leyendo.
Contexto
El estándar FHIR define una operación llamada $validate. Esta operación está pensada para ofrecer una API que permita validar recursos.
Esta es una consulta para los que creen que la tecnología de InterSystems les facilita la vida en su día a día, en sus proyectos de integración, o en el desarrollo de soluciones innovadoras o en la mejora y evolución de soluciones existentes.
Hola desarrolladores:
¿Conoces la IA de la Comunidad? Pues si no es así, te estás perdiendo una de las mejores aplicaciones que nos trajeron en 2024. Y te preguntarás ¿En qué consiste? Pues en una herramienta muy intuitiva para obtener respuestas acerca de la tecnología InterSystems.
¿Dónde la encuentro?
Al lado derecho de la página, justo encima de la columna de eventos, donde pone "Hacer una pregunta a la IA". Vamos a seguir el paso a paso y verás qué sencillo es.

Estoy muy emocionado de continuar con mi serie de artículos "InterSystems para Dummies", y hoy queremos contarles todo sobre una de las funciones más potentes que tenemos para la interoperabilidad.
Aunque ya las hayan probado, planeamos analizar a fondo cómo sacarles el máximo provecho y mejorar aún más nuestra producción.
En esencia, un Record Mapper es una herramienta que permite mapear datos de archivos de texto a mensajes de producción y viceversa. La interfaz del Portal de Administración, por otro lado, permite crear una representación visual de un archivo de texto y un modelo de objeto válido de esos datos para mapearlos a un único objeto de mensaje de producción persistente.
Por lo tanto, si desea importar datos de un archivo CSV a su clase persistente, puede probar con un par de clases entrantes (por FTP o directorio de archivos). ¡Pero no se apresure! Abordaremos cada uno de estos puntos a su debido tiempo.
TIP: Todos los ejemplos y clases descritos en este artículo se pueden descargar desde el siguiente enlace: https://github.com/KurroLopez/iris-recordmap-fordummies.git
Vayamos al grano y especifiquemos nuestro escenario.
Necesitamos importar información de nuestros clientes, incluyendo su nombre, fecha de nacimiento, número de identificación nacional, dirección, ciudad y país.
Abra su portal IRIS y seleccione Interoperabilidad – Crear – Record Maps.

Cree un nuevo Record Maps con el nombre del paquete y la clase.

En nuestro ejemplo, el nombre del paquete es Demo.Data, mientras que el nombre de la clase es PersonalInfo.
El primer paso es configurar el archivo CSV. Esto significa determinar el carácter separador, si los campos de cadena tienen comillas dobles, etc.

Si usa el sistema operativo Windows, el terminador de registro común es CRLF (Char(10) Char(12)).
Como mi archivo CSV es estándar, separado por punto y coma (;), debo definir el carácter del separador de campos.
Ahora, voy a declarar los campos del perfil del cliente (nombre, apellidos, fecha de nacimiento, número de identificación nacional, dirección, ciudad y país).

Esta es una definición básica, pero puedes establecer más condiciones con respecto a tu archivo CSV si lo deseas.

Recuerda que, por defecto, un campo %String tiene una longitud máxima de 50 caracteres. Por lo tanto, actualizaré este valor para permitir más caracteres en el campo de dirección (un máximo de 100).
También definiré el formato de fecha usando el formato ISO (aaaa-mm-dd), que corresponde al número 3.
Además, haré obligatorios los campos de nombre, apellido y fecha de nacimiento.

¡Listo! ¡Presionemos el botón "Generar" para crear la clase persistente!

Let's take a look at the generated class:
/// THIS IS GENERATED CODE. DO NOT EDIT.<br/>
/// RECORDMAP: Generated from RecordMap 'Demo.Data.PersonalInfo'
/// on 2025-07-14 at 08:37:00.646 [2025-07-14 08:37:00.646 UTC]
/// by user SuperUser
Class Demo.Data.PersonalInfo.Record Extends (%Persistent, %XML.Adaptor, Ens.Request, EnsLib.RecordMap.Base) [ Inheritance = right, ProcedureBlock ]
{
Parameter INCLUDETOPFIELDS = 1;
Property Name As %String [ Required ];
Property Surname As %String [ Required ];
Property DateOfBirth As %Date(FORMAT = 3) [ Required ];
Property NationalId As %String;
Property Address As %String(MAXLEN = 100);
Property City As %String;
Property Country As %String;
Parameter RECORDMAPGENERATED = 1;
Storage Default
{
<Data name="RecordDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Name</Value>
</Value>
<Value name="3">
<Value>%Source</Value>
</Value>
<Value name="4">
<Value>DateOfBirth</Value>
</Value>
<Value name="5">
<Value>NationalId</Value>
</Value>
<Value name="6">
<Value>Address</Value>
</Value>
<Value name="7">
<Value>City</Value>
</Value>
<Value name="8">
<Value>Country</Value>
</Value>
<Value name="9">
<Value>Surname</Value>
</Value>
</Data>
<DataLocation>^Demo.Data.PersonalInfo.RecordD</DataLocation>
<DefaultData>RecordDefaultData</DefaultData>
<ExtentSize>2000000</ExtentSize>
<IdLocation>^Demo.Data.PersonalInfo.RecordD</IdLocation>
<IndexLocation>^Demo.Data.PersonalInfo.RecordI</IndexLocation>
<StreamLocation>^Demo.Data.PersonalInfo.RecordS</StreamLocation>
<Type>%Storage.Persistent</Type>
}
}
Como puede ver, cada propiedad tiene el nombre de los campos en nuestro archivo CSV.
En este punto, crearemos un archivo CSV con la siguiente estructura para probar nuestro Record Mapper:
Name;Surname;DateOfBirth;NationalId;Address;City;Country Matthew O.;Wellington;1964-31-07;208-36-1552;1485 Stiles Street;Pittsburgh;USA Deena C.;Nixon;1997-03-03;495-26-8850;1868 Mandan Road;Columbia;USA Florence L.;Guyton;2005-04-10;21 069 835 790;Invalidenstrasse 82;Contwig;Germany Maximilian;Hahn;1945-10-17;92 871 402 258;Boxhagener Str. 97;Hamburg;Germany Amelio;Toledo Zavala;1976-06-07;93789292F;Plaza Mayor, 71;Carbajosa de la Sagrada;Spain
Puedes usarlo como prueba ahora.
Haz clic en "Seleccionar archivo de muestra", selecciona la muestra en /irisrun/repo/Samples y elige PersonalInfo-Test.csv.

En este momento podrás observar cómo se importan tus datos:

Justo cuando crees que todo está listo, recibes una nueva especificación de tu jefe:
"Necesitamos los datos para poder cargar el número de teléfono del cliente y almacenar más de uno (fijo, móvil, etc.)".
Uy... Necesito actualizar mi Record Map y agregar un número de teléfono. Sin embargo, debería tener más de uno... ¿Cómo puedo hacerlo?
Nota: Puedes hacerlo directamente en la misma clase. Sin embargo, crearé una nueva para fines explicativos y la guardaré en los ejemplos. De esta manera, puedes revisar y ejecutar el código siguiendo todos los pasos de este artículo.
Bien, es hora de reabrir el Record Map que acabamos de crear.
Agrega el nuevo campo "Phone", pero recuerda indicar que este campo es "Repetido".

Dado que hemos asignado este campo como "Repetido", debemos definir el carácter separador para los datos replicados. Este indicador se encuentra en el mismo lugar donde normalmente especificamos el separador de campo.

¡Perfecto! Carguemos el archivo CSV de ejemplo con los números de teléfono separados por #.

Si echamos un vistazo a la clase persistente que hemos producido, podemos ver que el campo "Phone" es de tipo Lista de %String:
Property Phone As list Of %String(MAXLEN = 20);
Es una muy buena pregunta, querido lector.
Intersystems IRIS nos proporciona dos clases de entrada: EnsLib.RecordMap.Service.FileServiceEnsLib.RecordMap.Service.FTPService
No profundizaré en estas clases porque sería demasiado largo. Sin embargo, podemos revisar sus funciones principales.
En resumen, el servicio monitoriza los procesos en una carpeta definida, captura los archivos almacenados en ese directorio, los carga, los lee línea por línea y envía ese registro al proceso de negocio designado.
Esto ocurre tanto en el servidor como en los directorios FTP.
Vayamos al grano…
Nota: Presentaré mis ejemplos utilizando la clase EnsLib.RecordMap.Service.FileService. Sin embargo, la clase EnsLib.RecordMap.Service.FTPService realiza las mismas operaciones.
Si ha descargado el código de ejemplo, verás que se ha creado una producción con dos componentes:
Una clase de servicio (EnsLib.RecordMap.Service.FileService), que cargará los archivos, y una clase de negocio (Demo.BP.ProcessData), que procesará cada uno de los registros leídos del archivo. En este caso, usaremos este último solo para ver los rastros de comunicación.
Es importante configurar algunos parámetros en la clase del Business Service.

File Path: Es un registro que la clase utiliza para monitorear si hay archivos pendientes de procesamiento. Al colocar un archivo en este directorio, el proceso de carga se activa automáticamente y envía cada registro a la clase definida como Business Process.
File Spec: Es un patrón de archivo para buscar (por defecto, es *, pero podemos definir algunos archivos que deseamos diferenciar de otros procesos). Por ejemplo, podemos tener dos clases de escucha entrantes en el mismo directorio, cada una con una clase RecordMap diferente. Podemos asignar la extensión .pi1 a los archivos que procesará la clase PersonalInfo, mientras que .pi2 marcará los archivos que serán procesados por la clase PersonalInfoPhone.
Archive Path: Es un directorio donde se mueven los archivos después de ser procesados.
Work Path: Es una ruta donde el adaptador debe colocar el archivo de entrada mientras procesa los datos. Esta configuración es útil cuando se usa el mismo nombre de archivo para envíos repetidos. Si no se especifica WorkPath, el adaptador no moverá el archivo durante el procesamiento.
Call Interval: Es la frecuencia (calculada en segundos) de las comprobaciones del adaptador para los archivos de entrada en las ubicaciones especificadas.
RecordMap: Es el nombre de la clase Record Map, que contiene la definición de los datos en el archivo.
Target Config Name: Es el nombre del Proceso de Negocio que maneja los datos almacenados en el archivo.

Subdirectory Levels: Es un espacio donde el proceso busca un nuevo archivo. Por ejemplo, si un proceso añade un archivo cada día (lunes, martes, miércoles, jueves y viernes), buscará en todos los subdirectorios, comenzando por el directorio raíz, siempre que especifiquemos el nivel 1. Por defecto, el nivel 0 significa que solo buscará en el directorio raíz.
Delete From Server: Esta función indica que si no se especifica el directorio de los archivos procesados, el archivo se eliminará del directorio raíz.
File Access Timeout: Es un tiempo definido (calculado en segundos) para acceder al archivo. Si el archivo es de solo lectura o hay algún problema que impida el acceso al directorio, se mostrará un error.
Header Count: Es una característica importante que indica el número de encabezados que se deben ignorar. Por ejemplo, si el archivo tiene un encabezado que especifica los campos que contiene, debe indicar cuántas líneas de encabezado contiene para que se puedan ignorar y solo se puedan leer las líneas de datos.
Como mencioné anteriormente, el proceso de carga se activa cuando se coloca un archivo en el directorio del proceso.
Nota: Las siguientes instrucciones se basan en el código de ejemplo. En la carpeta "samples", encontrará el archivo PersonalInfoPhone-Test.csv. Debe copiar este archivo a la carpeta del proceso para que se procese automáticamente.
NOTA: Si está trabajando con Docker, use el siguiente comando:
docker cp .\PersonalInfoPhone-Test.csv containerId:/opt/irisbuild/process/containerId es el ID de su contenedor, ej: docker cp .\PersonalInfoPhone-Test.csv 66f96b825d43398ba6a1edcb2f02942dc799d09f1b906627e0563b1392a58da1:/opt/irisbuild/process/`

Para cada registro, lanza una llamada al proceso de negocio con todos los datos.

¡Excelente trabajo! En tan solo unos pasos, lograste crear un proceso que puede leer archivos de un directorio y administrar esos datos de forma rápida y sencilla. ¿Qué más podrías pedir a tus procesos de interoperabilidad?
Nadie quiere tener una vida compleja, pero te prometo que te enamorarás de los Complex Record Map .
Los Complex Record Map son precisamente lo que su nombre indica. Se trata de una combinación de varios Record Maps que nos proporciona información más completa y estructurada.
Imaginemos que nuestro jefe nos contacta y nos plantea los siguientes requisitos:
“Necesitamos información del cliente con más números de teléfono, incluyendo códigos de país y prefijos. También necesitamos más direcciones de contacto, incluyendo códigos postales, países y nombres de estados.
Un cliente puede tener un número de teléfono, dos o ninguno”.
Si necesitamos más información sobre números de teléfono y direcciones, como hemos visto anteriormente, incluir esta información en una sola línea sería demasiado complicado. Separemos las diferentes partes que necesitamos:
Para cada sección, crearemos un alias para diferenciar el tipo de información que incluye.
Construyamos cada sección:
Paso 1
Diseña un nuevo Record Maps para la información del cliente (Nombre, Apellidos, Fecha de Nacimiento y Documento Nacional de Identidad) e incluya un identificador para indicar que se trata de la sección USER.

El nombre de la sección debe ser único para los tipos de datos "USER", ya que son responsables de configurar las columnas y posiciones de cada dato. El contenido debería ser similar al siguiente: USER|Matthew O.;Wellington;1964-07-31;208-36-1552 En NEGRITA, el nombre de la sección, en CURSIVA, el contenido.
Paso 2 Crea las secciones PHONE y ADDRESS para los números de teléfono y las direcciones postales.
Recuerda especificar el nombre de la sección y activar la opción Complez Record Map.


Ahora deberíamos tener tres clases:
Paso 3 Completa el Complex Record Map.
Abre la opción "Complex Record Maps":

Lo primero que vemos aquí es una estructura con un encabezado y un pie de página. El encabezado puede ser otro mapa de registros para almacenar información del paquete de datos (por ejemplo, información del departamento del usuario, etc.).
Dado que estas secciones son opcionales, las ignoraremos en nuestro ejemplo.

Establezca el nombre de este registro (por ejemplo, PersonalInfo) y agregue nuevos registros para cada sección.

Si deseamos que uno de los apartados tenga repeticiones, deberemos indicar los valores mínimos y máximos de repetición.

De acuerdo a las especificaciones anteriores, el archivo con la información lucirá así:
USER|Matthew O.;Wellington;1964-07-31;208-36-1552
PHONE|1;305;2089160
PHONE|1;805;9473136
ADDR|1485 Stiles Street;Pittsburgh;15286;PA;USA
Si queremos cargar un archivo, necesitamos un servicio que pueda leer este tipo de archivos, e Intersystems IRIS nos proporciona dos clases de entrada para eso:
EnsLib.RecordMap.Service.ComplexBatchFileServiceEnsLib.RecordMap.Service.ComplexBatchFTPService Como mencioné anteriormente, usaremos la clase EnsLib.RecordMap.Service.ComplexBatchFileService como ejemplo. Sin embargo, el proceso para FTP es idéntico.
Utiliza la misma configuración que el Record Map, excepto por el número de línea del encabezado, porque este tipo de archivo no necesita uno:

Como mencioné anteriormente, el proceso de carga se activa cuando se coloca un archivo en el directorio del proceso.
Nota: Las siguientes instrucciones se basan en el código de ejemplo.
En la carpeta "samples", encontrará el archivo PersonalInfoComplex.txt. Debe copiar este archivo a la carpeta del proceso para que se procese automáticamente.
NOTA: Si trabaja con el ejemplo de Docker, utilice el siguiente comando:
docker cp .\ PersonalInfoComplex.txt containerId:/opt/irisbuild/process/p
containerId es el id de su contenedor, ex: docker cp .\ PersonalInfoComplex.txt 66f96b825d43398ba6a1edcb2f02942dc799d09f1b906627e0563b1392a58da1:/opt/irisbuild/process/
Aquí podemos ver cada fila llamando al Business Service:



Como ya se habrá dado cuenta, los Record Maps son una herramienta potente para importar datos de forma compleja y estructurada. Permiten guardar información en tablas relacionadas o procesar cada dato de forma independiente.
Gracias a esta herramienta, puede crear rápidamente procesos de carga de datos por lotes y almacenarlos sin necesidad de realizar lecturas complejas de datos, separación de campos, validación de tipos de datos, etc.
Espero que este artículo le sea útil.
Nos vemos en el próximo "InterSystems para Dummies".
¡Hola a todos! Tras incorporarme recientemente a InterSystems, me di cuenta de que, a pesar de tener una Community Edition totalmente gratuita y genial, no está muy claro cómo conseguirla. Decidí escribir una guía destacando todas las diferentes formas en que podéis acceder a la Community Edition de InterSystems IRIS:
Trabajar con una instancia en contenedor de la Community Edition es el enfoque recomendado para quienes son nuevos en el desarrollo con InterSystems IRIS, y en mi opinión es el más sencillo. InterSystems IRIS Community Edition se puede encontrar en DockerHub; si tenéis una cuenta SSO de InterSystems, también podéis encontrarla en el InterSystems Container Registry.
En cualquiera de los casos, descargaréis la imagen que necesitéis usando la CLI de Docker:
docker pull intersystems/iris-community:latest-em
// or
docker pull containers.intersystems.com/intersystems/iris-community:latest-emA continuación, tendréis que iniciar el contenedor: para poder interactuar con IRIS desde fuera del contenedor (por ejemplo, para usar el portal de administración) necesitaréis publicar algunos puertos. El siguiente comando ejecutará el contenedor de IRIS Community Edition con los puertos del superserver y del servidor web publicados; tened en cuenta que no podéis tener nada más en ejecución que dependa de los puertos 1972 o 52773.
docker run --name iris -d --publish 1972:1972 --publish 52773:52773 intersystems/iris-community:latest-em¿Usas Office 365 y Teams en tu organización?
Si es así, estás de suerte, te voy a enseñar cómo crear un agente para Copilot que te permitirá buscar información directamente en la documentación de IRIS. Es un proceso rápido y sencillo que te ayudará a agilizar tus búsquedas.
Además, la nueva versión de Office 365 incluye una versión gratuita de Copilot que puedes descargar y anclar fácilmente en Teams.
Ve al menú Aplicaciones, busca Copilot y haz clic en Agregar. En ese momento comenzará la instalación de Copilot dentro de Teams.
Quizá esto sea bien conocido, pero quería ayudar a compartirlo.
Considerad que tenéis las siguientes definiciones de clases persistentes:
Una clase Factura con una propiedad que referencia a Proveedor.
Anteriormente, entrenamos nuestro modelo mediante Machine Learning. Sin embargo, los datos de muestra que utilizamos se generaron directamente a partir de instrucciones de insert.
Hoy aprenderemos a cargar estos datos directamente desde un archivo.
Para habilitar la funcionalidad de interoperabilidad despues de crear un Namespace, use el método EnableNamespace de la clase %EnsembleMgr:
do ##class(%EnsembleMgr).EnableNamespace()
InterSystems IRIS permite ejecutar consultas SQL directamente desde ObjectScript mediante:
Que es SQL (Structured Query Language) es un lenguaje estándar utilizado para interactuar con bases de datos relacionales. Permite realizar operaciones como:
Como todos sabemos, InterSystems es una gran empresa.
Sus productos pueden ser tan útiles como complejos.
Sin embargo, a veces nuestro orgullo nos impide admitir que quizá no entendamos algunos conceptos o productos que InterSystems nos ofrece.
Hoy comenzamos una serie de artículos que explican, de forma sencilla y clara, cómo funcionan algunos de los complejos productos de InterSystems.
En este ensayo, aclararé qué es el Machine Learning y cómo aprovecharlo... porque esta vez, SABRÁS con certeza de qué estoy hablando.
En este artículo, hablaremos sobre los Mensajes Huérfanos.
Cada cuerpo de mensaje está asociado con un encabezado de mensaje que contiene los metadatos. El encabezado incluye información como el nombre de la configuración de origen, el nombre de la configuración de destino, la hora de creación, la hora de procesamiento, la referencia asociada al cuerpo del mensaje, la información de sesión, el nombre de la clase del cuerpo del mensaje y el estado del mensaje.
Esto puede hacerse con TRY-CATCH:
#dim ex As%Exception.AbstractExceptionTRY {
//Code that causes an error
}
CATCH ex {
do ex.Log()
}Si utilizáis ^%ETN, llamadlo desde la entrada BACK (BACK^%ETN).
Echad también un vistazo al artículo relacionado: Cómo obtener errores de aplicación (^ERRORS) utilizando un comando
Hola Comunidad:
Vamos con el último artículo de cómo grabaros para el bonus de vídeo del Concurso de Artículos.
No voy a entrar en cómo se hacen en edición cosas muy concretas porque varían según el programa que utilicéis. Los atajos de teclado y menús son diferentes, pero el concepto es el mismo. Vais a utilizar un programa para organizar el material grabado, eliminar lo que sobra y darle estructura. Muchos de estos softwares son gratuitos (Capcut, Canva y si no me equivoco DaVinci tuvo una versión gratuita). Yo edito con Adobe Premiere desde hace ya casi diez años (wow me hago viejo) así que si tenéis dudas de ese programa escribidme sin poblemas.
Ahí van algunos consejos concretos:
Hola Comunidad:
¿Queréis saber cómo grabaros sin que parezca que habláis desde una cueva? ¿Sois de los que decís que "no salís bien en cámara"?
Hoy voy a compartiros algunos consejos concretos que aprendí después de grabar varios años entrevistas para televisión y redes. Os recuerdo que son consejos por si estáis pensando aprovecharos del bonus de vídeo del Concurso de Artículos. No obstante, son consejos que seguro os sirven para presentar webinars, videollamadas y grabaros en general.
¡Hola!
¿Conocéis ya la IA de la Comunidad? ¿Qué os parece?
Este año intentaremos potenciar mucho esta herramienta. Pronto veréis mejoras en la misma, y espero que le hayáis dado una oportunidad. Sentíos libres de comentar cualquier cosa acerca de ella (o preguntarme por privado si tenéis dudas de cómo usarla).
¿Os resultan útiles sus respuestas?
¡Que tengáis muy buen día!
¡Hola a todos!
Muchos sabéis que Global Masters está activo de nuevo. Otros quizás no sepáis en qué consiste.
Global Masters es un programa de recompensas donde se os premia por participar en la comunidad: escribir artículos, comentar, realizar desafíos (conocidos como Asks)
¿Y qué premios podéis conseguir? ¡Vamos a verlo!
En la última competición de InterSystems "Convirtiendo Ideas en Realidad", estuve explorando el portal de ideas en busca de problemas de interfaz de usuario para intentar resolverlos.
Si queréis generar un error personalizado arbitrario en un bloque TRY, podéis pasar una excepción con un throw de la siguiente manera. En el siguiente ejemplo, se genera un error personalizado si el valor de Stcount es menor que 1.
A la hora de construir una imagen de IRIS, podéis usar archivos CPF Merge.
Aquí tenéis un ejemplo de CPF Merge:
[Actions]
CreateDatabase:Name=IRISAPP_DATA,Directory=/usr/irissys/mgr/IRISAPP_DATA
CreateDatabase:Name=IRISAPP_CODE,Directory=/usr/irissys/mgr/IRISAPP_CODE
CreateNamespace:Name=IRISAPP,Globals=IRISAPP_DATA,Routines=IRISAPP_CODE,Interop=1
ModifyService:Name=%Service_CallIn,Enabled=1,AutheEnabled=48
CreateApplication:Name=/frn,NameSpace=IRISAPP,DispatchClass=Formation.REST.Dispatch,AutheEnabled=48
ModifyUser:Name=SuperUser,PasswordHash=a31d24aecc0bfe560a7e45bd913ad27c667dc25a75cbfd358c451bb595b6bd52bd25c82cafaa23ca1dd30b3b4947d12d3bb0ffb2a717df29912b743a281f97c1,0a4c463a2fa1e7542b61aa48800091ab688eb0a14bebf536638f411f5454c9343b9aa6402b4694f0a89b624407a5f43f0a38fc35216bb18aab7dc41ef9f056b1,10000,SHA512
El archivo CPF Merge es un archivo de texto que, por ejemplo, contiene un conjunto de acciones. En este caso, creamos dos bases de datos, un namespace, habilitamos el servicio CallIn, creamos una aplicación web y un usuario.
El archivo CPF Merge puede ejecutarse cuando IRIS se inicia utilizando esta variable de entorno:
ISC_CPF_MERGE_FILE=/tmp/iris.cpf
Puede ser útil usar esta variable de entorno para construir una imagen de IRIS.
Aquí tenéis un ejemplo de Dockerfile:
ARG IMAGE=intersystemsdc/iris-community:latest
FROM $IMAGE as builder
WORKDIR /irisdev/app
RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /irisdev/app
USER ${ISC_PACKAGE_MGRUSER}
COPY . /irisdev/app
ENV ISC_CPF_MERGE_FILE=/irisdev/app/merge.cpf
RUN iris start IRIS \
&& iris session IRIS < /irisdev/app/iris.script \
&& iris stop IRIS quietly
Durante la construcción, cuando se ejecuta el comando iris start IRIS, se ejecuta el archivo CPF Merge.
¡Esperamos que esto os sea de ayuda!
Se puede obtener con una consulta de lista de la clase %SYS.Namespace.
1. Creáis una rutina como esta:
getnsp
set statement=##class(%SQL.Statement).%New()
set status=statement.%PrepareClassQuery("%SYS.Namespace","List")
set resultset=statement.%Execute()
while resultset.%Next() {
write resultset.%Get("Nsp"),!
}
quit2. Ejecutadla en vuestro terminal.
El método para ejecutar consultas de clase presentado en este artículo se puede aplicar en una variedad de casos.
InterSystems IRIS proporciona un entorno completo para el desarrollo de aplicaciones, diseñado para crear aplicaciones sofisticadas centradas en datos y análisis intensivo, conectando silos de datos y aplicaciones. Está preparado para trabajar con todas las tecnologías comunes de desarrollo de manera abierta y basada en estándares, y admite tanto la programación del lado del servidor como del lado del cliente.
La capacidad de reenviar mensajes fácilmente siempre ha sido una de las características más destacadas de nuestras capacidades de interoperabilidad.
Con la versión 2024.3 que se lanzará pronto (ya disponible como Developer Preview), ¡lo hemos hecho aún más sencillo!
Por defecto, el orden de las columnas en una tabla lo determina automáticamente el sistema. Para cambiar el orden, estableced explícitamente el orden de cada propiedad utilizando la palabra clave SqlColumnNumber al definir la clase.
Ejemplo:
Property Name As %String [SqlColumnNumber = 2];
Por favor, consultad la documentación a continuación.
Si queréis cambiar el nombre de la tabla SQL, especificad SqlTableName. Si queréis cambiar el nombre de la columna (nombre del campo), especificad SqlFieldName.
Si el archivo de journal es demasiado grande para buscarlo o filtrarlo mediante el Portal de administración, podemos consultarlo mediante los dos métodos siguientes.
① Usando la utilidad ^JRNDUMP
② Usandolo en código
================================================== ==========
① Usando la utilidad ^JRNDUMP. Por ejemplo, si deseamos seleccionar todos los registros del archivo de journal que incluyen la referencia global ^ABC, hagamos lo siguiente:
*Ejecuta todos los comandos a continuación en el espacio de nombres %SYS.
He estado trabajando en este proceso con algunos compañeros de equipo y pensé que podría ser útil para otros, especialmente si trabajáis con HL7 y Ensemble/HealthConnect/HealthShare y rara vez os aventuráis más allá de la sección de Interoperabilidad.
Primero, me gustaría establecer que este tutorial es una extensión de la documentación ya existente sobre la importación y exportación de datos SQL, que se encuentra aquí: https://docs.intersystems.com/iris20241/csp/docbook/DocBook.UI.Page.cls?KEY=GSQL_impexp#GSQL_impexp_import
Escribo esto para compartir algo que me pasó anoche: ¡¡¡IRIS 2024.3 ya no viene con Python por defecto!!!
¡Eso significa que hay que instalarlo uno mismo como usuario! 😅 La ventaja es que puedo elegir mi versión de Python 😁🤭💃 Pero el problema es que, al principio... no sabía qué hacer 😥. Al revisar la comunidad (me gusta mucho más que la documentación oficial, lo siento equipo de documentación de InterSystems 😓), encontré el siguiente enlace:
https://docs.intersystems.com/iris20242/csp/docbook/DocBook.UI.Page.cls…
Hola a todos, hoy comentamos con un ejemplo cómo solucionar problemas relacionados con el TimeOut cuando se hacen llamadas a servicios SOAP.
Tomemos como ejemplo aplicaciones que proporcionen servicios SOAP que utilizan consultas SQL basadas en "DSTIME" para devolver registros que han sido añadidos o modificados recientemente. Como estos registros no cambian con frecuencia, estas consultas suelen devolver un número reducido de registros, lo cual implica un tiempo de procesamiento corto.