¿Quién ha modificado este datos?

Esta pregunta es algo habitual a lo que nos someten en la empresa cuando «pasa algo». Esta claro que cuando ya ha pasado, si no registramos la información antes de poco nos puede servir, nos tocará tirar de copias para saber que dato había antes pero seguiremos sin saber la respuesta a «Quién»

Cierto es que los programas cada vez tienen más y más logs con que ha pasado, pero no siempre guardan el dato concreto que queremos o de la manera que nos interesa. Continua y te enseñaré una idea «ingeniosa» y básica con la que hacer nuestro propio log

Como siempre el aviso a navegantes:

NINGUNA DE LAS ACCIONES QUE VOY A EXPLICAR TIENE SOPORTE POR PARTE DE GEINFOR. MUCHO OJO Y BAJO VUESTRA RESPONSABILIDAD

Y empezamos con la faena para registrar nuestros datos…

Nuestro propio log

Todo se basa en 2 sencillos pasos

  • Crear una tabla propia donde guardar la información
  • Crear los triggers necesarios para que guarden los datos (como vimos aquí)

Nuestra tabla de log

Lo básico y principal es que esta tabla sea lo suficientemente genérica para que nos sirva en el máximo de situaciones que nos encontremos.

Mi ejemplo base de tabla de log lo crearíamos así:

CREATE TABLE DB2ADMIN.EMP_SIS_LOG
(
ID INTEGER NOT NULL GENERATED BY DEFAULT AS IDENTITY (CACHE 1 ORDER),
FECHA TIMESTAMP DEFAULT CURRENT TIMESTAMP,
TABLA VARCHAR (200),
COMENTARIO VARCHAR (200),
EQUIPO VARCHAR (200),
MEMO CLOB (1M)
)
IN GEINFORSPC;

La tabla se compone de:

  • un autoincremental (ID)
  • una fecha: tipo fecha/hora para controlar cuando sucede el evento dentro del día
  • Tabla: para indicar sobre que tabla sucede la modificación y poder filtrar con mayor comodidad
  • Comentario: una cadena de texto donde registremos un texto estandarizado para buscar u ordenar
  • Memo: Dar manga ancha para poder anexar toda la descripción que queramos/necesitemos

El trigger que controle los cambios:

Se pueden definir todos los triggers que queramos, siempre con un poco de miramiento de que el trabajo del trigger no suponga mucha carga a la base de datos y trabajar con ella se vuelva imposible.

Os pongo el ejemplo que registraría en caso de que se modifique quien ha realizado un pedido. Esta información está en la cabecera del pedido y GEINFOR ERP no tiene log de dicho cambio. El código sería el siguiente: (ojo que incluye una función que ya creamos en otra entrada)

CREATE OR replace TRIGGER TR_CAB_PEDIDOS_CLIENTES_BUP BEFORE UPDATE ON CAB_PEDIDOS_CLIENTES
REFERENCING NEW AS N OLD AS O
FOR EACH ROW

BEGIN

IF O.REALIZADO_POR<>N.REALIZADO_POR THEN
INSERT INTO EMP_SIS_LOG (TABLA, COMENTARIO,EQUIPO) 
VALUES ('CAB_PEDIDOS_CLIENTES',N.SERIE||'-'||N.PEDIDO||' REALIZADO: ' ||O.REALIZADO_POR||' A '||N.REALIZADO_POR,FX_SIS_EQUIPO);
END IF;
END;

Como nos interesa un cambio de valor, ejecuta Antes de actualizar la tabla de forma que podamos guardar el valor previo y el nuevo en nuestra tabla de logs

Con estos dos simple pasos, pasamos a registrar información de forma transparente al usuario y al ERP, centrándonos en la capa de la base de datos.

Ahora solo queda que adaptéis la idea y el código a vuestras propias necesidades

Espero que os sea útil, suscribiros para que os lleguen avisos de la próxima entrada y no dudéis en comentar o mandar un mensaje con cualquier consulta, aportación o inquietud que tengáis…

… y si algo sale mal… La Culpa de Sistemas 😉

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.