Está en la página 1de 42

CURSO BASICO DE DEVELOPER FORMS

PREPARADO POR
JUAN CARLOS ERAZO M.

Cali, Junio 2002


1. GENERALIDADES

2. CREANDO UNA FORMA BÁSICA

2.1 CREACIÓN DE UNA FORMA MANUALMENTE


2.2 CREACIÓN DE UNA FORMA USANDO EL ASISTENTE

6
8

2.3 EJERCICIO

10

3. CREANDO RELACIONES ENTRE BLOQUES

10

3.1 EJERCICIO

12

4. DANDO FORMA A LOS MÓDULOS

12

4.1 USANDO EL ASISTENTE DE LAYOUT


4.2 CREANDO EL LAYOUT MANUALMENTE
4.2.1 CREACIÓN DE ALGUNOS OBJETOS
4.2.1.1 Listas de valores (LOV)
4.2.1.2 Lienzos como separadores
4.2.1.3 Listas desplegables
4.2.1.4 Items de no entrada o de DISPLAY
4.2.2 EJERCICIO
4.3 CREANDO ATRIBUTOS VISUALES

12
13
15
15
18
19
20
20
20

5. DESPLEGANDO MENSAJES EN PANTALLA

21

6. USANDO TRIGGERS

23

6.1 ALCANCE DE LOS TRIGGERS


23

7. USO DEL API

25

7. VALIDACIÓN

29

7.1 USANDO PROPIEDADES PARA LAS VALIDACIONES


7.2 USANDO TRIGGERS PARA LAS VALIDACIONES
7.3 EJERCICIO

29
30
31

8. CREACIÓN DE MENÚS

31
8.1 INVOCANDO FORMAS DESDE EL MENÚ
8.2 INVOCANDO REPORTES DESDE EL MENÚ
8.3 EJERCICIO

33
34
35

9. EJERCICIO FINAL

36
1. Generalidades
A lo largo del curso se desarrollará una aplicación completa para la administración
de empleados, usando para ello los objetos del usuario SCOTT. Developer
FORMS ofrece dos formas de hacerlo: usando asistentes y manualmente.

El entorno de FORMS consiste de una pantalla con una barra de herramientas, un


navegador de objetos y una paleta de propiedades, tal como se aprecia en la
figura:

Para agregar un nuevo objeto se debe ubicar el cursor sobre este y presionar el
botón con el símbolo más (+) de la barra de herramientas izquierda. Para
eliminarlo se debe presionar el botón con el símbolo equis (X) en la misma barra
de herramientas.

Cada objeto tiene un conjunto de propiedades visibles en la paleta de


propiedades. Para modificar una propiedad solamente se necesita ubicar el cursor
en la cela junto al nombre de la misma y cambiar su contenido.
FORMS soporta la creación de FORMULARIOS (formas) y MENUS. Sin embargo
dentro de su entorno todos se conocen como módulos.

2. Creando una forma básica


Para crear una forma (o módulo) es necesario conocer la jerarquía de objetos de
FORMS.

Módulo

Lienzo

Bloque

Ítem

El Lienzo es el área de la ventana en la cual se ubicarán los ítems.


El bloque es una agrupación lógica de ítems. Los bloques pueden estar
asociados o no con la base de datos en cuyo caso se llamarán bloques de
datos. También pueden ser usados para controlar la ejecución del módulo,
en cuyo caso se llamarán bloques de control. Estos no están asociados
directamente con objetos de la base de datos.
El ítem es el objeto de interfaz que despliega información. Cada pequeño
objeto susceptible de ser incluido en un lienzo se considera como un ítem.
Es así como podemos encontrar: campos de texto, listas de valores,
imágenes, botones de chequeo, botones comunes, sonidos, controles de
Visual Basic y contenedores OLE, entre otros.
2.1 Creación de una forma manualmente
Para crear una forma se usan estos pasos:
1. Crear un nuevo módulo. Propiedades a tener en cuenta:
a. Nombre
b. Título
c. Ventana
d. Módulo menú: indica el módulo usado para crear el menú. También
indica que la forma será padre para todos los demás módulos. El
nombre del módulo debe incluirse completo (nombre + extensión)
e. Primer bloque de navegación: le indica a la forma que se ubique en
ese módulo al momento de ejecutarse
f. Unidad de validación: indica el orden en que se procesarán los
triggers
g. Modo de interacción: indica cómo el usuario interactuará con la
forma cuando se ejecuta una consulta. Por ejemplo, en modo
BLOCKING el usuario no podrá cambiar el tamaño de la ventana

