Sunteți pe pagina 1din 7

DEVELOPER

FORMS 6i

TEMA 8.- PROGRAMACION EN LOS FORMS


8.1.- INTRODUCIR CODIGO EN UN FORM:
El cdigo que se escribe en Oracle Forms, se hace en PL/SQL, lenguaje procedural extensin del lenguaje SQL. La forma de aadir cdigo a un form es utilizar los triggers. Un TRIGGER o DISPARADOR es un bloque PL/SQL que se asocia a un objeto determinado y que se ejecuta (dispara) en respuesta a un determinado evento.

Existen triggers para la mayora de los eventos que se pueden producir en una aplicacin. Generalmente estos tienen nombres que hacen referencia al evento que los dispara. Adems el programador puede crear sus propios triggers. Ejemplo: Se puede crear un botn y asociarle el trigger: WHEN-BUTTONPRESSED que ejecutara el bloque PL/SQL correspondiente cuando se haga click con el ratn sobre el botn. El bloque PL/SQL que se ejecuta puede contener: Alguna de las ms de 100 built-ins, tambin llamadas procedimientos empaquetados que incluye el propio Oracle Forms. Las built-ins" son procedimientos y funciones que llevan a cabo una variedad de funciones standard y que pueden ser llamadas desde los triggers y los subprogramas creados por el usuario. Ejemplo: GO_BLOCK (BLK_CLIENTES);

Subprogramas: procedimientos, funciones y packages desarrollados por el programador y que pueden ser definidos en forms, mens y libreras. Los triggers tienen propiedades como el resto de los objetos.

8.2.- TRIGGERS:
Hemos comentado que un trigger es un bloque de cdigo que se escribe para aadir funcionalidad a un form. Cada trigger tiene un nombre y puede contener uno o mas sentencias PL/SQL. Nota El cdigo de un trigger es un bloque annimo de PL/SQL que tiene la siguiente estructura: [ DECLARE < Sentencias de declaracin > BEGIN < Sentencias ejecutables > [ EXCEPTION < Declaracin de excepciones > END; En la seccin de declaraciones, se declararan todas las constantes, variables, cursores y excepciones que intervengan en ] ]

Copyright Jos Manuel Dez Perla 2.008

-1-

DEVELOPER

FORMS 6i

el bloque, mientras que la seccin de sentencias ejecutables contendr las instrucciones que ejecutar el bloque, siendo la nica obligatoria. Por ltimo la seccin de excepciones se utiliza para el manejo de errores. Si escribimos un bloque que no tenga seccin de declaraciones y de excepciones, las palabras reservadas: BEGIN y END pueden omitirse.

El nombre de un trigger comienza con un prefijo, contiene al menos un guin y a continuacin el evento que dispara el trigger. Los posibles prefijos son: Prefijo del Descripcin trigger KeyOnPrePostWhenSe dispara en lugar de la accin standar de una tecla de funcin. Se dispara en lugar del proceso standard (se utiliza sustituir un proceso). Se dispara en un evento que tiene lugar justo antes de una accin, por ejemplo antes de que se ejecute una consulta. Se dispara justo despus de una accin, por ejemplo despus de que se ejecute una consulta. Se dispara junto a un proceso standar y se utiliza para aumentar la funcionalidad

Cuando se define un trigger se asocia a un determinado objeto que puede ser un tem, un bloque o un form, es decir los trigger puede declararse a nivel de tem, bloque o form. Ello determina el alcance de dicho trigger o lo que es lo mismo, el dominio donde debe ocurrir el evento para que el trigger se dispare. No obstante algunos triggers presentan restricciones en cuanto a los niveles en los que pueden ser definidos. Por ejemplo el trigger: PRE-QUERY tendr que declararse a nivel de bloque porque se dispara como consecuencia de la consulta que se realiza en un bloque, el trigger: WHEN-NEW-FORM-INSTANCE se declarara a nivel de form por razones obvias. Cuando se definen triggers que responden al mismo evento, en distintos niveles y este ocurre, se dispara el trigger con el nivel de definicin mas bajo, por defecto. Ejemplo: Podemos asociar el trigger: WHEN-NEW-ITEM-INSTANCE a un bloque y a un elemento de texto en particular dentro del bloque. Cuando el usuario navegue al elemento de texto se disparar el trigger asociado a nivel de tem (nivel mas bajo) ignorndose el asociado a nivel de bloque. Esta circunstancia se puede alterar modificando la propiedad del trigger FUNCIONAL:JERARQUIA DE EJECUCION (EXECUTION HIERARCHY) cuyos valores posibles son:

