Domingo, 07 Junio 2020 23:28

Introducción a los Triggers de Oracle Forms

Rate this item
(0 votes)

Objetivos:

Definir losTriggers (Disparadores).

Identificar las diferentes categorías de Triggers.
• Ver los tipos de Triggers y sus Alcances.
• Describir las propiedades que afectan el comportamiento de los Triggers.

 

NOTA: Usamos como ejemplo la Base de Datos: ORCL, la cual viene por defecto en cualquier versión de ORACLE.


Los Triggers

También llamados Desencadenantes Disparadores, son unos de los mecanismos más importantes utilizados para modificar y/o agregar funcionalidad a una aplicación Forms. En esta publicación, presentaremos propiedades y reglas/directrices esenciales para sacarles el mayor provecho posible al momento de crear aplicaciones.

Trigger Types Customed

 

Definición:

Un Trigger es una Unidad de Programa (Program Unit) que se ejecuta (dispara) debido a un evento. Forms Builder le permite crear potentes módulos o aplicaciones sin tener que recurrir o escribir una sola línea de código. Mediante el uso de Triggers puede agregar y/o modificar la funcionalidad del Forms de una manera procedimental. Como resultado, puede definir los procesos detallados de su aplicación.

En Forms Builder los Triggers son codificados con el lenguaje PL/SQL. Cada Trigger está asociado a un evento específico. Forms Builder define una amplia gama de eventos para los que se puede lanzar/disparar un Trigger. Estos eventos incluyen los siguientes:

  • Eventos relacionados con las consultas.
  • Entrada y validación de datos.
  • Navegación lógica y/o física.
  • Interacción del usuario con los Items delForms.
  • Eventos internos delForms.
  • Errores y mensajes.

Los eventos provocan la activación o disparo de ciertos tipos de Triggers. A continuación mostramos las categorías y las condiciones para que estos se disparen.¿Qué Trigger utilizaría para realizar cálculos complejos después de que un usuario introduzca datos en un Item?


Las Categorías de Triggers
Los Triggers pueden clasificarse según sus funciones:

Categoría

Dispara

Ejemplos

Procesamiento de bloques.

En respuesta a eventos relacionados con la gestión o manejo de registros en un bloque.

When-Create-Record

When-Clear-Block

When-Database-Record

When-Remove-Record

Evento de Interfaz.

En respuesta a eventos que se producen en la interfaz del Forms.

Key-[all]

When-Button-Pressed

When-[Checkbox | List | Radio]-Changed

When-Image-[Activated | Pressed]

When-Timer-Expired

When-Window-[Activated | Deactivated | Closed | Resized]

Maestro-Detalle.

Para reforzar la coordinación entre registros en un bloque detalle y su correspondiente del bloque maestro.

On-Check-Delete-Master

On-Clear-Details

On-Populate-Details

Manejo de Mensajes.

En respuesta a los mensajes predeterminados.

On-Error

On-Message

Navegación.

En respuesta a los eventos de navegación.

Pre-[Form | Block | Record | Text-Item]

Post-[Form | Block | Record | Text-Item]

When-New-[Form | Block | Record | Item]-Instance

Tiempo de Consulta.

Momentos (antes y después) en que el usuario o la aplicación ejecuta una consulta de un bloque.

Pre-Query

Post-Query

Validación

Después de que el usuario introduce datos y navega fuera del Item o registro en cuestión.

When-Validate-[Item | Record]

 

También puede categorizarlos de acuerdo a sus nombres:

Categoría

Descripción

When-Event

Punto en el que el procesamiento predeterminado de Forms puede ser alterado con tareas u operaciones adicionales.

On-Event

Punto en el que se puede sustituir el procesamiento predeterminado de Forms.

Pre-Event

Punto justo antes de la ocurrencia de un evento When o un evento On; Se utilizan para preparar los objetos o datos antes del posterior evento.

Post-Event

Punto justo después de la ocurrencia de un evento When o un evento On; Se utilizan para validar o realizar tareas de auditoría basadas en el evento anterior.

Key Triggers

Se activa cuando el operador pulsa una tecla o una secuencia de teclas específicas.