2. Crear un nuevo lienzo (CANVAS). Propiedades a tener en cuenta:


a. Nombre
b. Tipo: indica la forma como se desplegará en la pantalla. Por ejemplo
CONTENT significa que ocupará toda el área de contenido
c. Visible
d. Ventana: indica en qué ventana se desplegará
e. Ancho y alto
f. Apariencia del borde ( BEVEL)
g. Atributos visuales

3. Crear bloques: Propiedades a tener en cuenta:


a. Nombre
b. Estilo de navegación: indica como se procederá en caso de estar en
el primero o en el último registro del bloque
c. Bloques anterior y siguiente
d. Atributos visuales para el registro actual
e. Longitud del arreglo de consulta. Indica el número de registros que
se traerán en una sola operación de lectura.
f. Número de registros cargados: especifica el número de registros que
se cargarán a memoria durante una consulta sobre el bloque (por
defecto son tres)
g. Número de registros desplegados: especifica el número de registros
que un bloque puede desplegar cada vez. Esta propiedad afecta
directamente la forma como se verá el bloque
h. Consultar todos los registro: indica si al momento de consultar el
bloque se traerán todos los registros o solo la cantidad especificada
en la propiedad

Longitud del arreglo de consulta . Se usa

comúnmente cuando hay ítems de resumen (por ejemplo sumas)


i.

Bloque de base de datos: especifica el tipo de bloque

j. Consulta, inserción, actualización y eliminación permitida: indican las


operaciones que se pueden ejecutar sobre los registros del bloque
k. Forzar llave primaria: comúnmente FORMS usa el ROWID para
identificar los registros en el bloque. Con esta propiedad se le indica
que use las llaves primarias de la tabla base.
l.

Origen de datos

m. Nombre origen de datos


n. Destino de datos

4. Crear ítems: Las propiedades de los ítems varían de acuerdo al tipo de los
mismos. Estas son algunas de las propiedades comunes
a.

Nombre

b.

Tipo

c.

Habilitado
d.

Justificación: indica la ubicación en el bloque

e.

Restricción del texto: indica la forma como se desplegará el texto


(mayúsculas, minúsculas, etc.)

f.

Navegable con el teclado

g.

Ítems anterior y siguiente

h.

Tipo de dato

i.

Requerido

j.

Máscara de formato

k.

Elemento de base de datos

l.

Nombre de columna

m.

Consulta, inserción, actualización permitida

n.

Visible

o.

Lienzo contenedor

p.

Visible

2.2 Creación de una forma usando el asistente


Realmente no hay un asistente para crear formas. Solamente para crear los
bloques de datos que la componen. Para crear una forma primero debe crearse un
nuevo módulo y posteriormente invocar al asistente para bloques que se
encuentra en el menú herramientas.
La siguiente es una descripción de los pasos usados para el Asistente para crear
un bloque de datos:

1. Seleccionar el tipo de fuente de datos del bloque: se puede seleccionar


entre tabla o vista y procedimiento PL/SQL. Si se selecciona tabla o vista
posteriormente se deben ingresar las columnas y tablas usadas. Si se
escoge procedimiento se deben seleccionar los procedimientos usados
para las operaciones sobre la base de datos.
2. Escoger tablas o vistas y columnas del bloque. Adicionalmente se debe
chequear la casilla forzar integridad referencial si se desea que FORMS
use los constraints definidos en la base de datos.
3. Crear el bloque solamente o crearlo y abrir el editor de Layout para
organizar su apariencia.

Una vez creado el bloque este aparecerá en el navegador de objetos con el mismo
nombre de la tabla base.
2.3 Ejercicio

En este ejercicio el objetivo es crear una forma básica manualmente y otra usando
el asistente. Ambas formas estarán basadas en la tabla DEPT, se deben mostrar
ocho (8) registros a la vez y debe haber una barra de desplazamiento para ver los
registros siguientes. Para cada objeto se deben establecer los valores de las
propiedades correspondientes:
Título: Ventana manual / automática
Columnas: DEPTNO, DNAME y LOC

También podremos apreciar el uso de los botones para la interacción con la base
de datos. Finalmente se crearán botones para realizar los mismos procesos de
forma manual.
3. Creando relaciones entre bloques
No todas las formas contienen un único bloque sobre el cual interactuar. Muchas
de ellas contienen más de uno (algunos maestro

detalle) los cuales están

relacionados entre si. Para crear una relación entre dos bloques (ya deben estar
creados ambos bloques) se deben seguir los siguientes pasos:

1. Ubicarse sobre el bloque maestro y crear una nueva relación


