Trigger
Un trigger es un proceso definido por el programador que es ejecutado automáticamente al producirse el evento al que hace referencia. Los triggers posibles son:
Alta
Anterior a un alta de ficha
El proceso es disparado antes de que la ficha sea guardada en disco.
Interno a un alta de ficha
El proceso es disparado después de que la ficha haya sido guardada en disco y antes de disparar las actualizaciones.
Posterior a un alta de ficha
El proceso es disparado después de que la ficha haya sido guardada en disco y después de disparar las actualizaciones.
Modificación
Anterior a una modificación de ficha
El proceso es disparado antes de que los cambios en la ficha sean guardados en disco.
Interno a una modificación de ficha
El proceso es disparado después de que los cambios en la ficha hayan sido guardados en disco y antes de disparar las actualizaciones.
Posterior a una modificación de ficha
El proceso es disparado después de que los cambios en la ficha hayan sido guardados en disco y después de disparar las actualizaciones.
Baja
Anterior a una baja de ficha
El proceso es disparado antes de producirse el borrado de la ficha.
Interno a una baja de ficha
El proceso es disparado después de producirse el borrado de la ficha y antes de disparar las actualizaciones.
Posterior a una baja de ficha
El proceso es disparado después de producirse el borrado de la ficha y después de disparar las actualizaciones.
Los triggers son ejecutados en el servidor por lo que no se debe incluir en ellos ninguna instrucción que requiera la intervención del usuario.
Cualquier cambio que se desee realizar en la ficha, siempre deberá ser hecho antes de su grabación, es decir, en el trigger anterior. Si lo hacemos en los triggers interno o posterior, si bien no se grabará el cambio en la tabla, provocará un refresco erróneo de la información en el cliente.
La ficha permanecerá bloqueada por el sistema mientras los procesos de los triggers estén siendo ejecutados.
Si desde un trigger se ejecuta un proceso de Velneo con origen ficha lanzado con el comando de instrucción ejecutar proceso, la ficha recibida es la que tiene el trigger en memoria, recibiendo los cambios realizados en el trigger anterior al alta o modificación. Si realizamos modificar campo en el proceso se cambia correctamente la ficha en memoria que tras finalizar el proceso es recibida por el trigger que puede continuar con todos los cambios realizados.
Sin embargo, si usamos para ejecutar el proceso el comando de instrucción disparar objeto creando un manejador de objeto el funcionamiento no es el mismo ya que el proceso recibe una ficha diferente a la que usa el trigger en memoria y los cambios que se realicen con el comando de instrucción modificar campo no son funcionales.
Por lo tanto, si queremos modificar campos en procesos de Velneo lanzados desde triggers de tabla, tendremos que hacerlo siempre con el comando de instrucción de proceso ejecutar proceso.
Podemos crear un trigger desde la barra de herramientas de sub-objetos de una tabla.
Las modificaciones de registros tanto asegurados (transacción por proceso) como no aseguradas (formulario) se comportan igual y en el caso de ejecutar el comando set retorno proceso = NO en cualquiera de los triggers, lógicamente no se produce el alta, modificación o baja del registro, pero debemos tener en cuenta que no se deshace el resto de la transacción, por lo que si antes de hacer el set retorno proceso = NO hubiésemos realizados otros operaciones en la base de datos no relacionadas con el registro del trigger, éstas no serán deshechas.
En principio, en un trigger previo no se deberían realizar operaciones de disco, pero si las hacemos debes saber que el sistema no las deshará.
No se puede modificar desde un trigger de una tabla un registro que hemos modificado a través de una actualización desde la misma tabla.