Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Oracle Forms Manual
Oracle Forms Manual
PREPARADO POR
JUAN CARLOS ERAZO M.
6
8
2.3 EJERCICIO
10
10
3.1 EJERCICIO
12
12
12
13
15
15
18
19
20
20
20
21
6. USANDO TRIGGERS
23
25
7. VALIDACIÓN
29
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.
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.
Módulo
Lienzo
Bloque
Ítem
Origen 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.
e.
f.
g.
h.
Tipo de dato
i.
Requerido
j.
Máscara de formato
k.
l.
Nombre de columna
m.
n.
Visible
o.
Lienzo contenedor
p.
Visible
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
relacionados entre si. Para crear una relación entre dos bloques (ya deben estar
creados ambos bloques) se deben seguir los siguientes pasos:
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.
En esta sección veremos como usar el asistente para el layout y como crear
atributos visuales para aplicar sobre los objetos.
Una vez finalizado el asistente aparecerá el editor de layout con los registros
ubicados en el lienzo, tal como lo muestra la siguiente figura:
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.
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.
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).
Para crear un lienzo con separadores se deben seguir estos sencillos pasos:
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.
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
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.
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
aplicaciones
cliente
servidor
necesitan
constantemente
intercambiar
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
DECLARE
Alert_id
Num
number;
BEGIN
Set_alert_property(alert_id, ALERT_MESSAGE_TEXT, Error en la forma );
Num := show_alert(alert_id);
END;
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.
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 .
ON_COMMIT,
ON_ERROR,
ON_PULATE_DETAILS,
ON_ROLLBACK.
POST_QUERY,
POST_DELETE,
POST_COMMIT,
POST_UPDATE,
POST_TEXT_ITEM, POST_BLOCK.
WHEN_BUTTON_PRESED, WHEN_CREATE_RECORD,
WHEN_LIST_ACTIVATED, WHEN_NEW_ITEM_INSTANCE,
WHEN_VALIDATE_ITEM
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.
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
SYSTEM.CURSOR_ITEM
en
SYSTEM.CURSOR_RECORD
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
SYSTEM.CURRENT_ITEM
SYSTEM.LAST_RECORD
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;
Donde
PROPERTY
puede
ser:
current_record_attribute,
default_where,
NEXT_BLOCK
PREVIOUS_ITEM
NEXT_ITEM
PREVIOUS_RECORD
NEXT_RECORD
ENTER_QUERY
EXECUTE_QUERY
Descripción
Cómo se usa
dd-mon-rr
9999
$9999.99
Validar de la lista
100
200
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.
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.
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ú.
RUN_PRODUCT
(PRODUCTO,
MODULO,
MODO_COMUNICACIÓN,
MODO_EJECUCIÓN, UBICACION,
LISTA_PARAMETROS , DISPLAY);
Donde:
DECLARE
List_par
paramlist;
BEGIN
List_par := create_parameter_list( lista );
RUN_PRODUCT(REPORTS,
REP_EMP ,
SYNCHRONOUS,
RUNTIME,
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.
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.