2. Seleccionar el bloque detalle en la ventana de creación de relaciones
3. Seleccionar las operaciones de eliminación de registros: en cascada para
eliminar los registros hijos junto con el padre, aisladas para no eliminar los
registros hijos cuando se elimine el padre, no aisladas para evitar que se
borre el registro maestro si hay registros hijos
4. Seleccionar la coordinación entre los bloques: diferida para que los
registros hijos no aparezcan cuando se hace la consulta sobre el bloque
maestro; para verlos se necesita hacer la consulta sobre el bloque hijo.
Auto consulta para traer los registros hijos automáticamente cuando se
navega al bloque detalle y prevención de operaciones sin registro maestro
para prevenir que se opere sobre registros hijos cuando no hay un maestro
seleccionado.
5. Escribir la operación de JOIN
6. O seleccione un objeto existente en ambos bloques sobre el cual se basará
la relación.

Una vez creada la relación FORMS adicionará nuevas unidades de programa y


triggers para controlar las operaciones de coordinación entre ambos bloques.

Es posible crear las relaciones de forma automática. Para ello se necesita crear
primero el bloque maestro y luego el detalle usando el Asistente. Una de las
opciones del asistente preguntará si hay o no un bloque maestro para crear la
relación.
3.1 Ejercicio
En este ejercicio el objetivo es crear un bloque adicional en las formas ya
existentes manualmente y usando el asistente. Este bloque estará basado en la
tabla EMP, se deben mostrar cuatro (4) registros a la vez y debe haber una barra
de desplazamiento para ver los registros siguientes. Para cada objeto se deben
establecer los valores de las propiedades correspondientes:
Título: Ventana manual / automática
Columnas: EMPNO, ENAME, JOB , MGR, HIREDATE, SAL, COMM,
DEPTNO.

Posteriormente se debe hacer una relación con el bloque DEPT y probar el


funcionamiento de la forma.

4. Dando forma a los módulos


Una vez la parte funcional de los módulos se encuentre operativa se puede centrar
la atención sobre la interfaz gráfica. La interfaz gráfica constituye una parte
importante del proceso de desarrollo de una aplicación por lo que FORMS cuenta
con un asistente para dar forma a la parte visual. Asimismo existen algunas
propiedades que sirven para cambiar la apariencia de los módulos.

En esta sección veremos como usar el asistente para el layout y como crear
atributos visuales para aplicar sobre los objetos.

4.1 Usando el asistente de layout


Hay dos formas de llegar al asistente de layout: a través del menú herramientas y
a través del submenú asociado al botón derecho del ratón, el cual aparece al
ubicarse sobre un bloque.
Al iniciar el asistente de layout se deben seguir los siguientes pasos:

1. Seleccionar un lienzo existente o crear uno nuevo


2. Seleccionar el bloque de datos y las columnas que aparecerán en el mismo
3. Escribir el texto que acompañará cada columna y el ancho del campo
asociado
4. Seleccionar el estilo de layout: tabular o formulario
5. Escoger un título para el marco, el número de registros a mostrar y la
distancia entre los mismos. También se puede seleccionar si se quiere o no
colocar una barra de desplazamiento de registros.

Una vez finalizado el asistente aparecerá el editor de layout con los registros
ubicados en el lienzo, tal como lo muestra la siguiente figura:

4.2 Creando el layout manualmente


Para crear al layout manualmente se debe invocar el editor y posteriormente
añadir uno a uno los objetos requeridos. Antes de ubicar los objetos se debe tener
cuidado de seleccionar el lienzo y el bloque con el cual se trabajará, de lo
contrario
los objetos aparecerán ubicados fuera de lugar. La siguiente tabla muestra la
descripción de algunos de los botones de la barra de herramientas del editor que
se usan para añadir objetos al lienzo.

Añadir ítem texto


Añadir campo de texto
Añadir marco (frame)
Añadir botón de radio
Añadir botón de chequeo
Añadir imagen
Añadir botón
Añadir ítem tipo lista desplegable
Añadir ítem para desplegar texto
Añadir lienzo en forma de separador

Al agregar cada uno de los objetos se debe tener en cuenta modificar sus
propiedades con el fin de ligar la parte visual con la parte funcional del módulo.

Existen adicionalmente algunos botones en la barra de herramientas horizontal


que nos permiten manipular la alineación de los objetos.
Alinear los ítems a la izquierda.
Alinear los ítems al centro vertical
Alinear los ítems a la derecha
Alinear los ítems a la parte superior
Alinear los ítems al centro horizontal
Alinear los ítems a la parte inferior

4.2.1 Creación de algunos objetos


