Está en la página 1de 45

Marzo - 2009

CURSO
BASE DE
DATOS FORMS

Developer - FORMS Curso Base de Datos

Resumen - SQL Página 1


Introducción
El componente Forms de Developer es la parte del entorno de desarrollo en la que se
construyen los módulos de formularios.

También proporciona el entorno de trabajo para desarrollar menús y módulos de biblioteca


PL/SQL.

El entorno de FORMS consiste de una pantalla con una barra de herramientas, un navegador
de objetos y una paleta de propiedades.

Developer Forms Página 2


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.

El módulo de formularios es el componente principal de las aplicaciones interactivas. También


es el módulo más complejo en términos de estructura interna, ya que contiene clases distintas
de elementos.

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 celda junto al nombre de
la misma y cambiar su contenido.

Para crear un módulo es necesario reconocer los objetos que lo componen:

Lienzo

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

Bloque

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.

Ítem

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. Como por ejemplo
campos de texto, listas de valores, imágenes, botones de chequeo, botones comunes,
sonidos, controles de Visual Basic y contenedores OLE, entre otros.

Developer Forms Página 3


Creación de formulario con el asistente

Si vamos a utilizar elementos de la base de datos, lo primero será realizar la conexión sobre
ésta.

Para crear un formulario debemos crear un nuevo módulo y posteriormente invocar al


asistente de bloques que se encuentra en el menú herramientas.

Developer Forms Página 4


Seleccionaremos el tipo de bloque que deseamos crear. Se puede seleccionar entre tabla o
vista y procedimiento almacenado. Si se selecciona tabla o vista posteriormente se deben
ingresar las columnas y tablas usadas. Si se elige procedimiento se deben seleccionar los
procedimientos utilizados para las operaciones de la base de datos.

Elegir tablas o vistas y columnas del bloque. Adicionalmente se debe chequear la casilla forzar
integridad referencial si se desea que FORMS use las restricciones definidas en la base de
datos.

Developer Forms Página 5


Si hemos seleccionado tablas o vistas, podemos indicar qué columnas deseamos que
compongan el bloque.

Una vez creado el bloque este aparecerá en el navegador de objetos con el mismo nombre de
la tabla base o vista. Si se desea se puede modificar.

Developer Forms Página 6


Crear sólo el bloque de datos o crearlo y llamar al Asistente de Diseño. Si elegimos ésta última
opción, se nos guiará para presentar los elementos seleccionados.

Hay dos formas de llegar al Asistente de Diseño, 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 Diseño se debemos seleccionar el lienzo (Canvas) existente o crear


uno nuevo, y el tipo de lienzo apropiado.

Developer Forms Página 7


Seleccionamos el bloque de datos y las columnas que aparecerán en el mismo.

Escribimos el texto que acompañará (Prompt) cada columna y el ancho y la altura del campo.

Seleccionamos el estilo tabular o formulario.

Developer Forms Página 8


Introducimos 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 deseamos una barra de desplazamiento de
registros.

Una vez finalizado el asistente visualizaremos los registros ubicados en el lienzo.

Developer Forms Página 9


Ejecución de un formulario
Una vez creado el formulario y guardado, procederemos a la ejecución.

Para poder ejecutar el formulario, tenemos que tener iniciada la instancia OC4J.

Developer Forms Página 10


Dentro del menú Depurar, tenemos la opción Depurar Módulo. Y obtenemos el resultado.

Botones de Oracle Forms Runtime:

Guardar: Este botón nos permite almacenar las modificaciones hechas en un registro,
las nuevas tuplas creadas y las entradas eliminadas. Es un commit en la base de datos.

Salir: Con este botón nos salimos de la ejecución del formulario.

Ejecutar consulta: Con este botón ejecutamos una consulta sobre la base de datos en
función del contenido del formulario, si no tienen ningún valor, nos permite consultar todos
los registros.

Introducir consulta: Nos permite introducir una consulta para traernos aquellas tuplas de
la base de datos que cumplan una determinada condición.

Bloque anterior: Sirve para irnos al anterior bloque de datos, cuando hay más de uno.

Registro anterior: Nos permite irnos al anterior registro, cuando hay más de uno.

