Artículo
· 1 ago, 2019 Lectura de 7 min
Extensiones de lenguaje

¡Hola a tod@s!

En este artículo trataré una característica particular de Caché, muy útil, pero que probablemente no se conoce ni se usa bien. Me refiero a la función de Extensiones de lenguaje.

Esta característica permite extender los comandos, variables especiales y funciones disponibles en Caché Object Script con comandos, variables especiales y funciones propias. Esta funcionalidad también se aplica a otros idiomas que Caché admite en el servidor, incluidos Caché Basic y Multivalue Basic.

¿Por qué necesitaría o querría agregar nuevos comandos?

1 0
0 226
Artículo
· 17 dic, 2020 Lectura de 3 min
Cómo crear código de "Solo escritura" (Irónicamente)

Uno de los principales beneficios de ObjectScript es la velocidad y eficiencia que ofrece a un desarrollador experimentado. Veamos un ejemplo de todos los beneficios que se pueden obtener con ObjectScript.

Imagina que tienes una clase que almacena nombres de sus usuarios. Llamaremos a la clase **Data.User**, y le daremos las mismas propiedades que tiene una cadena _Name_. A continuación, necesitaremos un método para crear un nuevo usuario o actualizar uno ya existente. Un enfoque inexperto y simplista sería muy similar al siguiente ejemplo:

3 0
0 105
Artículo
· 29 jul, 2021 Lectura de 2 min
Condiciones WHERE estáticas

En SQL, la condición más frecuente WHERE se relaciona principalmente con el contenido de las filas en las que trabajas.
Por lo tanto, debe calcularse y verificarse para cada fila a la que accedas.
Distinto es el caso (y por eso la llamé ESTÁTICA) de una condición WHERE independiente de las filas a las que accedes.

0 0
0 149

En este artículo, explicaré el uso de las tablas %SQL_Diag.Result y %SQL_Diag.Message junto con la nueva funcionalidad LOAD DATA.

Se recomienda revisar primero la documentación LOAD DATA.

Después del éxito de una operación, LOAD DATA inserta un registro en la tabla %SQL_Diag.Result y los detalles se insertan en la tabla %SQL_Diag.Message

A continuación se muestra el comando básico cuando la tabla ya está creada y el archivo de origen no contiene una fila de encabezado.

LOAD DATA FROM FILE 'C://TEMP/mydata.txt' 
INTO MyTable

El nombre del archivo debe incluir un sufijo .txt o .csv (valores separados por comas) y tanto el origen como el destino tienen la misma secuencia de columnas de datos.

0 0
0 119

Para todos aquellos que aún utilizáis el IDE Studio para programar con ObjectScript y vais a pasar por el proceso de migración a VS Code, ¿sabíais que hay una sección en la documentación de VS Code justo para vosotros? Echad un vistazo al apartado Migración desde Studio. Incluye los siguientes aspectos:

  • Edición del lado del servidor y control de código fuente
  • Proyectos de Studio
  • Importación de definiciones de servidor desde el Registro de Windows
  • Carga de fragmentos de código de Studio y colores de sintaxis

Y ahora hay una sección llamada Atajos de teclado, que muestra los atajos equivalentes en VS Code a los que estéis acostumbrados, para que las manos no tengan que dejar el teclado. En muchos casos el atajo es el mismo, por lo que no será necesario re-aprender. Y recordad, todos los atajos en VS Code son configurables por el usuario, por lo que tendréis un nivel de control que Studio nunca ofreció.

2 0
0 88

Preguntas frecuentes de InterSystems

Las definiciones de clases creadas por los usuarios se almacenan en clases de definición de clases. Estas se pueden utilizar para obtener una lista de definiciones de clases desde un programa.

Nota: Las clases de definición de clase se refieren a todas las clases contenidas en el paquete %Dictionary.

0 0
0 50
Artículo
· 26 sep, 2019 Lectura de 8 min
SYSLOG - Qué es en realidad y qué significa

¡Hola a todos!

En esta publicación me gustaría hablar sobre la tabla syslog: qué es, cómo analizarla, cuáles son realmente las entradas y por qué puede ser importante para usted. La tabla syslog puede contener información de diagnóstico importante. Si su sistema tiene algún problema, es importante entender cómo analizar esta tabla y qué información contiene.