En esta sección veremos la forma de creación de algunos objetos por
considerarlos de vital importancia para el desarrollo de aplicaciones.
4.2.1.1 Listas de valores (LOV)
Las listas de valores desplegables consisten de dos partes: la lista de valores
como tal y el grupo de registros.

Nota: Las listas de valores (LOV) son diferentes de los ítems tipo lista. Estos
últimos pueden tener datos estáticos y dinámicos, pero deben ser llenados de
forma manual.

Para crear una lista de valores se debe primero crear el grupo de registros.
En el grupo de registros se pueden especificar datos estáticos o datos dinámicos
provenientes de una consulta a la base de datos. Comúnmente se consultan
mínimo dos columnas, una de las cuales será desplegada en la lista de valores y
la otra se retornará a la forma cuando se seleccione el ítem.

Una vez creado el grupo de registros se procede a crear la lista de valores. Para
crearla se puede hacer uso del asistente o se puede hacer manualmente.

Creación de una lista de valores manualmente


Al crear la lista de forma manual se debe establecer un valor en las siguientes
propiedades (las demás son opcionales):

a. Nombre
b. Título
c. Grupo de registros
d. Mapeo de columnas. Esto consiste en hacer coincidir las columnas del
grupo de registros con las columnas en la forma.
Aquí se debe especificar un nombre para cada una de las columnas
involucradas en el grupo de registros y el lugar a donde retornarán sus
valores una vez se seleccione el ítem.

Una vez creada la lista se debe asignar esta a un ítem en la propiedad lista de
valores (LOV).

Creación de una lista de valores usando el asistente

Para crear la lista de valores se deben seguir estos pasos

que coinciden con las

pantallas del asistente - :

1. Escoger un grupo de registros o crear uno basado en una consulta


2. Ingresar la consulta para obtener los registros
3. Escoger las columnas del grupo de registros que irán en la lista de valores
4. Colocar un nombre para las columnas de la lista y asignar el ítem al cuál
retornará la selección
5. Escoger el título de la lista, el ancho, el alto y la ubicación
6. Seleccionar el número de registros a recuperar
7. Asignar la lista a un ítem del bloque

4.2.1.2 Lienzos como separadores


Un lienzo separador está constituido de una o más páginas de separadores, que
permiten al desarrollador desplegar una gran cantidad de información relacionada
en un simple objeto.

Para crear un lienzo con separadores se deben seguir estos sencillos pasos:

1. Seleccionar el lienzo en donde se van a alojar


2. Abrir el editor de layout
3. Seleccionar el objeto TAB CANVAS y ubicarlo en el lienzo
4. Modificar sus propiedades
5. Crear los bloques y asignarlos a cada página del lienzo

4.2.1.3 Listas desplegables


Las listas desplegables comúnmente se crean a partir de datos estáticos,
ingresados de forma manual en la lista. Sin embargo es posible llenarlas a partir
de datos provenientes de la base de datos usando un procedimiento como el que
sigue:

PROCEDURE LLENAR_LISTA_POP IS
LIST_ID ITEM;
the_count number := 1;
cursor c1 is
select job
from emp;
BEGIN
list_id := FIND_ITEM('block.item_name');
-- recorrer el cursor para llenar la lista
FOR v_c1 IN c1 LOOP
Add_List_Element(list_id,the_count, v_c1.job, v_c1.job);
the_count := the_count + 1;
END LOOP;
END;
Este procedimiento establece los valores de la lista obteniéndolos de la tabla EMP.

4.2.1.4 Items de no entrada o de DISPLAY


Algunas veces en nuestra forma queremos ubicar ítems que unicamente se
dediquen a mostrar valores, ya sea provenientes de otro ítem o directamente de la
base de datos. Esta funcionalidad la proveen los ítems de DISPLAY.

Un ítem de DISPLAY se crea cuando presionamos el botón

de la barra de

herramientas izquierda. Una vez creado se ajustan sus propiedades tal como si
fuera in ítem de texto normal. Si el ítem desplegará información de una tabla de la
base de datos se debe ajustar la propiedad

Nombre de columna . Si desplegará

información de otro ítem se debe ajustar las propiedades Copiar valor del ítem o
Sincronizar con el ítem o establecer una fórmula en caso que sea un ítem
calculado.

4.2.2 Ejercicio
El objetivo de este ejercicio es mejorar la apariencia de las formas creadas, para
lo
cual se usará el editor de layout. Se debe colocar un color distintivo para los
registros de cada bloque, cambiar el tipo de letra (si se quiere), agregar textos a
las columnas (prompt), cambiar el color de la letra y agregar otros detalles.