SUSTITUIR (OVERRIDE)(Valor por defecto): Solo se dispara el trigger ms apropiado segn la ubicacin del cursor. DESPUES (AFTER): El trigger se dispara despus de que se dispare el mismo trigger en el nivel superior. ANTES (BEFORE): El trigger se dispara antes de que se dispare el mismo trigger en el nivel superior.
Copyright Jos Manuel Dez Perla 2.008

-2-

DEVELOPER CREAR UN TRIGGER:

FORMS 6i

A la hora de crear un trigger tendremos que pensar en los siguientes puntos: 1) Cual es el evento que disparar el trigger? 2) A que nivel se declarar el trigger?. 3) Que cdigo ejecutar?. Para crear un trigger en el NAVEGADOR DE OBJETOS haremos lo siguiente: 1. Posicionaremos el cursor en el nodo: DISPARADORES (TRIGGERS) del form, bloque o tem al cual queremos asociar dicho trigger. 2. Pincharemos el botn: CREAR (CREATE) o seleccionaremos NAVEGADOR -> CREAR para crear un objeto de este tipo. 3. Oracle visualiza una lista de los posibles triggers que podemos utilizar. Seleccionamos uno y confirmamos con OK. 4. El editor de PL/SQL se abre y podemos escribir el cdigo que queremos ejecutar cuando se dispare el trigger. Por ejemplo: DECLARE respuesta BEGIN respuesta END;

BOOLEAN; := SHOW_LOV (lov_clientes);

5. Compilamos dicho cdigo pinchando el botn: COMPILAR (COMPILE) y suponiendo que no se ha producido ningn error, cerramos el editor de PL/SQL pinchando el botn: CERRAR (CLOSE). Nota Oracle Forms compila cualquier trigger que no haya sido compilado previamente cuando ejecuta el form, pero es conveniente compilarlos individualmente para observar si se ha producido algn error de sintaxis, semntico o de referencias desconocidas.

Tambin podemos crear los trigger desde el EDITOR DE DISEO para lo cual haremos: 1. Seleccionamos el tem en el LAYOUT. 2. Pulsamos el botn derecho del ratn para visualizar el men de contexto desde donde entraremos al editor de PL/SQL. 3. Oracle visualiza la lista de los posibles triggers que podemos utilizar. Seleccionamos uno y confirmamos con OK con lo que entramos en el editor. 4. Escribiremos el cdigo y compilaremos, cerrando posteriormente la ventana del editor.

Copyright Jos Manuel Dez Perla 2.008

-3-

DEVELOPER SMART TRIGGERS:

FORMS 6i

Si seleccionamos un objeto en el NAVEGADOR DE OBJETOS o en el EDITOR DE DISEO y pulsamos el botn derecho del ratn, desplegamos el men contextual donde figura la opcin: DISPARADORES SMART (SMART TRIGGER). Esta no mostrara una lista de los triggers ms comunes para ese objeto.

TIPOS DE TRIGGERS: Podemos clasificar los triggers en los siguientes grupos: 1. DE BLOQUE (BLOCK PROCESSING TRIGGERS): Se disparan cuando se actualiza un registro dentro de un bloque. TRIGGER WHEN-CREATE-RECORD WHEN-CLEAR-BLOCK SE DISPARA CUANDO.... Se intenta crear un nuevo registro en un bloque. Se borran todos los registro de un bloque. Oracle cambia el estado de un registro a insert o update, as indica que el registro debe ser procesado por el siguiente COMMIT. Un registro es limpiado o borrado. Se utiliza por ej: para calcular totales de un bloque multi-registro.

