viernes, 23 de mayo de 2008

No puedo hacer go_block en los triggers POST

Oracle forms: No me deja hacer go_block

Oracle forms: Como puedo ejecutar una consulta (execute_query) de un bloque de datos cuando cambio el valor de un item en otro bloque de datos?

Oracle forms: execute_query de otro bloque en trigger post-block

SITUACIÓN:

Es bastante típica, tenemos un elemento (item) en un bloque y queremos que cuando se modifique vaya a otro bloque y ejecute una consulta. El modo correcto de hacer esto cuando se trata de una relación padre-hijo (por ejemplo un bloque personas que cuando cambian la persona actualice el bloque de por ejemplo trabajos académicos de esta persona) es el de las relaciones uniendo los dos bloques por el identificador de la persona.

A veces sin embargo no es una relación así y se trata por ejemplo “si la persona es hombre carga el bloque de burradas y elimina el de tonterías y si la persona es mujer carga el bloque tonterías y elimina el de burradas” donde ya hay condiciones, algún que otro análisis de variables… y no nos es posible hacer la relación lo primero que uno piensa es “go_block (‘tonterías’); execute_query;” pero entonces nos sale que no es posible ejecutar go_block en el post-change ni varios otros a nivel de item.

EXPLICACIÓN:

A Oracle forms a saber porque motivo de diseño no le da la gana permitir facilidades así.

SOLUCIÓN:

La solución es ponerlo en el trigger WHEN-NEW-ITEM-INSTANCE del bloque donde tenemos el objeto que al cambiar active lo otro. Pero claro, eso nos pasaría con cualquiera de los elementos del bloque así que tenemos que filtrarlo poniendo en el trigger

if :system.current_item = 'nombre del elemento activador’ and (variable_auxiliar = 0 or variable_auxiliar is null) then

go_block (‘tonterias’);

execute_query;

variable_auxiliar:=1;

end if;

Lo de la variable auxiliar es para que no caiga en un bucle infinito y así controlamos que solo se hace una vez.


No hay comentarios:

Que versión de Oracle Forms usas?