<--break->¿Qué es una tabla syslog?

0 0
0 350

¡Hola desarrolladores!

A veces necesitamos insertar o referir los datos de clases directamente en globals.

Y quizá muchos de vosotros esperáis que la estructura de datos de una global con registros sea:

^Sample.Person(Id)=$listbuild("",col1,col2,...,coln).

Este artículo es un aviso de que esto no siempre es verdad, así que no se debe dar por supuesto!

0 0
0 147
Artículo
· 7 dic, 2023 Lectura de 1 min
Cómo ejecutar comandos del SO

Preguntas frecuentes de InterSystems

Cuando ejecutéis comandos del SO, utilizad el comando $ZF(-100).

do $ZF(-100,"",program,args) // Execute the Windows command [synchronously].
do $ZF(-100,"/ASYNC",program,args) // Executes a Windows command [asynchronously].

Cuando ejecutéis comandos de la shell del SO, como mkdir o copy, hemos de especificar /SHELL.

do $zf(-100,"/shell /async","mkdir","c:\temp\x")

1 0
0 46

Hola a todos,

Compartimos hoy un truco que quizá le resulte útil a aquellos que tienen que trabajar con JavaScript embebido.

Si tienes que trabajar con CSP o Zen probablemente más de una vez has necesitado utilizar JavaScript embebido. Supón que tienes que programar algunos bucles, que utilizan los caracteres < o > en alguna expresión, por ejemplo:

0 0
0 87

Servir el café: Cómo crear y programar una tarea

¿No te gustaría que una taza de café caliente te esperara justo al llegar a la oficina? ¡Vamos a automatizar eso!

Cache e IRIS incorporan un Administrador de tareas, que debería resultar familiar a quienes estén acostumbrados a utilizar el programador de tareas de Windows o a usar cron en Linux. Tu cuenta de usuario requerirá tener acceso al recurso %Admin_Task para utilizarlo, y puedes acceder a él desde el portal de administración en System Operation -> Task Manager. Cuando se instala por primera vez, hay aproximadamente 20 tipos de tareas que puedes programar.

Si quieres añadir tus propias tareas, empieza creando una clase que extienda %SYS.Task.Definition. Como mínimo, debes sobreescribir el método OnTask, que tiene una firma de Method OnTask() As %Status. El código de ese método se ejecutará cada vez que se lance la tarea. De hecho, si tu tarea arroja "Error #5003: No implementado (Error #5003: Not Implemented)" cada vez que se ejecuta, es porque este método no se sobreescribió correctamente. De manera muy básica, podría ser:

0 0
0 204

Recientemente he estado trasteando con la utilización de IRIS como servidor para una conexión mediante web socket desde el frontend de una aplicación en NodeJS.

En esta URL tendréis la información relativa a las conexiones de web sockets tanto en modo cliente como en modo servidor: https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls...

4 0
2 78

Preguntas frecuentes de InterSystems

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.

1 0
0 80

Preguntas frecuentes de InterSystems

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

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

%SYSTEM.SQL class【IRIS】

0 0
0 48

¡Hola a tod@s!

En esta serie de artículos me gustaría presentar y discutir varios enfoques posibles para desarrollar software mediante las tecnologías de InterSystems y GitLab. Abordaré temas como:

0 0
0 181

Nota (junio de 2019): han cambiado muchas cosas para obtener los detalles más recientes, haz clic aquí
Nota (septiembre de 2018): ha habido grandes cambios desde que esta publicación apareció por primera vez; sugiero que utilices la versión del contenedor en Docker dado que el proyecto y la información para que se ejecute como un contenedor sigue publicada en GitHub, en el mismo lugar, para que puedas descargarlo, ejecutarlo y modificarlo, si lo necesitas.

Cuando trabajo con clientes en revisiones de rendimiento, planificaciones de capacidad y resolución de problemas, con frecuencia tengo que descomprimir y revisar las métricas del sistema operativo y de caché desde pButtons. En vez de lidiar con los archivos html para cortar y pegar secciones que serán graficadas en Excel, hace algún tiempo escribí una publicación sobre una herramienta para descomprimir las métricas de pButtons, escrita con el intérprete de unix, perl y los scripts de awk. Si bien este es un valioso ahorro de tiempo, no es la historia completa…