4.3 Creando atributos visuales


Los atributos visuales permiten asociar un conjunto de colores y tipos de letra a
los
ítems de un módulo. El uso de atributos visuales contribuye a mantener la
modularidad en el desarrollo de la interfaz gráfica de usuario por cuando para
cambiar la forma visual del módulo solo basta con escoger un atributo visual
diferente.
La creación de atributos visuales se hace de igual forma que cualquier otro objeto
del módulo y solamente se debe dar valores a las propiedades deseadas. Las
siguientes son algunas de las propiedades de los atributos visuales:

a. Nombre
b. Color de letra
c. Color de fondo
d. Tipo de relleno
e. Tipo de letra
f. Tamaño
g. Peso
h. Estilo
i.

Espacio

Una vez creado un atributo visual puede asignársele a cualquier ítem en la


propiedad atributo visual .

5. Desplegando mensajes en pantalla


Las

aplicaciones

cliente

servidor

necesitan

constantemente

intercambiar

información con el usuario, ya sea solicitándole una entrada de datos o


simplemente desplegando información como advertencias o mensajes de error en
ventanas independientes de los formularios. FORMS soporta esta característica a
través de un objeto llamado ALERTA. Una Alerta es simplemente una forma con
unas características muy particulares, la mayoría de las cuales son asignadas en
tiempo de ejecución, y que permite intercambiar información con el usuario.

Una alerta se crea de igual forma que cualquier otro objeto de FORMS y se le
establecen propiedades como:

a. Nombre
b. Título
c. Mensaje: el mensaje a desplegar.
d. Estilo: pueden crearse alertar de tipo Nota, precaución o parada. Estas
difieren en el icono usado.
e. Etiquetas de los botones

Una alerta se invoca comúnmente desde el código PL/SQL de la forma. Por


ejemplo:

DECLARE
Alert_id

alert := find_alert( alerta_error );

Num

number;

BEGIN
Set_alert_property(alert_id, ALERT_MESSAGE_TEXT, Error en la forma );
Num := show_alert(alert_id);

END;

Existe una forma alterna de mostrar mensajes usando la función MESSAGE de la


siguiente forma:

MESSAGE( Working... (30%), NO_ACKNOWLEDGE);

MESSAGE( Working... (30%), ACKNOWLEDGE);


MESSAGE( Working... (30%), ACKNOWLEDGE);
Este mensaje se mostrará en la barra de estado de la forma. La propiedad
ACKNOWLEDGE/NO_ACKNOWLEDGE, le dice a FORMS si debe mostrar una
ventana tipo alerta o solamente debe desplegar el mensaje en la barra de estado
respectivamente.

6. Usando triggers
Los triggers son los manejadores de eventos en FORMS. Cada trigger especifica
la ocurrencia de un suceso sobre un ítem. Es así como encontramos por ejemplo
que sobre un botón aplican estos triggers:

WHEN_BUTTON_PRESED
WHEN_NEW_INTEM_INSTANCE

Cada trigger es susceptible de ser programado para que ejecute una tarea
específica usando PL/SQL.

6.1 Alcance de los triggers


En Developer los triggers se pueden definir a nivel de bloque, ítem, registro o
formulario. El alcance del trigger corresponde con el alcance del nivel de la
jerarquía de objetos en que fue definido. Por ejemplo, si se asocia un trigger a
nivel de bloque los eventos de todos los elementos de dicho bloque ejecutarán el
trigger.

Si existe más de un trigger con el mismo nombre (o funcionalidad) en un ámbito


particular Developer lanzará el que está asociado con el elemento más bajo en la
jerarquía. Por ejemplo, si existe un trigger WHEN_NEW_ITEM_INSTANCE
asociado a un bloque y a un ítem, Developer ejecuta el trigger del ítem e ignora el
del bloque. Este comportamiento se puede cambiar modificando la propiedad
Execution Hierarchy del trigger.

Algunos triggers solo tienen validez cuando se definen a un nivel específico. Por
ejemplo WHEN_VALIDATE_RECORD no es aplicable a ítems individuales, por lo
que solo se puede definir a nivel de bloque y de formulario.

Para ver los triggers aplicables a un objeto basta con usar el menú asociado con el
botón derecho del ratón en la opción Smart triggers .

Estos son algunos tipos de triggers que existen en Developer:

De uso de teclas o comandos:

KEY_CLRFRM, KEY_COMMIT, KEY_EDIT, KEY_ENTQRY, KEY_F1, KEY_EXIT,


ON_CLOSE,