WHEN-DATABASE-RECORD

WHEN-REMOVE-RECORD

2. DE EVENTOS DE INTERFACE (INTERFACE EVENT TRIGGERS); Se disparan cuando ocurre algn evento en el interface del form.

TRIGGER WHEN-BUTTON-PRESSED WHEN-CHEXBOX-CHANGED WHEN-IMAGE-ACTIVATED WHEN-IMAGE-PRESSED KEY-tecla WHEN-RADIO-CHANGED WHEN-TIMER-EXPIRED WHEN-WINDOW-ACTIVATED WHEN-WINDOW-CLOSED WHEN-WINDOW-DEACTIVATED WHEN-WINDOW-RESIZED

SE DISPARA CUANDO.... el usuario pulsa un botn. cambia el estado de un check box Se hace doble-click en un image item. se hace click en un image item. al pulsar la tecla asociada. cambia el radio botn actual. un timer programado finaliza. se visualiza una ventana. se cierra una ventana. se desactiva una ventana como consecuencia de activar otra ventana. se cambia el tamao de una ventana.

Copyright Jos Manuel Dez Perla 2.008

-4-

DEVELOPER 3. DE RELACION MAESTRO-DETALLE (MASTER-DETAIL TRIGGERS):

FORMS 6i

Los genera automticamente Oracle cuando se crea una relacin maestro-detalle entre bloques. Se utilizan para coordinar el bloque maestro con el bloque detalle.

TRIGGER ON-CHECK-DELETE-MASTER ON-CLEAR-DETAILS ON-POPULATE-DETAILS

SE DISPARA CUANDO.... se borra un registro en el bloque maestro. se necesita limpiar registros en el bloque detalle. Oracle necesita traer registros a un bloque detalle de forma sincronizada con el registro maestro.

4. DE CONTROL DE MENSAJES (MESSAGE-HANDLING TRIGGERS): Oracle proporciona automticamente mensajes de error e informacin en respuesta a eventos producidos en tiempo de ejecucin. Existen triggers que se disparan cuando se producen estos mensajes, lo que nos permite personalizar dichos mensajes. TRIGGER ON-ERROR ON-MESSAGE SE DISPARA CUANDO.... se produce un mensaje de error. se produce un mensaje informativo.

5. DE NAVEGACION (NAVIGATIONAL TRIGGERS): Responden a eventos de navegacin. Estos pueden producirse a distintos niveles: form, bloque, record o item. Pueden subdividirse en dos categoras: 5.a 5.b PRE- y POST TRIGGERS. WHEN-NEW-INSTACE TRIGGERS.

5.a Se disparan cuando Oracle navega internamente a travs de los diferentes niveles de la jerarqua de objetos.

TRIGGER PRE-FORM PRE-BLOCK PRE-RECORD PRE-TEXT-ITEM POST-TEXT-ITEM POST-RECORD POST-BLOCK POST-FORM

SE DISPARA Antes de entrar en un Abandona un text item nivel de record. Idem registro. Idem bloque. Idem form.

CUANDO.... form. bloque. registro. text item. y se navega al

5.b Se disparan al final de una secuencia de navegacin que coloca el cursor en un item diferente. Especialmente estos trigger se disparan justamente despus de que Oracle mueva el cursor a un item diferente, cuando el form queda en espera de una entrada del usuario, sin embargo no responden a navegaciones internas.

Copyright Jos Manuel Dez Perla 2.008

-5-

DEVELOPER TRIGGER WHEN-NEW-FORM-INSTANCE WHEN-NEW-BLOCK-INSTANCE

FORMS 6i

WHEN-NEW-RECORD-INSTANCE

WHEN-NEW-ITEM-INSTANCE

SE DISPARA CUANDO.... Se inicializa el form. Inmediatamente despus de que el cursor se site en un item de un bloque. dem en un campo de un registro diferente. Si el campo pertenece a otro bloque se dispara despus el WHEN-NEW-ITEM-INSTANCE y por ltimo el WHEN-NEW-BLOCK-INSTANCE, si lo hubiera Inmediatamente despus de situarse en un item nuevo.