Registro siguiente: Sirve para irnos al siguiente registro, cuando hay más de uno.

Bloque siguiente: Nos permite irnos al siguiente bloque de datos, cuando hay más de uno.

Insertar registro: Este botón sirve para añadir un nuevo registro a la tabla.

Suprimir registro: Con este botón podemos borrar el registro que se muestra.

Developer Forms Página 11


Bloques
Los bloques de un formulario pueden estar basados en diferentes orígenes. En un tabla, en una
vista, en una consulta, en un procedimiento.

Un formulario puede estar compuesto por varios bloques.

Al crear un segundo bloque basado en otra tabla o vista, el asistente de creación de bloque,
nos pregunta sobre la posible relación maestro detalle de un bloque respecto a otro.

Donde seleccionamos las columnas que unen el bloque maestro con el bloque detalle.

Developer Forms Página 12


El asistente se encarga de crear la relación entre bloques, procedimiento y disparadores para
visualizar los datos detalle en relación a los datos maestros.

Mediante la paleta de propiedades, respecto a un bloque, podemos modificar la cláusula


WHERE o la cláusula ORDER BY, para establecer alguna condición sobre los datos a recuperar
por el bloque y/o para indicar una ordenación específica.

Developer Forms Página 13


Bloques basados en procedimientos
Los bloques se pueden basar en procedimientos PL/SQL que devuelvan un cursor REF o una
variable de tabla PL/SQL que contenga una o más filas. Si basamos un bloque en un
procedimiento, se nos permite cambiar cualquier elemento de la consulta, incluyendo las
tablas de origen o de destino. También se pueden utilizar estructuras de bucle y condicionales
PL/SQL con el fin de manipular los valores antes de devolverlos al bloque. Cuando el bloque
ejecuta ordenes DML, podemos interceptarlas e interpretarlas según las necesidades.

Procedimiento de tipo tabla PL/SQL

Un bloque se puede basar en un procedimiento que devuelva una tabla PL/SQL, lo cual es útil
cuando se desea que un bloque muestre información que dependiera de una consulta SQL
compleja.

Procedimiento de tipo REF CURSOR

Una variable de cursor (REF CURSOR) apunta a una fila específica de un conjunto de datos
resultantes de una consulta. Cuando deseemos realizar una consulta, tenemos que declarar el
cursor REF CURSOR y crear una función que recupere las filas en la variable de cursor.

Una variable cursor REF CURSOR es una referencia a cursores, más exactamente es un puntero
a un área de trabajo, donde Oracle almacena los datos resultantes de una selección múltiple
de registros. Estos punteros almacenan la dirección de memoria del objeto apuntado y por lo
tanto, se pueden pasar como parámetros de entrada y/o salida entre procedimientos
almacenados y funciones.

Un procedimiento almacenado devuelve una referencia a un cursor abierto, rellenado por la


sentencia SELECT, que se usa como origen de datos para el bloque.

En un procedimiento PL/SQL puede haber almacenado uno o más cursores. Mediante


programación se podrá elegir que cursor se utiliza para rellenar el bloque.

Los cursores se deben definir antes de la ejecución, pero se podrán modificar con el uso de
variables de acoplamiento.

Un cursor REF CURSOR sólo puede ver un origen de datos y no un destino de datos, lo que
significa que no es posible devolver información al procedimiento por medio del cursor REF
CURSOR.

Los bloques los deberemos de basar en cursores REF CURSOR cuando se necesite el nivel de
flexibilidad que este tipo de cursor proporciona.

Developer Forms Página 14


Una variable de tipo REF CURSOR se utilizará como valor de retorno para el procedimiento de
seleccionar y una tabla PL/SQL de registros para pasar valores desde y hacia los
procedimientos de instrucciones DML y procedimientos de bloqueo.

Seleccionamos el procedimiento desarrollado para la sentencia SELECT.

Developer Forms Página 15


Seleccionamos el procedimiento desarrollado para la sentencia INSERT. A continuación
realizamos los mismos pasos para UPDATE, DELETE y BLOCK.

Un ejemplo de sintaxis típico de especificación de paquete para un formulario basado en un


procedimiento almacenado, podría ser el siguiente:

create or replace PACKAGE <NOMBRE_PAQUETE> AS

type <REGISTRO> IS record(


<CAMPO_1> <TIPO>,
<CAMPO_2> <TIPO>,
… … ..
<CAMPO_N> <TIPO> );

type <NOMBRE_REF_CURSOR> IS REF CURSOR RETURN <REGISTRO>;

type <NOMBRE_TABLA> IS TABLE OF <REGISTRO> INDEX BY binary_integer;

PROCEDURE seleccionar( <PARAMETRO> IN OUT <NOMBRE_REF_CURSOR> );


PROCEDURE insertar(<PARAMETRO> IN OUT NOCOPY <NOMBRE_TABLA>);
PROCEDURE borrar(<PARAMETRO> IN OUT NOCOPY <NOMBRE_TABLA>);
PROCEDURE modificar( <PARAMETRO> IN OUT NOCOPY <NOMBRE_TABLA>);
PROCEDURE bloquear(<PARAMETRO> IN OUT NOCOPY <NOMBRE_TABLA>);

END;

Developer Forms Página 16


CONSULTAS

La función de consulta mediante ejemplo, permite al usuario poner la pantalla en el modo de


introducción de consulta, introducir algún valor y ejecutar la consulta para recuperar filas de la
base de datos. Cuando basamos un bloque en una tabla el entorno de ejecución de Forms
genera una instrucción SELECT a partir de los elementos de bloque y crea una cláusula WHERE
basada en las condiciones de consulta que introduce el usuario.

Si basamos un bloque en un procedimiento, el entorno de ejecución de Forms no crea la


instrucción SELECT normal, es decir, las condiciones de consulta que introduce el usuario no
tendrán ningún efecto. Sin embargo, podemos escribir código para emular parte de la
funcionalidad de la característica de la función de consulta mediante ejemplo.

Debemos modificar el procedimiento de selección. Tenemos que pasar parámetros al


procedimiento para incluirlos en la cláusula WHERE de la consulta.

PROCEDURE seleccionar(
<PARAMETRO_CURSOR> IN OUT <NOMBRE_REF_CURSOR> ,
<PARAMETRO_CONSULTA> IN <TIPO> );

También debemos añadir al procedimiento, dentro de la cláusula WHERE de la consulta el


parámetro pasado, para establecer una condición.

WHERE <CAMPO_1> = <PARAMETRO_CONSULTA> ;

Además debemos cambiar la pantalla. Mediante el Asistente de Bloques, nos situaremos en la


ficha de Consulta, pulsaremos el botón de Refrescar y aparecerá abajo el nuevo parámetro.
Hay que proporcionar un valor para el argumento en la columna Valor. Proporcionaremos el
elemento de formulario donde escribiremos el contenido de la consulta, para ello, utilizaremos
la sintaxis :BLOQUE.ELEMENTO .

Developer Forms Página 17


CONTROL MEDIANTE PROGRAMA

Podemos utilizar la función predefinida SET_BLOCK_PROPERTY para cambiar el destino DML y


el origen de consulta del bloque mediante código PL/SQL.

SET_BLOCK_PROPERTY(‘<NOMBRE_BLOQUE>’ , QUERY_DATA_SOURCE_NAME , ‘(<CONSULTA>)’);

La consulta deberá escribirse entre paréntesis.

Developer Forms Página 18


Elementos

Módulo de Formularios

El módulo de formularios es el componente principal de las aplicaciones interactivas. También


es el módulo más complejo ya que contiene clases distintas de elementos.

Disparadores

Un disparador es un bloque de código PL/SQL que se asocia a otro elemento: un formulario, un


bloque de datos o un elemento de un bloque de datos. El disparador se dispara o se ejecuta,
cuando se producen ciertos eventos.

Los disparadores de una aplicación de formularios contienen el código que se añade a la


aplicación, aparte del código que se introduce en las unidades de programa independientes o
en bibliotecas.

Los disparadores y su estructura lógica constituyen la mayor parte del diseño de un formulario.

La mayoría de los disparadores que se utilizan son disparadores incorporados, es decir,


disparadores proporcionados por el entorno de trabajo de Developer.