ON_COMMIT,

ON_ERROR,

ON_PULATE_DETAILS,

ON_ROLLBACK.

De eventos posteriores al objeto:

POST_QUERY,

POST_DELETE,

POST_COMMIT,

POST_UPDATE,

POST_TEXT_ITEM, POST_BLOCK.

De eventos anteriores al objeto:

PRE_DELETE, PRE_FORM, PRE_QUERY, PRE_TEXT_ITEM, PRE_BLOCK.


De eventos inmediatos:

WHEN_BUTTON_PRESED, WHEN_CREATE_RECORD,
WHEN_LIST_ACTIVATED, WHEN_NEW_ITEM_INSTANCE,
WHEN_VALIDATE_ITEM

Para controlar los errores presentados en un trigger y no permitir que el usuario


avance a los ítems siguientes se debe invocar la excepción predefinida
FORM_TRIGGER_FAILURE.

7. Uso del API


Developer cuenta con un conjunto de variables, funciones, procedimientos
creados para asistir a los desarrolladores en la creación de aplicaciones.

Como ya se ha visto, cada uno de los objetos que componen una aplicación
cuenta con propiedades, las cuales pueden ser manipuladas en tiempo de
ejecución usando el API. Es prácticamente imposible en un curso básico ver todas
las funciones del API, pero abarcaremos las más importantes.

En general existen dos tipos de funciones y procedimientos en el API: los que


establecen una propiedad y los que recuperan su valor. Todas ellas tienen una
estructura genérica aplicable a casi cualquier objeto. La sintaxis es la siguiente:

Para establecer valores en las propiedades de un objeto:


SET_<OBJETO>_PROPERTY(parámetros);

Para obtener valores de las propiedades de un objeto:


GET_<OBJETO>_PROPERTY(parámetros);

Para referenciar los objetos de FORMS se usan estas variables y procedimientos:


Objeto

Variable

Procedimiento

Bloque

BLOCK

Find_block( NAME )

Ítem

ITEM

Find_item( NAME )

Alerta

ALERT

Find_alert( NAME )

Lista de valores

LOV

Find_lov( NAME )

Lienzo

CANVAS

Find_canvas( NAME )

FORMS también permite conocer su estado interno a través variables del sistema.
La siguiente tabla contiene algunas de estas variables y su descripción:

Variable
SYSTEM.BLOCK_STATUS

Descripción
Representa el estado de un bloque donde el
cursor está ubicado. CHANGED, NEW,
QUERY. Por ejemplo:

IF

:System.Block_Status

'CHANGED'

THEN Commit_Form;
END IF;
SYSTEM.FORM_STATUS
Similar al anterior pero a nivel de forma.

SYSTEM.CURSOR_BLOCK

Representan el nombre o el valor del objeto

SYSTEM.CURSOR_ITEM

en

SYSTEM.CURSOR_RECORD

actualmente. Por ejemplo:

donde

el

cursor

está

ubicado

curblk := :System.Cursor_Block;
IF

curblk

'ORDERS'

THEN

Go_Block('ITEMS');

IF

:System.Cursor_Record

Go_Item('orders.total');
ELSE Previous_Item;

'1'

THEN
END IF;
SYSTEM.CURRENT_BLOCK

Representan el nombre del bloque o el

SYSTEM.CURRENT_ITEM

bloque e ítem del objeto que está enfocado


en el momento.

SYSTEM.LAST_RECORD

Retorna TRUE si está en el último registro


del bloque o FALSE si no. Por ejemplo:

IF :System.Last_Record = 'TRUE' THEN


Message('You are on the last row');
END IF;
SYSTEM.MODE

Indica cuando FORMS está en estado:


NORMAL, ENTER_QUERY, QUERY. Por
ejemplo:

IF :System.Cursor_Item = 'EMP.EMPNO'
and

:System.Mode = 'ENTER-QUERY'

THEN
IF

NOT

Show_Lov('my_lov')

THEN

RAISE Form_Trigger_Failure;
END IF;

Estas son algunos de los procedimientos y propiedades más usadas en la


construcción de aplicaciones:

Ubicar una ventana en la pantalla


SET_WINDOW_PROPERTY( NOMBRE , POSITION, X, Y)

Cambiar el tamaño de una ventana


SET_WINDOW_PROPERTY( NOMBRE , WINDOW_SIZE, X, Y)

Minimizar o maximizar una ventana


SET_WINDOW_PROPERTY( NOMBRE , WINDOW_STATE,
MINIMIZE|MAXIMIZE);

Cambiar las propiedades de un ítem


