New post

Find

Question
· Oct 16, 2024

File generation issues while using $ZF(-100 asynchronously

Hello Community,

We use $ZF(-1 synchronous call to generate the pdf files. Now I want to change to asynchronously. So, I use $ZF(-100 with "/ASYNC" function. I use "/ASYNC" directly write $ZF(-100,"/ASYNC","notepad.exe") in windows/linux it throws the <NOTOPEN> error, However If I use $ZF(-100,"/ASYNC /SHELL","notepad.exe") it opens the notepad without issues.

However, I execute the below in Linux system the file is not generated properly. But  $ZF(-2,"/ASYNC /SHELL", " /fop/fop -r -fo ""/grp1/tempXSL-FO.TT.12.xml"" -pdf ""/grp1/tempXSL-FO.TT.12.pdf"" 1>/dev/null 2>""/grp1/tempXSL-FO.TT.12.err"" ") this works

write $ZF(-100,"/ASYNC /SHELL", " /fop/fop -r -fo ""/grp1/tempXSL-FO.TT.12.xml"" -pdf ""/grp1/tempXSL-FO.TT.12.pdf"" 1>/dev/null 2>""/grp1/tempXSL-FO.TT.12.err"" ")

Thanks!

Discussion (0)1
Log in or sign up to continue
Article
· Oct 16, 2024 2m read

Funciones del "Lado Izquierdo" en ObjectScript

En ObjectScript, tenéis una amplia colección de funciones que devuelven algún valor, típicamente:

set variable = $somefunction(param1,param2, ...)

No hay nada especial en eso.  
Pero hay un conjunto de funciones que clasifico como del LADO IZQUIERDO.  
La especialidad de ellas es que también podéis usarlas a la izquierda del operador igual como un objetivo en el comando SET:

set $somefunction(param1,param2, ...) = value

La razón para plantear ese tema es que con IRIS 2024.1, después de muchos años, hay un "chico nuevo en el barrio".

$VECTOR()

Asigna, devuelve y elimina datos de vectores en posiciones específicas, especialmente.
set $VECTOR(MyVector , position , type) = value

No quiero entrar en detalles. La documentación es realmente completa.  
También hay 3 nuevas funciones relacionadas con vectores del lado derecho.
$VECTORDEFINED (),  $VECTOROP(), $ISVECTOR() 

Encontráis la descripción siguiendo los enlaces.

Si seguís los ejemplos en la documentación, veréis que la nueva función SQL relacionada TO_VECTOR() hace prácticamente lo mismo en notación SQL (de hecho, es visible en la referencia SQL de InterSystems).

Como recordatorio / resumen, una lista de las funciones tradicionales del lado izquierdo:

  • $BIT – Devuelve o establece el valor de un bit en una posición especificada en un bitstring.
  • $EXTRACT – Extrae una subcadena de una cadena de caracteres por posición, o reemplaza una subcadena por posición.
  • $LIST – Devuelve o reemplaza elementos en una lista.
  • $PIECE – Devuelve o reemplaza una subcadena, utilizando un delimitador.
  • $WEXTRACT – Extrae una subcadena de una cadena de caracteres por posición, o reemplaza una subcadena por posición, reconociendo pares de sustitución.

Es una lista corta, pero puede ser muy eficiente en algunos casos para evitar contenido duplicado y manipulaciones confusas.

1 Comment
Discussion (1)1
Log in or sign up to continue
Question
· Oct 16, 2024

Generate JWT token in Cache 2018

Hi,

I try to generate JWT tokens in Cache (not in IRIS).

In IRIS I managed to generate tokens using ##class(%OAuth2.JWKS).AddOct("HS256",secret,.jwks).

But In Cache there is no such routine.

Could you provide me a place to find an example how to use JWT, please ?  I am interested to generate a token in Cache, send it to javascript client, and read a token provided by the client and check it is valid.

Kind regards,

 

Alin Soare.

1 Comment
Discussion (1)2
Log in or sign up to continue
Article
· Oct 16, 2024 5m read

Dentro de la Herramienta de gestión de bases de datos

En este artículo, nos adentraremos en el funcionamiento de una aplicación publicada en OpenExchange llamada db-management-tool que sirve como herramienta de gestión de bases de datos, explorando la arquitectura y las tecnologías que la sustentan. Comprenderemos cómo funciona la aplicación para daros una visión de su diseño, cómo gestiona bases de datos, tablas y cómo la API interactúa con los datos.

Discutiremos las tecnologías principales utilizadas, incluyendo InterSystems IRIS como la base de datos principal y Redis para la caché. Además, desglosaremos la estructura de las tablas utilizadas y explicaremos cómo el sistema maneja la creación, recuperación y manipulación de datos a través de la API REST.

Descripción general de la aplicación web

Esta aplicación está construida como una herramienta basada en la web, y consta de dos componentes principales: el backend y el frontend.

  • Backend: El backend se desarrolla utilizando Java con el framework Spring Boot. Spring Boot simplifica el proceso de desarrollo, ofreciendo una estructura robusta y escalable para manejar la lógica del lado del servidor. Para gestionar la conexión a las bases de datos, utilicé Spring Data, que se integra a la perfección con InterSystems IRIS (para la base de datos principal) y Redis (para almacenar en caché el JWT). Esta configuración facilita la programación al manejar gran parte del código repetitivo relacionado con el acceso y almacenamiento de datos.
  • Frontend: El frontend se construye utilizando Angular 17, que proporciona una interfaz de usuario dinámica y receptiva para gestionar bases de datos, tablas e interactuar con los datos. La arquitectura basada en componentes de Angular garantiza que la interfaz de usuario sea tanto mantenible como escalable a medida que la aplicación crece.

Estructura de la base de datos y flujo de trabajo

La base de datos principal de InterSystems IRIS contiene cuatro tablas clave que almacenan información crucial sobre los usuarios, sus bases de datos y las tablas que crean. Así es como funciona:

  • Tabla de Usuarios (users): Cuando un nuevo usuario se registra, su información se guarda en la tabla de users. Esta tabla lleva un registro de todos los usuarios registrados, asegurando que cada uno tenga un identificador único para gestionar sus recursos.
  • Tabla de Bases de Datos (dbs): Cuando un usuario crea una nueva base de datos, los detalles de la base de datos (como su nombre) se almacenan en la tabla dbs. Esto permite a la aplicación mantener un seguimiento de qué usuario es propietario de qué base de datos.
  • Tabla de Tokens de Base de Datos (db_tokens): Para cada nueva base de datos, se genera un token único. Este token se utiliza para autenticar las solicitudes de la API a esa base de datos específica. La duración del token (que podría ser un día, semana, mes o año) se almacena en la tabla db_tokens, asegurando que el acceso a la base de datos se gestione de forma segura a lo largo del tiempo.
  • Tabla de Tablas (tables): Cuando un usuario crea una nueva tabla dentro de una base de datos, el nombre de la tabla se guarda en la tabla de tables junto con el ID de la base de datos asociada. Esto asegura que cada tabla esté vinculada a la base de datos correcta.

 

Además de almacenar los metadatos de la tabla, el sistema crea una nueva tabla SQL dentro de InterSystems IRIS para los datos reales del usuario. Cada tabla SQL se nombra utilizando una convención de nomenclatura técnica con el prefijo table_ seguido del ID de la tabla como sufijo. Esta tabla SQL es donde se almacenarán los datos del usuario para esa tabla en particular.

 

Base de datos Redis

La base de datos Redis desempeña un papel simple en la aplicación al gestionar la autenticación de usuarios. Cuando los usuarios inician sesión en el sitio web, se generan sus tokens JWT (JSON Web Tokens) para una gestión segura de sesiones. Estos tokens se almacenan en Redis para un acceso y validación rápidos.

Redis actúa como una caché en memoria, asegurando que la autenticación de usuarios sea rápida y eficiente. Cuando los usuarios realizan solicitudes al backend, la aplicación verifica la validez de los tokens almacenados para confirmar la identidad del usuario y otorgar acceso a los recursos apropiados.

API para operaciones de tablas

Como se mencionó en el primer artículo, para interactuar con los datos almacenados en las tablas de los usuarios, la aplicación proporciona una API REST simple pero poderosa. Actualmente, la API admite cinco operaciones básicas, lo que permite a los usuarios gestionar sus datos de manera eficiente:

  1. Obtener todos los registros por condición: Recuperar registros de una tabla basándose en condiciones o filtros específicos.
  2. Obtener todos los registros: Obtener todos los registros de una tabla sin ningún filtro.
  3. Guardar: Agregar nuevos registros a una tabla.
  4. Actualizar: Modificar registros existentes en una tabla.
  5. Eliminar: Eliminar registros de una tabla.

Estos endpoints de API facilitan la realización de operaciones CRUD (Crear, Leer, Actualizar, Eliminar) sobre los datos de la tabla. En el futuro, la API se ampliará para soportar consultas personalizadas, brindando a los usuarios más flexibilidad para ejecutar operaciones de datos complejas directamente a través de la API.

Conclusión

En este artículo, exploramos el funcionamiento interno de la herramienta de gestión de bases de datos, desglosando las tecnologías del backend y del frontend, y explicando cómo funcionan las bases de datos InterSystems IRIS y Redis dentro del sistema. También analizamos cómo se gestionan los datos a través de la API, con soporte actual para operaciones CRUD básicas.

Si bien la aplicación ya ofrece un potente conjunto de características para gestionar bases de datos, tablas y registros, aún hay más por venir. Las futuras actualizaciones introducirán soporte para consultas personalizadas y otras funciones avanzadas, haciendo que la herramienta sea aún más versátil para los usuarios que buscan gestionar sus datos sin problemas.

Discussion (0)0
Log in or sign up to continue
Article
· Oct 15, 2024 2m read

第四十八章 解决安全问题

第四十八章 解决安全问题

本主题提供信息来帮助识别 IRISSOAP 安全问题的原因。

有关与安全无关的问题的信息,请参阅 IRIS 中的 SOAP 问题故障排除。

故障排除所需的信息

要解决 SOAP 问题,通常需要以下信息:

Discussion (0)1
Log in or sign up to continue