0 0
0 86

¡Hola Comunidad!

Como sabéis, InterSystems IRIS, además de globals, objetos, documentos y modelos de datos XML, también es compatible con tratamiento relacional de datos utilizando SQL como lenguaje.

Y como otros sistemas de gestión de bases de datos relacionales (DBMS), InterSystems IRIS tiene su propio dialecto.

Empezamos esta publicación como una Guía Rápida de SQL y os invitamos a compartir vuestros trucos favoritos.

¡Vamos allá!

1 0
1 95
Artículo
· 5 sep, 2023 Lectura de 1 min
Cómo reconstruir el índice por ID

Preguntas frecuentes de InterSystems

De cara a la reconstrucción de los índices de una clase persistente/tabla, hay que utilizar el método %BuildIndices(), proporcionado por dicha clase. Para ello hay que especificar los valores de inicio y fin de los ID para los cuales se quieren reconstruir índices en los argumentos del método.

Por ejemplo, para reconstruir el índice NameIDX y el índice ZipCode en la clase Sample.Person sólo para ID=10 a 20, ejecutad el siguiente código (el rango de ID se especifica en los argumentos quinto y sexto).

1 0
0 54

¡Hola a todos!

Como seguramente ya sabréis, ya está disponible en Docker Hub una versión totalmente gratuita de InterSystems IRIS for Health (I4H). Se trata de la versión Community y, como digo, es totalmente gratuita y funcional. Ya se ha hablado de ella en algunos artículos y posts,... así que hoy no va de eso. Aquí vamos a ver el "misterioso caso de la desaparición o, mejor, ausencia de mis datos persistentes cuando arranco el contenedor con la opción durable" (no he encontrado la fuente de letra terrorífica para darle más suspense... el editor de posts da para lo que da smiley ) .

1 0
0 422
Artículo
· 19 ago, 2021 Lectura de 2 min
Persistencia atípica
Este es el ejemplo de un código que funciona en Caché 2018.1.3 e IRIS 2020.2 
No se mantendrá sincronizado con las nuevas versiones 
¡Además NO cuenta con el servicio de Soporte de InterSystems!

Durante mi búsqueda de un snapshot de un objeto persistente, conocí una característica que me gustaría compartir, ya que podría ser útil en algunas situaciones especiales. Mi objetivo era tener una imagen del antes y el después durante las pruebas unitarias.

0 0
0 85

¡Hola desarrolladores!

Solo quiero compartir una antigua pero muy relevante buena práctica en el cambio de namespaces que @Dmitry Maslennikov compartió conmigo.

Consideremos el método:

classmethod DoSomethingInSYS() as %Status

{

set sc=$$$OK

set ns=$namespace

zn "%SYS"

// try-catch in case there will be an error

try {

// do something, e.g. config change

}

catch {}

 zn ns    ; returning back to the namespace we came in the routine

return sc

}

1 0
0 121
Artículo
· 25 abr, 2023 Lectura de 13 min
Configurando Mirror en Docker

Una necesidad habitual en nuestros clientes es la configuración tanto de HealthShare HealthConnect como de IRIS en modo de alta disponibilidad.

Es común en otros motores de integración del mercado que se promocionen con configuraciones de "alta disponibilidad", pero realmente no suele ser del todo cierto. Por lo general dichas soluciones trabajan con bases de datos externas y por lo tanto, si estas no están a su vez configuradas en alta disponibilidad, al producirse una caída de la base de datos o la pérdida de conexión a la misma toda la herramienta de integración queda inutilizable.

En el caso de las soluciones de InterSystems este problema no existe, al ser la base de datos parte y nucleo de las propias herramientas. ¿Y cómo ha solucionado InterSystems el problema de la alta disponibilidad? ¿Con abstrusas configuraciones que podrían arrastrarnos a una espiral de enajenamiento y locura? ¡NO! Desde InterSystems hemos escuchado y atendido vuestras quejas (como siempre intentamos hacer ;) ) y hemos puesto a disposición de todos nuestros usuarios y desarrolladores la función de mirroring.

1 0
0 189

InterSystems FAQ

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.

1 0
0 91