Componentes

Hay tres componentes principales a tener en cuenta al diseñar un Trigger en Forms Builder:

 

  • Tipo de Trigger (Trigger Type):Define el evento específico que provocará el disparo del disparador.
  • Código del Trigger (Trigger Code):Es el cuerpo escrito en PL/SQL que define las acciones del Trigger.
  • Alcance del Trigger (Trigger Scope):Es el nivel en un módulo Forms en el que se define el Trigger, determinando el alcance de los eventos que serán detectados por el mismo.

Tipo de Trigger

 

El tipo de Trigger determina qué tipo de evento se activa. Hay más de 100 Triggers integrados, cada uno identificado por un nombre específico. Los Triggers son en su mayoría disparados por eventos dentro de un módulo Forms. Los módulos de menú pueden iniciar un evento en un Form, pero dicho módulo es el que posee el Trigger que se activa.

Manny Triggers

 

El nombre de un Trigger identifica su tipo. Todos los tipos de Triggers incorporados de Forms están asociados con un evento, y sus nombres siempre contienen un guión (-).

Por ejemplo:
• When-Validate-Item se activa cuando Forms valida el contenido de un Item.
• Pre-Query dispara antes de que Forms emita una consulta para un bloque.

Nota: Los eventos de Base de Datos que se producen en nombre de un Forms pueden activar determinados Triggers, pero estos (de Base de Datos) son diferentes de los Triggers de Forms Builder.Forms Builder admite los Triggers nombrados o creados por el usuario, similares a los Triggers incorporados de Forms. Un Trigger creado por el usuario es uno que es nombrado por el programador. Estos Triggers disparan sólo si son llamados por otro activador o Unidad de Programa (Program Unit) que utiliza ciertas herramientas incorporadas en Forms.


En un Trigger, la primera parte del nombre (antes del primer guión) sigue una convención estándar; Esto le ayuda a comprender la naturaleza general de su tipo y a planificar cual de estos usar.

Prefijo (Prefix)

Descripción

Key-

Dispara en lugar de ejecutar la acción estándar de una tecla de función.

On-

Dispara en lugar de ejecutar el procesamiento estándar (utilizado para reemplazar o evitar procesos).

Pre-

Se activa justo antes de la acción nombrada en el tipo de Trigger (por ejemplo, antes de ejecutar una consulta (Pre-Query))

Post-

Se dispara justo después de la acción denominada en el tipo de Trigger (por ejemplo, después de ejecutar una consulta (Post-Query)).

When-

Dispara de lado del procesamiento estándar (utilizado para aumentar la funcionalidad).


Código del Trigger

El código del Trigger define las acciones a ejecutar cuando este se dispara. Escriba este código como un bloque PL/SQL anónimo mediante el Editor de PL/SQL. Necesita ingresar la estructura BEGIN. . . END en el texto del disparador sólo si inicia el bloque con una sentencia DECLARE o si necesita codificar subbloques.

 

Las sentencias que se escriben en un Trigger pueden incluir las siguiente:

  • ConstruccionesPL/SQLestándar (asignaciones, sentencias de control, etc.).
  • Sentencias SQL legales en un bloque PL/SQL; Estas se pasan al servidor.
  • Puede Invocar/Llamar subprogramas (procedimientos y funciones) definidos por el usuario en elForm, en una Librería o en la Base de Datos.
  • Puede hacer llamadas a subprogramas integrados así como también a subprogramas contenidos en paquetes.

Aunque puede incluir sentencias SQL en un Trigger , tenga en cuenta las siguientes reglas:

  • Las sentenciasINSERT,UPDATE y DELETE se pueden colocar en Triggers transaccionales. Estos Triggers se disparan durante el proceso de COMMIT.
  • Las sentencias de control de transacciones (COMMIT,ROLLBACK,SAVEPOINT) no deben incluirse directamente como sentencias de desencadenamiento de SQL. Estas acciones son realizadas automáticamente por Forms como resultado de comandos o procedimientos incorporados que emita. Si se incluyen en los Triggers, estos comandos se redirigen para ser manejados por Forms. Por ejemplo, COMMIT emitirá un COMMIT_FORM.

