Artículo
· 17 ene, 2024 Lectura de 3 min

Cómo reproducir ciertas filas de una fuente SQL usando un adaptador SQL (EnsLib.SQL.InboundAdapter)

Hola comunidad,

Cuando utilizamos un Business Servicio de tipo SQL, puede suceder que necesitemos replicar ciertas filas de la tabla original.

Tomemos como ejemplo el Business Service  "from customer SQL" usando la clase genérica EnsLib.SQL.Service.GenericService

 

Surgen diferentes casos, dependiendo de la configuración utilizada en este Business Service.

Primer caso:

Si el Business Service solo usa un KeyFieldName

En este caso, para reprocesar los IDs 123,456 y 789, bastará con eliminarlos de la variable global ^Ens.AppData del Business Service correspondiente en la referencia "adaptor.sqlrow":

kill ^Ens.AppData("from customer SQL","adapter.sqlrow",123)
kill ^Ens.AppData("from customer SQL","adapter.sqlrow",456)
kill ^Ens.AppData("from customer SQL","adapter.sqlrow",789)

Otra opción: si no tienes acceso al terminal o si quieres evitar usar variables globales de sistema de interoperabilidad IRIS, también es posible duplicar temporalmente el Business Service indicando en la solicitud las filas que deseas reprocesar.

Ejemplo :

Con la consulta:

Al observar el contenido de la global ^Ens.AppData, confirmamos que las filas en cuestión han sido reprocesadas bajo el nombre de nuestro nuevo Business Service "from customer SQL - temporary" :

Nota: Si elimina el Business Service temporal después de reprocesar las filas deseadas, recuerde que la variable global ^Ens.AppData no se eliminará. Lo que significa que en caso de recreación del Business Service bajo el mismo nombre, con filas ya procesadas por este Business Service temporal, estas no serán tomadas en cuenta. Por lo tanto, la solución será eliminar los datos en cuestión directamente en ^Ens.AppData o garantizar que el nombre temporal del Business Service sea siempre único. Ejemplo a continuación con una copia de "from customer SQL" a "from customer SQL - restatement of January 8 2024"

And the result in ^Ens.AppData :

 

Segundo caso:

Si el Business Service está configurado con una solicitud de eliminación (DeleteQuery) como :

UPDATE app.customer SET processed=1 WHERE ID=?

Y una consulta como:

En este caso, para reprocesar el cliente corres

En este caso, para reprocesar el cliente correspondiente al ID 123, bastará con ejecutar una actualización en el origen como:

UPDATE app.customer SET processed=0 WHERE ID = 123

Y para reprocesar los ID 123, 456 y 789, una solicitud como

UPDATE app.customer SET processed=0 WHERE ID in (123, 456, 789)

Nota: Este caso supone que usted tiene acceso a la fuente SQL con una cuenta de usuario autorizada para actualizar la tabla en cuestión, lo que no siempre está garantizado.

Otra opción: Como en el primer caso, siempre tienes la posibilidad de crear un nuevo Business Service temporal copiando el Servicio inicial y adaptándolo a las necesidades de reprocesamiento. (ver Otra opción del primer caso)

 

Tercer caso:

Si el Business Service utiliza el parámetro %LastKey, no será posible indicar por separado las diferentes filas a reprocesar como en el caso anterior, sino sólo los ID mayores al valor de %LastKey.

Con una consulta como:

En este caso, simplemente actualice la variable global ^Ens.AppData indicando el valor mínimo de %LastKey para el Business Service de la referencia "adaptor.sqlparam":

 

set ^Ens.AppData("from customer SQL","adapter.sqlparam","%LastKey")=120

Otra opción: De nuevo, como en el primer caso, siempre tienes la posibilidad de crear un nuevo Business Service temporal copiando el Servicio inicial y adaptándolo a las necesidades de reprocesamiento. (ver Otra opción del primer caso)

Comentarios (0)1
Inicie sesión o regístrese para continuar