6. DE CONSULTA (QUERY-TIME TRIGGERS): Se disparan antes o despus de que se ejecute una query en un bloque.

TRIGGER

PRE-QUERY

POST-QUERY

SE DISPARA CUANDO.... Este trigger valida el criterio de seleccin o aade nuevos criterios antes de ejecutar la SELECT correspondiente. Se dispara una vez por sentencia. Permite realizar una accin despus de traer un registro como consecuencia de una query. Se dispara una vez por cada registro trado.

7. TRANSACIONALES (TRANSACTIONAL TRIGGERS): Responden a una gran variedad de eventos que se producen cuando un form interacta con los datos fuente. TRIGGER ON-DELETE ON-INSERT ON-LOCK ON-LOGON ON-LOGOUT ON-UPDATE ON-MESSAGE POST-BLOCK POST-DATABASE-COMMIT POST-DELETE POST-FORM POST-FORMS-COMMIT POST-INSERT POST-LOGON POST-LOGOUT POST-RECORD SE DISPARA CUANDO.... se estn borrando registros, una vez por cada registro borrado. se estn insertando registros, una vez por cada registro insertado. se bloquea un registro. se realiza la conexin. se realiza la desconexin. se estn realizando modificaciones, una vez por cada registro modificado. se visualiza un mensaje Oracle. se abandona un bloque. despus de realizar el COMMIT. despus de borrar un registro. se abandona un form. los registros marcados para insertar, borrar o modificar han sido escritos y antes de terminar con la transaccin. despus de insertar un registro. despus de realizar la conexin. despus de realizar la desconexin. se abandona un registro.

Copyright Jos Manuel Dez Perla 2.008

-6-

DEVELOPER POST-TEXT-ITEM POST-UPDATE PRE-BLOCK PRE-COMMIT PRE-DELETE PRE-FORM PRE-INSERT PRE-LOGON PRE-LOGOUT PRE-QUERY PRE-RECORD PRE-TEXT-ITEM PRE-UPDATE

FORMS 6i

cuando el foco de la aplicacin se mueve desde un text item a otro. despus e modificar un registro. se navega de un bloque a otro. Justo antes de ejecutar un COMMIT. Justo antes de borrar un registro. se entra en un form. Justo antes de insertar un registro. Antes de realizar la conexin. Antes de realizar la desconexin. Antes de realizar una query. se navega a otro record. se navega a otro text item. Justo antes de modificar un registro.

8. DE VALIDACION (VALIDATION TRIGGERS): Se disparan cuando Oracle valida datos en un campo o registro. TRIGGER WHEN-VALIDATE-ITEM WHEN-VALIDATE-RECORD SE DISPARA CUANDO.... se valida un campo. se valida un record.

9. DE TECLA (KEY TRIGGERS): Se disparan cuando el usuario pulsa una tecla o combinacin de ellas.

10.

DE RESPUESTA A EVENTOS DEL RATON: TRIGGER SE DISPARA CUANDO.... se presiona el botn izquierdo del ratn. se presiona y libera el botn izquierdo del ratn. dem sobre el mismo canvas. Doble-click sobre el mismo canvas. se mueve el ratn a un canvas diferente o dentro de otro item (solo enfocar sin presionar). dem fuera del canvas o item. se mueve el ratn.

WHEN-MOUSE-DOWN WHEN-MOUSE-UP WHEN-MOUSE-CLICK WHEN-MOUSE-DOUBLECLICK WHEN-MOUSE-ENTER WHEN-MOUSE-LEAVE WHEN-MOUSE-MOVE

Dependiendo del tipo de trigger admitirn una serie de sentencias u otras cuya leyenda figura continuacin: Procedimientos empaquetados restringidos (PER).

Procedimientos empaquetados no restringidos (NPER). Sentencias SELECT...INTO.

Sentencias de manipulacin de datos (DML): INSERT, DELETE y UPDATE.

Copyright Jos Manuel Dez Perla 2.008

-7-

S-ar putea să vă placă și