SET_ITEM_PROPERTY( BLOQUE.NOMBRE , PROPERTY, VALOR)

Donde PROPERTY puede ser: alignment, background_color, border_bevel,


case_restriction, enabled (PROPERTY_TRUE, PROPERTY_FALSE)

Cambiar las propiedades de un bloque


SET_BLOCK_PROPERTY( BLOQUE , PROPERTY, VALOR)

Donde

PROPERTY

puede

ser:

current_record_attribute,

default_where,

delete_allowed, next_navigation_block, order_by.

Ir a un bloque, ítem o registro


GO_BLOCK( NOMBRE )
GO_ITEM( NOMBRE )
GO_RECORD( NOMBRE )

Navegar por los bloques, ítems o registros


PREVIOUS_BLOCK

NEXT_BLOCK

PREVIOUS_ITEM

NEXT_ITEM

PREVIOUS_RECORD

NEXT_RECORD

Cerrar una forma


Exit_form (ASK_COMMIT | NO_COMMIT | DO_COMMIT | NO_VALIDATE);

Ejecutar una tecla o botón


DO_KEY(LIST_VALUES

ENTER_QUERY

EXECUTE_QUERY

CREATE_RECORD | DELETE RECORD | COMMIT_FORM )


|
7. Validación
Forms valida los ítems asegurando que cumpla con sus propiedades establecidas.
Las validaciones ocurren cuando:
Se navega fuera de una unidad de navegación: esto ocurre cuando un
usuario presiona ciertas teclas de función o presiona el ratón fuera de una
unidad de validación.
Cuando se invoca la función ENTER o el usuario presiona ENTER
Cuando se invoca el procedimiento COMMIT_FORM: en este caso se
valida la forma sin tener encuentra cada unidad de validación

El proceso de validación consiste en verificar primero el estado del ítem o


registro;
si este es inválido entonces se hace la validación estándar (contra las
propiedades) y luego se ejecuta el trigger WHEN_VALIDATE. La validación a nivel
de bloque o forma se hace para todos los registros del bloque o todos los bloques
de la forma respectivamente.

7.1 Usando propiedades para las validaciones


Algunas propiedades de los ítems proveen un tipo de validación estándar para los
valores que se han de capturar. Es así como existen propiedades para restringir el
formato de entrada de un ítem, restringir las operaciones permitidas, permitir la
navegación hacia él, restringir un rango de valores, etc.

Para ítems de tipo texto


Propiedad
Máscara de formato

Descripción

Cómo se usa

Restringe el formato de dd-mm-rrrr


entrada de un valor

dd-mon-rr
9999
$9999.99

Valor mínimo permitido

Establece el valor mínimo 1


que puede tomar
Valor máximo permitido

Establece el valor máximo 100


que puede tomar

Validar de la lista

100

200

Obliga a que el valor


pertenezca a la LOV

7.2 Usando triggers para las validaciones


Otra forma de realizar validaciones es usando el trigger WHEN_VALIDATE
(aplicable solo a ítems y a registros). Este trigger se dispara una vez el usuario
sale de la unidad de validación, ya sea que haga clic sobre otra área en la forma o
que simplemente intente pasar a otra unidad. Para programar este trigger basta
con incluir el código PL/SQL necesario para realizar la validación. El siguiente
ejemplo muestra el código necesario para validar que el salario de un empleado
no sea mayor que el del presidente:

