Preguntas frecuentes de InterSystems
La información sobre las propiedades definidas en una clase se puede obtener usando las siguientes clases del sistema:
%Dictionary.PropertyDefinition
El ejemplo de descripción del código es el siguiente.
InterSystems Ensemble es una plataforma de integración completa y fácil de utilizar la cual permite que los usuarios se conecten con personas, procesos y aplicaciones en un tiempo
récord.
La información sobre las propiedades definidas en una clase se puede obtener usando las siguientes clases del sistema:
%Dictionary.PropertyDefinition
El ejemplo de descripción del código es el siguiente.
El significado de cada valor de tiempo de espera es el siguiente.
1. [Tiempo de espera de respuesta del servidor]
Si el procesamiento de IRIS/Caché (ejecución de rutina o consulta) no finaliza dentro de este tiempo establecido, el navegador devolverá un error.
Por ejemplo, si este valor es 60 segundos y se necesitan 90 segundos para ejecutar una rutina/método/consulta, se producirá un error.
Una herramienta (utilidad ^GLOBUFF) está disponible para verificar el uso de la memoria caché de la base de datos para cada global.
La utilidad se puede ejecutar directamente o mediante programación en el namespace %SYS .
Así se ejecutaría directamente:
ObjectScript permite pasar cualquier número de argumentos utilizando arrays. Se hace añadiendo ... después del nombre del argumento.
Os muestro un ejemplo. En la sentencia del ejemplo, la información del argumento se establece en una variable global (una variable almacenada en la base de datos) para que pueda ser fácilmente verificada después de que se ejecute el método.
Class TEST.ARGTEST1 Extends %RegisteredObject
{
ClassMethodEn el siguiente ejemplo, un archivo de imagen se codifica en una cadena Base64 en una propiedad de clase, se guarda, se decodifica la cadena en Base64 y se restaura en otro archivo.
【Classe ejemplo】
Class User.test Extends %Persistent
{
Property pics As %GlobalBinaryStream;
}
【Cuando se importa】
set x=##class(User.test).%New() // create a new object
// prepare an image
set file=##class(%File).%New("c:\temp\Mii.png")
do file.Open("RUK\BIN\")
for {
if file.Se pueden recuperar estos datos utilizando el esquema INFORMATION_SCHEMA.
INFORMATION_SCHEMA es un esquema de sistema y no se muestra por defecto en el menú SQL del Portal de Gestión.
El método para mostrarlo es el siguiente:
.png)
El SQL para obtener el ID, el nombre del campo (COLUMN_NAME), el tipo de datos (DATA_TYPE) y la descripción (DESCRIPCIÓN) de la tabla especificada (Sample.
El lenguaje ObjectScript de InterSystems no permite definir métodos con el mismo nombre pero utilizando diferentes argumentos.
En general, se suele clasificar Objectscript como un lenguaje de programación dinámico. En ObjectScript se puede controlar libremente qué argumentos se utilizan cuando se ejecuta un método, así que a diferencia de otros lenguajes como Java, que no son lenguajes de programación dinámicos, no es necesario distinguir estrictamente los métodos por el número de argumentos en la fase de compilación.
El lenguaje ObjectScript, por tanto, no contiene la característica conocida como overloadingo sobrecarga como tal.
Puedes evitar este error especificando un objeto de tipo stream como argumento de la función %ToJSON usando durante la generación del string JSON desde el objeto dinámico.
A continuación podéis ver un ejemplo.
USER>set temp=##class(%Stream.TmpCharacter).%New()
USER>set jsonobj={}
USER>set jsonobj.pro1=["a","b","c","d"]
USER>set jsonobj.pro2=["あ","い","う","え"]
USER>do jsonobj.%ToJSON(temp)
USER>write temp.Size
51
USER>write temp.Read()
{"pro1":["a","b","c","d"],"pro2":["あ","い","う","え"]}Podéis consultar la documentación si queréis más detalles al respecto.
Podéis ver el espacio libre disponible para la base de datos usando la opción "Free space view" (Ver espacio libre) en el Management Portal: System Operation > Databases.
Y se puede obtener mediante programación a través la consulta FreeSpace de la clase del sistema SYS.Database.
.png)
Se puede obtener mediante la consulta AllFields de la clase %SYS.ProcessQuery.
Para más detalles, consultad el documento Process (Job)【IRIS】/Process (Job).
Un ejemplo de ejecución en el terminal es el siguiente:
USER>set stmt=##class(%SQL.Statement).%New()
USER>set st=stmt.%PrepareClassQuery("%SYS.ProcessQuery","AllFields")
USER>write st // you can call %Execute() when st = 1
1
USER>set rset=stmt.%Execute()
USER>while rset.%Next() { write rset.%Get("JobNumber"),"-",rset.%Get("Pid"),"-",rset.%Get("OSUserName"),"-",rset.%Get("CurrentDevice"),"-",rset.Si el valor de una variable local es un OREF o no se puede determinar usando $IsObject(). Sea v la variable que desea verificar,
$IsObject(v)=1 // v is an OREF
$IsObject(v)=0 // v is not an OREF
$IsObject(v)=-1 // v is an OREF but does not point to a valid objectTenga en cuenta que $IsObject(v) dará un error UNDEFINED si v no está definido.
Para evitar errores UNDEFINED, se recomienda utilizar $Get así:
$IsObject($Get(v))Ahora que estamos en veranito vamos a adentrarnos en el apasionante mundo de las producciones Ensemble / Iris, donde los procesos son los protagonistas y los cuelgues de servidor se vuelven el tema de conversación en la máquina de café, que por supuesto acaban en llamadas desesperadas a soporte con servidores saturados de memoria y cpu. Esos servidores calentando aún más el ambiente sin sentido alguno. Aquí es donde entra el Pool Size y su magia cuando está bien configurado.
Puedes buscar variables globales específicas en el archivo de journals usando la consulta ByTimeReverseOrder de la clase %SYS.Journal.File y la consulta List de la clase %SYS.Journal.Record
El funcionamiento de cada consulta es el siguiente:
Al crear componentes personalizados, a menudo es necesario agregar propiedades a la clase para configuraciones adicionales que se usarán en la inicialización o en la operación del componente. El nombre de la propiedad en sí no siempre es muy descriptivo, por lo que es una ventaja tener una pantalla de título personalizada con el campo.
En Caché, era bastante sencillo:
TEST> Set ^CacheMsg("EnsColumns","en-us","<property name>") = "<caption>"Pero implica un poco más de esfuerzo en IRIS...
1. Exportar API
a. Usa $system.OBJ.Export() para especificar rutinas individuales para exportar. Por ejemplo:
do $system.OBJ.Export("TEST1.mac,TEST2.mac","c:\temp\routines.xml",,.errors)El formato que debes especificar es: NombreDeLaRutina.extension, y la extensión puede ser: mac, bas, int, inc, obj.
Los errores durante la exportación se almacenan en la variable "errors".
Echa un vistazo a la referencia de clase %SYSTEM.OBJ para más detalles sobre $system.OBJ.Export().
b. Usa $system.OBJ.
Con efecto desde el 16 de mayo, la documentación para las versiones anteriores a 2017.1 de InterSystems Caché® e InterSystems Ensemble® solo estará disponible en formato PDF en la página web de Documentación de InterSystems. Las instancias de estos productos instaladas localmente, continuarán mostrando el contenido de la documentación dinámicamente.
27 de abril de 2023
InterSystems ha corregido un defecto que puede provocar la corrupción de las bases de datos y los ficheros journal en sistemas AIX con IBM POWER8 o procesadores POWER posteriores. Este defecto solo se puede desencadenar cuando se utiliza la encriptación de base de datos o de journal.
Para que se desencadene este defecto, se requieren las siguientes condiciones:
Si el entorno cumple todas estas condiciones, entonces la key utilizada para la encriptación de la base de datos o journal, puede corromperse.
¿Habéis oído hablar del Design Thinking? ¿O habéis oído hablar de ello y pensado: "Yo no soy diseñador, ¿cuándo usaría yo el Design Thinking?" Si bien un diseñador dedicado es responsable de aplicar las prácticas de Design Thinking en una organización, cualquier persona que cree productos puede beneficiarse de una mentalidad Design Thinking. Según Forbes, las prácticas de Design Thinking pueden "proporcionar un ROI del 85% o más". También puede reducir los ciclos de desarrollo de productos en un 33-50%.
InterSystems anuncia la Versión de Mantenimiento (Maintenance Release, MR) 2018.1.8 de Caché, Ensemble y HSAP. Es una versión de mantenimiento con muchas actualizaciones en una gran variedad de áreas.
Los kits completos de instalación de producto se pueden descargar de la página de distribución de software del Centro de Soporte Internacional (WRC):
Para más información sobre las correcciones en esta versión, consultad las Notas de Cambios de la Versión
InterSystems está comprometida con ofrecer un soporte de alta calidad de todos sus productos, nuevos y antiguos. A medida que los productos envejecen – Caché tiene ahora 25 años – ese soporte va evolucionando.
InterSystems IRIS fue lanzado en 2018 y es el sucesor de Caché y Ensemble. Muchos clientes de Caché/Ensemble han migrado a IRIS o tienen planes de hacerlo en los próximos años. Los clientes que siguen usando Caché o Ensemble deben tener en cuenta este anuncio importante:
InterSystems actualiza periódicamente sus políticas y prácticas de lanzamiento de nuevas versiones software para ajustarse a las necesidades de los clientes.
Ahora estamos cambiando la frecuencia de nuestras versiones de mantenimiento para que sean más predecibles para clientes y partners, y modificaremos algunas otras áreas.
En este artículo se resume la frecuencia de lanzamientos de nuestras Plataformas de datos y los cambios recientes en ellas, y se anuncian algunas actualizaciones nuevas.
Buenas a todos,
una de las herramientas potentes que tiene Intersystems es la posibilidad de implementar en el propio sistema la autenticación OAuth2. Esta herramienta nos da la posibilidad de poder controlar quien accede a nuestros recursos y como accede.
A continuación planteo una solución ante el problema de querer controlar quien accede a mis recursos y la posibilidad de monitorizarlo. Para ello deberemos seguir los siguientes pasos:
Hace unos días, publique una pregunta respecto a este tema pero la respuesta era algo mas compleja de lo que esperaba, así que para futura referencia de otras personas que tengan la misma duda he preferido documentar el proceso en un articulo.
La premisa era la siguiente, hemos comenzado a utilizar el paquete Restforms2 para tener una api CRUD que nos permita almacenar y consultar datos en la base de datos de IRIS. Pero esto no nos permite hacer todo lo que necesitamos, ni aun empleando custom querys. Por lo tanto necesitábamos emplear métodos personalizados implementados en una integración.
A lo largo de los años, me he encontrado con la necesidad de crear varios mensajes HL7 basados en un solo mensaje entrante. Por lo general, toman la forma de un pedido o son el resultado de un laboratorio. Cada vez que he afrontado el reto, he intentado empezar de cero, con la convicción de que el intento anterior podría haberse hecho mejor.
Recientemente, volvió a surgir la necesidad y pude crear una solución de la que no me avergonzaba. Mi principal preocupación era que siempre me encontraría enterrado en un BPL, o usaría ObjectScript e intentaría editar mensajes usando el método SetValueAt para la clase de mensaje HL7.
Problema
Cuando el Sistema A procesa múltiples pedidos para un solo paciente, el resultado vendrá en un solo mensaje con ORCgrp repetido con los segmentos OBR y OBX contenidos en este. El sistema B solo puede recibir un único OBR por mensaje.
15 de febrero de 2023
InterSystems ha corregido un problema que puede hacer que InterSystems IRIS® y Caché no aprovechen las páginas grandes (large pages) para memoria compartida en Windows, aunque estos productos informen de que las páginas grandes están asignadas. Esto puede afectar al rendimiento del sistema.
El problema proviene de un cambio en Windows 10 que requiere una modificación de InterSystems IRIS® y Caché. Hay que tener en cuenta que este problema también afecta a todos los productos de InterSystems que están basados en InterSystems IRIS® o Caché. El problema ocurre en las siguientes versiones de Windows:
Por lo general, si desea implementar una solución, debe agregar los elementos, configurar sus tablas de búsqueda y la configuración predeterminada manualmente.
Está bien si tiene todos los permisos y privilegios para realizar estas acciones. Si desea implementar en el servidor de producción de un cliente y no tiene los permisos, debe indicar en un documento TODOS los pasos que debe realizar el administrador de implementación.
Todos los desarrolladores hemos cometido alguna vez el error de accidentalmente dejar código temporal de depuración en lugar de eliminarlo al finalizar lo que estamos investigando.
Lo interesante de escribir en ObjectScript es que hay una forma de hacer que el código provisional sea realmente provisional y se auto-destruya automáticamente! Incluso puede hacerse de manera que el código no aparezca en tu sistema de control de código fuente, lo que puede ser útil igualmente.
El secreto radica en utilizar el "intermediate code" (.INT), que se genera cuando se compilan clases (.CLS), código de rutina (.MAC) o páginas CSP (.CSP). El código INT se utiliza entonces para crear el código OBJ, que es el que finalmente se ejecuta.
¡¡¡Hola, chicos!!!
Finalmente tuve algo de tiempo para organizar un conjunto de clases que he estado usando durante algunos años para hacerlo más fácil y terminar con el trabajo repetitivo de desarrollar integraciones usando XDBC.
Accede al repositorio de proyectos en https://github.com/cristianojs/interopway
Me registré en Open Exchange y estoy esperando la aprobación.
La idea es aumentar el proyecto con más componentes, ya tengo uno que "sube a la masa y va al horno en un rato".
Cualquier duda publicar aquí.
¡Grande Abrazo!
Grande abraço.
Las rutinas con privilegios te permiten elevar los roles de un usuario mientras las utiliza. Estas rutinas con privilegios (Privileged Routine Application) pueden utilizarse con rutinas y también con clases / métodos.
Cuando las utilices, es importante asegurarse de incluir new $ROLES, antes de elevar los privilegios con AddRoles(). Por ejemplo:
new $ROLES
set status=$System.Security.AddRoles("MyPrivilegedRoutineApplication")Buenos días,
Hemos estado indagando de qué manera activar un Servidor para Generar Tokens y un Servidor de Recursos asociado para Validar el Token. Este paso, actualmente lo hemos averiguado con el inestimable apoyo de @Alberto Fuentes de Intersystems.