Cada disparador tiene un nombre específico, por ejemplo, When-Button-Pressed, Post-Query,


On-Delete … que se puede seleccionar de una lista de nombres de disparador.

Developer Forms Página 19


Por ejemplo si cuando ejecutemos un formulario queremos que se ejecute una consulta, lo
vamos a hacer de forma automática cuando cree el formulario. Para ello, en el navegador de
objetos, nos vamos a Disparadores y pulsamos el botón de crear, seleccionamos el disparador
WHEN-NEW-FORM-INSTANCE y pulsamos aceptar.

En el editor de PL/SQL bastará con escribir la orden EXECUTE_QUERY, siempre y cuando sólo
exista un bloque en la pantalla. En el caso de existir más de un bloque, primero debemos de
activar el bloque mediante la orden GO_BLOCK(‘NOMBRE_BLOQUE’).

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 Jerarquía de Ejecución del trigger.

Developer Forms Página 20


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 sólo 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 Disparadores Smart.

Disponemos de distintos tipos de disparadores

De uso de teclas: Los disparadores de teclas, se ejecutan cuando se pulsa una


combinación de teclas en la interfaz de usuario. Añadir disparadores de teclas permite
reprogramar el teclado para realizar acciones diferentes de las definiciones estándar de las
teclas. (KEY_CLRFRM, KEY_COMMIT, KEY_EDIT, KEY_ENTQRY, KEY_F1, KEY_EXIT).