DECLARE
sal_pres number;
BEGIN
select sal
into sal_pres
from emp
where job='PRESIDENT';
IF :emp.sal >= sal_pres then
message('El salario debe ser menor que el del presidente',
ACKNOWLEDGE);
raise form_trigger_failure;
end if;
EXCEPTION
when too_many_rows then
message('No se puede validar porque se encontraron demasiados
registros', ACKNOWLEDGE);
raise form_trigger_failure;
when others then
message('No
se
puede
validar
porque
ocurrió
un
error',
ACKNOWLEDGE);
raise form_trigger_failure;
END;
Para controlar los errores presentados en un trigger y no permitir que el usuario
avance a los ítems siguientes se debe invocar la excepción predefinida
FORM_TRIGGER_FAILURE.

7.3 Ejercicio
Este ejercicio consiste en agregar una validación sobre el campo JOB para que los
cargos que el usuario ingrese estén dentro de la lista de JOBS permitidos.

8. Creación de menús
Como se explicó al inicio, un menú es también un módulo en Oracle FORMS.

La forma más rápida de crear un menú es usando el Editor. El editor de menús es


una herramienta de FORMS que permite crear menús y menús desplegables.
Para invocar el Editor puede hacerse por la opción existente en el menú
Herramientas o directamente por el submenú asociado al botón derecho del ratón
al hacer clic sobre el módulo.
La pantalla inicial del editor de menú muestra la primera opción disponible. Cada
opción puede tener asociado un submenú el cual se creará usando el mismo
editor.

El editor de menú cuenta con los siguiente botones para la creación de menús y
submenús.

Crear un submenú
Crear otro menú
Eliminar un menú o submenú

Cada opción del menú o submenú debe ser programada para ejecutar una acción
específica, de lo contrario, al compilar el módulo aparecerán errores. Comúnmente
estas acciones hacen referencia a invocar otras formas o reportes existentes en la
aplicación.

8.1 Invocando formas desde el menú


Para invocar una forma desde una opción de menú basta con incluir el siguiente
código en la opción deseada:

CALL_FORM( NOMBRE );

Una vez establecidas todas las opciones del menú y programado su código se
debe compilar el menú. Esto se puede lograr usando la combinación de teclas
CTRL+T o directamente en el menú archivo, opción administración, opción
compilar archivo.
Cuando el menú se haya compilado y no tenga errores se debe asignar a la forma
en la propiedad módulo menú . En esta propiedad se debe escribir el nombre del
módulo menú.

8.2 Invocando reportes desde el menú


De igual forma en que se invocan formas desde el menú es posible invocar
también módulos de otros componentes de Developer como REPORTS

GRAPHICS. Para hacerlo se usa la siguiente instrucción:

RUN_PRODUCT

(PRODUCTO,

MODULO,

MODO_COMUNICACIÓN,

MODO_EJECUCIÓN, UBICACION,
LISTA_PARAMETROS , DISPLAY);

Donde:

PRODUCTO: indica el producto a invocar. Puede ser: REPORTS, FORMS o


GRAPHIS.
MODULO: es el nombre del módulo a invocar.
MODO_COMUNICACIÓN: especifica el modo de comunicación entre FORMS y el
producto a ejecutar. Puede ser SYNCHRONOUS para que el control vuelva a
FORMS solo cuando se deje de ejecutar el otro producto o ASYNCHRONOUS
para que el control retorne a FORMS una vez se haya lanzado el nuevo producto.
MODO_EJECUCIÓN: indica el modo de ejecución usado por el producto
invocado. Puede ser BATCH o RUNTIME.
UBICACIÓN: indica la ubicación del archivo. Puede ser FILESYSTEM o DB.
LISTA_PARÁMETROS: contiene la lista de parámetros que se pasarán al reporte
en caso de necesitarlos. Si no se pasan parámetros debe enviarse la lista vacía.
DISPLAY: especifica el nombre del ítem tipo CHART en el cual se desplegará el
resultado de la invocación del producto GRAPHICS.

Por ejemplo, para invocar un reporte llamado REP_EMP se usaría el siguiente


código:

DECLARE
List_par

paramlist;

BEGIN
List_par := create_parameter_list( lista );
RUN_PRODUCT(REPORTS,

REP_EMP ,

SYNCHRONOUS,

RUNTIME,

FILESYSTEM, list_par, NULL);


END;

8.3 Ejercicio
Este ejercicio consiste simplemente en crear un menú con dos opciones
principales: Departamentos, Salir. La primera opción debe tener un submenú con
una opción llamada mantenimiento la cual invocará la forma para tal fin. La opción
salir solamente debe cerrar las formas.
9. Ejercicio final
El ejercicio final pretende poner en práctica todo lo visto hasta el momento y
despertar las aptitudes investigativas con el fin de encontrar funcionalidades no
contenidas en el curso.

Los requerimientos de este ejercicio son los siguientes:

La universidad Santiago de Cali desea contar con una aplicación para mantener la
información de sus departamentos y empleados. Deben existir pantallas
exclusivas para el ingreso de departamentos y de rangos salariales de los
empleados. Debe tener también la posibilidad de consultar un departamento a la
vez, con sus respectivos empleados en donde pueda observarse toda la
información del departamento, toda la información del empleado, el grado de
rango salarial que tiene y la suma total de los salarios para tal departamento. Al
ingresar un empleado nuevo o modificar uno existente debe validarse que el Jefe
(Manager) exista, que el salario no sea mayor que el salario del presidente y que
no exceda los límites para su rango. Es deseable que para cada validación
necesaria se muestren las alertas respectivas con el fin de informar al usuario el
problema ocurrido. En lo posible deben existir botones para agregar registros,
navegar entre los bloques (en caso de ser necesario) y guardar los datos
ingresados.

También podría gustarte