miércoles, 21 de mayo de 2008

No se ejecutan los triggers al cambiar de registro

No se me ejecutan los triggers en Oracle Forms.

Ejecuta trozos de código pero otros no, parece que se los salta.

No salen los alerts pero pasa porque otros cambios que hace el código si se ven.

He intentado post-query, post-record, post-change… y no funciona ningún trigger.

Todo eso nos lleva a pensar ¿Oracle Forms usa caché?

SITUACIÓN:

Tengo un bloque de datos con un código de persona y dependiendo de la primera letra (un substring vamos xD) cambia el valor de un radio button que nos indica el tipo de persona y además nos cambia el nombre de una pestaña (Tab). Para hacer esto recurrimos lógicamente al post-query, que como su nombre indica es el trigger que se ejecutará después de ejecutar la consulta (query) y funcionan bien ambos cambias (tab y radio) mientras vamos cambiando de registro hacia delante pero cuando tiramos hacia atrás solo funciona el del radio button mientras que no funciona el cambio de nombre de la pestaña. Raro raro, lo primero que uno piensa si programaba con Borland C++ para MS-DOS (snif) es que el compilador se salta líneas así que ponemos en el trigger post-query

message (‘Paso por aquí’);

funcion_que_me_cambia_el_radio_button;

message (‘Ala, ya pasé de aquí’);

y ejecutamos: mientras vamos avanzando registros nos sale el mensaje, ejecuta la función y sale el segundo mensaje pero cuando tiramos atrás y nos movemos por los registros que ya hemos visto los mensajes no salen pero si se hacen los cambios de la función. Entonces ¿pasa o no pasa por el trigger? ¿Si pasa porque no salen los mensajes? ¿y si no pasa porque se cambia el radiobutton?

EXPLICACIÓN:

Oracle forms a no ser que le indiquemos lo contrario solo carga un registro y los demás los va consultando a medida que avanzamos con next_Record (sea por código , por teclado o con el ratón) por lo que después de cada uno de ellos ejecuta el trigger post-query pero cuando volvemos atrás estamos consultando los que oracle forms ya ha cargado por lo que no sirven ya los triggers *-query que son los que hacen referencia a la carga de datos y debemos usar los *-record que son los que hacen referencia a la aplicación local por así decirlo, al forms.

SOLUCIÓN:

En el post-query sigue el código para cuando le den a F8 (ejecutar consulta) y vayamos avanzando pero también en el trigger PRE-RECORD para tratar los que ya están cargados. El post no sirve porque nos interesa hacer las operaciones con el registro al que vamos, el que veremos una vez ejecutado el trigger y no nos interesa que lo haga con el anterior puesto que ni lo veremos cuando se hagan los cambios porque ya estaremos en el siguiente.

No hay comentarios:

Que versión de Oracle Forms usas?