Navegar a otro bloque en modo ENTER_QUERY
Tuvimos que resolver el problema de navegar a otro bloque estando en el modo enter_query.
La solución no nos satisface por que es muy "a pie". Si alguien tiene una mejor se los agradeceríamos.
Empecemos por establecer el escenario, pues ciertas restricciones son las que hacían difícil la solución.
Escenario
---------
1. Se tiene un bloque con sólo QUERY_ALLOWED en FORMS 6i. O sea , no se pude insertar en él.
2. Se tiene un botón para regresar el bloque anterior, que es padre de este en Maestro-Detalle
3. El bloque hijo que es de consulta se carga automáticamente, pero da al usuario la opción de usar "ENTER-QUERY" para pasar a modo query y realizar una consulta
4. Si la consulta no devuelve registros , tal vez el usuario quiere navegar al blqoue padre, utiliza "Cancel-query", igual quedamos en modo "enter-query" , así que al tratar de navegar fuera del bloque, forms no se lo permite
5. Como no podemos pasar a modo NORMAL y en inserción por que el bloque no permite inserción ( ver punto 1 ) , quedamos "trabados"
Solución
--------
La solución simple sería hacer EXECUETE_QUERY , cargando de nuevo los datos, quedando en modo normal Moficiación y luego hacer el cambio de bloque.
Pero si el query es sobre muchos registros puede ser un tiempo no torelable de espera por parte del usuario sólo para cambiar de bloque.
Así que la solución es en en trigger de enter-query , parcharlo para : guardar en una global la llave del registro actual y luego hacer el ENTER_QUERY.
Algo así :
:global.llave := :bloque.campo;
ENTER_QUERY;
Cuando se cancela el query y se quiere hacer el abandono del bloque, se cargan estas globales en las variables del bloque , luego se hace EXECUTE_QUERY y luego se abandona el bloque. Algo así
:bloque.campo := :global.llave ;
EXECUTE_QUERY;
GO_BLOCK('BLOQUE_MAESTRO');
Esperamos les sea de utilidad, agradecemos comentarios
Desarrollo en Oracle, visite nuestro sitio web