De comandos: (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 disparador y no permitir que el usuario avance a
los ítems siguientes se debe invocar la excepción predefinida FORM_TRIGGER_FAILURE.

Developer Forms Página 21


Alertas

Developer tiene un tipo especial de ventanas para enviar avisos al usuario. Básicamente
mostrará un mensaje y puede tener hasta tres botones (por ejemplo, "Si" "No" y "Cancelar").
Hay tres tipos de estilos de alerta: Parar, Atención y Nota.

PARAR

ATENCIÓN

NOTA

Por ejemplo creamos una alerta que nos muestre un mensaje informativo de bienvenida
cuando se ejecute el formulario de Proveedores por zonas.

En el Navegador de Objetos, seleccionamos Alertas y pulsamos el botón de crear. Abrimos la


paleta de propiedades de la alerta creada.

Developer Forms Página 22


Para llamar a la alerta, en el disparador WHEN_NEW_FORM_INSTANCE, escribimos el siguiente
código:

DECLARE
ALERTA NUMBER;
BEGIN
ALERTA := SHOW_ALERT('A_PRESENTACION');
GO_BLOCK('B_PROVEEDORES');
EXECUTE_QUERY;
END;

La función SHOW_ALERT devuelve el número ALERT_BUTTON1, ALERT_BUTTON2,


ALERT_BUTTON3 dependiendo de qué botón haya sido pulsado.

Bibliotecas conectadas

Es un área donde se pueden definir enlaces a librerías o bibliotecas pll, donde se encuentren
las funciones, procedimientos o paquetes.

Developer Forms Página 23


Bloques de datos

El bloque de datos es la unidad de construcción intermedia de los formularios.

Un bloque de datos se puede ver de dos formas, como una colección de elementos o como
una colección de registros, cada uno de los cuales tiene la misma estructura.

Se puede especificar el número de registros que se van a mostrar a la vez.

Hay dos clases de bloques de datos:

Un bloque de datos tabla base corresponde a una tabla o una vista de la base de datos
y controla un número de registros que corresponden a las filas de la tabla o vista.

Un bloque de control no corresponde a una tabla o vista y sus registros no se


corresponden a filas de la base de datos.

Normalmente los bloques de control representan un conjunto de elementos con valores


únicos, que tienen sólo un único registro.

Por ejemplo, si es necesario conocer en todo momento los valores añadidos a un conjunto de
registros para calcular un total o una media, se puede crear un elemento en un bloque de
control que represente dicho valor, existiendo un único valor para ese elemento y bloque de
control.

El bloque de datos tiene una barra de desplazamiento que permite al usuario gestionar un
conjunto de registros mayor que el que se puede mostrar en el lienzo. También puede tener
un conjunto especial de atributos visuales, elementos programables, que definen un aspecto
diferente para el registro en curso, el registro en el que está el cursor.

La navegación dentro del bloque de datos se produce normalmente en el orden en el que se


definen los elementos en un registro. El sistema en tiempo de ejecución tiene funciones para
moverse de registro en registro, de elemento en elemento y de bloque de datos en bloque de
datos.

Cuando se sale del último elemento de un registro, se vuelve normalmente al primer elemento
de ese registro. Forms permite volver a definir este comportamiento para poder pasar al
siguiente registro (o al registro anterior si se retrocede desde el primer elemento). También
permite pasar al bloque de datos siguiente o anterior cuando el movimiento se realiza desde el
último o el primer elemento, respectivamente. Se puede especificar qué bloque de datos es el
siguiente o el anterior.

La función principal de un bloque de datos de tabla base es proporcionar una interfaz a una
tabla o, un procedimiento almacenado en la base de datos.

Developer Forms Página 24


Elementos

Son las unidades básicas de desarrollo de formularios. Un elemento tiene muchas


propiedades. Cada tipo de elemento tienes sus propiedades.

Se puede hacer referencia a los valores de un elemento utilizando un punto como parte de
esta sintaxis especial:

<Nombre del bloque de datos>.<nombre del elemento>

Existen diferentes tipos de elementos: Cuadro de verificación, Imagen, Lista, botón, etc.

Se puede especificar un formato de máscara que establezca el formato de la salida o valide la


entrada.

Se puede especificar un valor por defecto par el elemento o especificar el nombre de otro
elemento del cual copiar el valor inicial.

Elementos con Resultados de Cálculos

Se pueden crear campos que muestren cálculos elaborados en función de otros campos o que
realicen agregaciones para grupos de registros. Estos campos no almacenan el resultado en la
Base de Datos.

Visualizamos las propiedades del campo y establecemos Modo de Cálculo Fórmula.

Si elegimos Fórmula, deberemos escribir la operación deseada.

Developer Forms Página 25


Si elegimos resumen, debemos de indicar en la propiedad Precalcular Resúmenes del bloque a
resumir que Sí.

Posteriormente elegiremos en el Item a definir, el Tipo de Dato numérico (Number), la Función


de Resumen, el Bloque Resumido y el Elemento Resumido.

Grupo de Botones de Radio

Podemos crear Botones de opción para crear opciones excluyentes.

Developer Forms Página 26


Casilla de control

Permiten elegir entre dos valores.

Elementos de Lista

Permiten elegir entre una lista de valores. Los valores pueden establecerse a través de las
propiedades del elemento o a partir de un Grupo de Registros mediante programación.

Developer Forms Página 27


En el caso de rellenar el Elemento de Lista a partir de un Grupo de Registro, necesitamos un
procedimiento que rellene la lista de valores a partir de los datos obtenidos por la selección. A
dicho procedimiento lo podemos invocar al cargar el formulario.

El siguiente procedimiento, es genérico, sirve para rellenar cualquier lista con cualquier grupo
de registros.

Developer Forms Página 28


Elementos Imagen

Permite trabajar con imágenes, estas pueden ser independientes de una consulta, como un
logotipo, o bien, pueden ser un campo perteneciente a una tabla.

Los campos pueden ser de tipo BLOB, datos binarios en ORACLE. Los datos binarios nos van a
permitir guardar en la base de datos archivos, imágenes, sonidos, etc.

Casi siempre es preferible guardar la ruta del archivo en la base de datos en lugar del propio
archivo en modo binario.

Vamos a cargar un fichero existente en el servidor en un campo BLOB de una tabla.

Lo que debemos hacer es crear un objeto directorio, esto es necesario ya que el fichero que
queremos guardar se encuentra en el servidor (PL/SQL se ejecuta en el servidor), y debemos
permitir explícitamente el acceso al directorio al usuario que ejecutará el código PL/SQL.

Debemos, como administrador, crear el directorio y otorgar permiso de lectura al usuario. El


directorio físico del servidor debe existir.

CREATE OR REPLACE DIRECTORY FOTOS AS 'C:\imagenes' ;

GRANT READ ON DIRECTORY FOTOS TO A01;

Developer Forms Página 29


Ejecutaremos el siguiente bloque para guardar la imagen del fichero art1.jpg en el campo foto
de la tabla de artículos.

DECLARE
v_bfile BFILE;
v_blob BLOB;
BEGIN
update tarticulo set foto = empty_blob() where CODIGO_ART = 'S-710-MP'
return foto into v_blob;
v_bfile := BFILENAME('FOTOS', 'art1.jpg');
DBMS_LOB.fileopen(v_bfile, Dbms_Lob.File_Readonly);
DBMS_LOB.loadfromfile(v_blob,v_bfile,DBMS_LOB.getlength(v_bfile));
DBMS_LOB.fileclose(v_bfile);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE;
END;

Primero insertamos y/o actualizamos el campo BIN vacio con la función EMPTY_BLOB y al
utilizar RETURN en la sentencia UPDATE se guarda una referencia al campo BIN que
posteriormente asignamos al leer el archivo con DBMS_LOB.Loadfromfile.

La función EMPTY_BLOB. Nos permite guardar un valor nulo en un campo BLOB.

La función BFILENAME devuelve un objeto BFILE que representa la ruta del fichero <art1.jpg>
que queremos almacenar en la tabla.

El uso del paquete DBMS_LOB, permite trabajar con tipos binarios.

Fileopen abre el archivo definido por BFILE (v_bfile) en el modo indicado.

Loadfromfile lee un determinado número de bytes del fichero definido por BFILE(v_bfile) en un
objeto de tipo BLOB (v_blob).

Getlength devuelve el tamaño del archivo en bytes.

Fileclose cierra el archivo

Developer Forms Página 30


Elementos Botón

Permite crear elementos para ser accionados y producir una tarea. Estos elementos suelen
asociarse a disparadores como WHEN-BUTTON-PRESSED.

Elemento Mostrado

Los elementos de formulario definidos de este tipo, no permiten la edición, ni si quiera el


posicionamiento sobre ellos.

Developer Forms Página 31


Relaciones

Una relación es un elemento especial que Forms utiliza para estructurar formularios maestro-
detalle. El elemento relación, que pertenece al bloque de datos maestro, expresa la relación
del registro maestro con sus registros detallados.

Las propiedades principales de la relación son el nombre del bloque de datos detallado y la
condición de unión que Forms utiliza para gestionar la relación.

También se puede especificar algún comportamiento especial respecto a la eliminación de


registros maestros, si se tienen que borrar, o no, los registros detallados, o la introducción o
actualización de registros detallados cuando no existe un registro maestro.

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 sí. Para
crear una relación entre dos bloques se debe situarse sobre el bloque maestro y crear una
nueva relación. Seleccionar el bloque detalle en la ventana de creación de relaciones y
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.

Seleccionaremos 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, consulta automática 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.

Además debemos escribir la condición de unión ó seleccionar un objeto común existente en


ambos bloques sobre el cual se basará la relación.

Developer Forms Página 32


Una vez creada la relación FORMS añadirá nuevas unidades de programa y disparadores 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.

Developer Forms Página 33


Lienzos

Un lienzo es la base sobre la que se sitúa el texto y los elementos. Cada elemento hace
referencia a un único lienzo en su hoja de propiedades. Los elementos de un bloque de datos
se pueden dividir entre diferentes lienzos.

Un lienzo no es un elemento de interfaz autónomo. Para mostrarlo y ver sus elementos es


necesario mostrarlo en una ventana. La parte del lienzo que se puede ver a través de la
ventana es la vista. La ventana puede tener barras de desplazamiento que permiten moverse a
través del lienzo para ver diferentes vistas.

Hay varios tipos de lienzo, de contenido, que muestran el contenido básico de una ventana, de
separador, que muestran el contenido básico de una ventana en una serie de lienzos
superpuestos con solapas de etiqueta, apilado, que se muestra sobre otros lienzos para
mostrar información condicional o independiente, barra de herramientas vertical, que
contiene iconos de herramientas que se muestran en una barra de herramientas vertical
situada en el lado izquierdo de una ventana y barra de herramientas horizontal, que contiene
iconos de herramientas que se muestran en una barra de herramientas horizontal situada en la
parte superior de una ventana.

Lienzo Separador

Lienzo Apilado

Developer Forms Página 34


Editores

Los editores permiten definir y diseñar nuestras propias ventanas de edición, para asociar con
los elementos del formulario y utilizarlos cuando se soliciten.

Developer Forms Página 35


Lista de Valores ( LOV )

Las listas de valores son objetos desplegables que muestran una serie de valores, los cuales,
proceden de un Grupo de Registros.

Forms dispone de un asistente para este tipo de objeto.

Podemos elegir entre un Grupo de Registros ya existente, o bien, crearlo basándonos en una
consulta.

Developer Forms Página 36


Podemos indicar si queremos devolver valores de la lista, cuáles y a donde.

Developer Forms Página 37


Como resultado:

Developer Forms Página 38


Grupos de Objetos

Se pueden agrupar diversos objetos, con objetivo común, bajo el mismo nombre de un Grupo
de Objetos. Si el grupo creado se añade a un nuevo formulario, los objetos componentes se
restablecen cada uno en su apartado.

Parámetros

Se pueden crear objetos de tipo Parámetros, para aceptar valores de una llamada desde otro
formulario.

Menús Emergentes

Permite crear menús contextuales asociados a un elemento. Son menús flotantes, que
emergen cuando se pulsa el botón derecho del ratón en el elemento seleccionado

Existe un editor de menú, para establecer las opciones deseadas.

Developer Forms Página 39


Unidades de Programa

Las unidades programables se utilizan para estructurar programas. Estos elementos son
igualmente aplicables a módulos de formularios y de menús.

Clases de Propiedad

Permite crearnos nuestro propio conjunto de propiedades. Una clase de propiedades puede
heredar las propiedades de otra clase de propiedades.

Para que un elemento herede las propiedades de una clase de propiedades hay que
establecerla en su propiedad Información de Subclase, desde esta propiedad también se
pueden heredar las propiedades de cualquier objeto existente.

Las propiedades heredadas se pueden sobrescribir, poniendo el nuevo valor en la propiedad


del objeto. Se puede recuperar el valor heredado.

La utilización de disparadores en las clases de propiedades es posible, sólo que es preciso


generalizar su funcionamiento.

Developer Forms Página 40


Las propiedades elegidas y sus correspondientes valores, podemos visualizarlos y modificarlos
en la Paleta de Propiedades.

Los elementos que deseemos que hereden las propiedades de la clase, debemos indicarlo a
partir de Información de Subclase, eligiendo el Módulo donse se encuentra, pudiendo ser el
mismo Formulario, o bien, una Biblioteca de Objetos.

Developer Forms Página 41


Grupos de Registros

Un grupo de registros es una estructura de datos especial, como una tabla con filas y
columnas. Un grupo de registros puede ser un grupo de registros procedentes de una consulta
o un grupo de registros estáticos. Los grupos de registros se pueden utilizar en LOV, en
parámetros de datos, como estructuras de datos PL/SQL.

En el caso de elegir Valores Estáticos, debemos de poner nombre a las columnas, tipo de dato
y sus valores correspondientes.

Developer Forms Página 42


Informes

Los objetos de informes contenidos en pantalla son referencias a archivos de informe


almacenados en el sistema de archivos.

Podemos basar un informe en un bloque, lo que hará que se ejecute Report Builder para crear
un nuevo informe.

Developer Forms Página 43


Atributos Visuales

Definen los colores y tipo de fuente de los objetos.

Podemos elegir entre tres tipos, el Común, para los elementos de texto, botones, listas;
Prompt, para las etiquetas de los elementos; y Título, para el encabezado de los marcos.

Ventanas

Son el objeto que visualiza los lienzos, las barras de herramientas, los menús.

Developer Forms Página 44


Menús
El módulo de menús es más sencillo que el módulo de formularios. Se compone de los
siguientes elementos:

Bibliotecas Conectadas
Menús
Grupo de Objetos
Unidades de Programa
Clases de Propiedades
Atributos Visuales

Si deseamos que un formulario trabaje con un menú que hayamos diseñado, lo haremos saber
a través de la propiedad Módulo de Menús en la paleta de propiedades del Módulo.

Developer Forms Página 45