Alcance del Trigger

El alcance de un Trigger está determinado por su posición en la jerarquía de objetos de Forms, es decir, el tipo de objeto bajo el que se crea. Hay tres niveles posibles:

  • Nivel de Form:El Trigger pertenece alMódulo Form y puede dispararse debido a eventos en todo el Form .
  • Nivel de Bloque:El Trigger pertenece a un bloque y sólo se dispara cuando dicho bloque es el actual.
  • Nivel de Item:El Trigger pertenece a un Item individual y se dispara sólo cuando este Itemes el actual.

Algunos Triggers no se pueden definir debajo de cierto nivel. Por ejemplo, los Triggers Post-Query no se pueden definir en el Nivel de Item, porque se disparan debido a una consulta global o restringida en un bloque.

Por defecto, sólo se activa el Trigger mas cercano o específico para la ubicación actual del cursor.

Considere el siguiente ejemplo:

On Message Level Triggers

 

Al hacer doble click en el Item SALES_REP_ID (Vendedor), se activa el Trigger WHEN-MOUSE-DOUBLECLICK de dicho Item (Nivel Item), esto porque es más específico que los otros Triggers de este tipo.Al hacer doble click en otra parte del bloque ORDERS (Ordenes), se dispara el Trigger WHEN-MOUSE-DOUBLECLICK del Nivel Block, porque su alcance es más específico que el Trigger del Nivel Form y está fuera del alcance del Trigger del Nivel Item.

 

Al hacer doble click en el bloque ORDER_ITEMS (Productos de la Orden), se dispara el ya mencionado Trigger pero ahora del Nivel Form, esto porque el cursor está fuera del alcance de los otros dos Triggers.

 

Nota: Al final de esta publicación esta el link del Módulo correspondiente a este tema, dicho Módulo escenifica el ejemplo previamente explicado. A continuación mostramos algunas alertas que personalizamos de acuerdo al Nivel del Trigger:

DobleClick Trigger


Jerarquía de Ejecución
Como ya se ha indicado, cuando hay más de un Trigger del mismo tipo, Forms normalmente dispara el más específico de la ubicación del cursor. Puede modificar la secuencia de disparo de un disparador estableciendo la propiedad de disparo de la jerarquía de ejecución (EH).

Execution Hierarchy

 

El diagrama anterior muestra cómo el ajuste EH afecta el orden de disparo de los disparadores:
1. Dispara primero.
2. Dispara en segundo lugar.
3. Dispara de tercero.
4. Se dispara de forma independiente.Nota: Las líneas quebradas indican la ruta de análisis antes de disparar. EH significa execution hierarchy.La jerarquía de ejecución (EH) es una propiedad del Trigger que especifica cómo debe ejecutarse el código del Trigger actual si hay otro con el mismo nombre definido en un nivel superior en la jerarquía de objetos. Establecer EH para Triggers de nivel Form no tiene ningún efecto, ya que no hay ningún Trigger de nivel superior.

Los valores para la jerarquía de ejecución:
• Override: Sólo se dispara el Trigger más específico de la ubicación del cursor. Este es el valor predeterminado.
• After: El Trigger se dispara después de disparar otro del mismo tipo, si lo hay, en el siguiente nivel más alto.
• Before: El Trigger se dispara antes de disparar otro del mismo tipo, si lo hay, en el siguiente nivel más alto.En los casos de Before After, puede disparar más de un Trigger del mismo tipo como resultado de un solo evento. Sin embargo, debe definir cada Trigger en un nivel diferente.


Ajunto el Módulo Form creado para esta práctica: Link.


Fuente: Oracle Forms Developer 10g: Build Internet Applications.

Read 725 times Last modified on Miércoles, 19 Agosto 2020 17:21

Leave a comment

Make sure you enter all the required information, indicated by an asterisk (*). HTML code is not allowed.

Magic PL/SQL

Blog orientado al desarrollo de PL/SQL en el "Maravilloso Mundo ORACLE". Cursos Online y Tutoriales Gratis.