Вы находитесь на странице: 1из 80

UN LENGUAJE DE

CUARTA GENERACIN
Primera Edicin

ORACLE DEVELOPER SUITE 10G


PROGRAMACIN BSICA EN ORACLE FORMS Y REPORT

Lic. Roy Morales Venegas

UN LENGUAJE DE
CUARTA GENERACIN
Primera Edicin
ORACLE DEVELOPER SUITE 10G
PROGRAMACIN BSICA EN ORACLE FORMS Y REPORT

Lic. Roy Morales Venegas


Universidad Magister
San Jos
COSTA RICA

1............................................................................................................................................................ 4
INSTALACIN DE ORACLE ....................................................................................................... 4
Instalacin de la Base de datos Oracle 10g Express Edition ....................................................... 4
Conexin con una instancia de base de datos .............................................................................. 4
Instalacin del Developer Suite 10G de Oracle........................................................................... 6
Iniciando el contenedor de Oracle para J2EE (OC4J) ................................................................. 9
Configuracin bsica del servidor de aplicaciones.................................................................... 10
Configuracin del servidor de reportes...................................................................................... 16
Comprobando la configuracin del ambiente de ejecucin....................................................... 22
2.......................................................................................................................................................... 26
PROGRAMACION CON FORMS DEVELOPER DE ORACLE ............................................... 26
Componentes de la herramienta................................................................................................. 26
Componentes en la definicin de las formas o pantallas ........................................................... 27
Generacin de otros objetos aplicativos .................................................................................... 28
Componentes en la definicin de mens ................................................................................... 28
Diseo de una pantalla bsica .................................................................................................... 29
Objetos de trabajo ...................................................................................................................... 38
Ventanas..................................................................................................................................... 38
Bloques de datos ........................................................................................................................ 38
Tipos de elementos .................................................................................................................... 41
Listas de Valores........................................................................................................................ 45
Alertas ........................................................................................................................................ 53
Disparadores .............................................................................................................................. 54
Implementacin de Disparadores ms comunes ........................................................................ 57
Bibliotecas PL/SQL ................................................................................................................... 60
Conectar Bibliotecas .................................................................................................................. 61
Unidades de Programa ............................................................................................................... 62
Excepciones, RETURN y EXIT ................................................................................................ 68
Manejo de Errores con ERROR_CODE, ERROR_TEXT ........................................................ 68
Uso de Identificadores ............................................................................................................... 70
Referencia a Objetos de la forma............................................................................................... 70
Referencia indirecta a Objetos con NAME_IN ........................................................................ 71
Cdigo provisto por DEVELOPER ........................................................................................... 71
Navegacin entre registros......................................................................................................... 73
Como personalizar la barra de herramientas.............................................................................. 74
Uso de Parmetros ..................................................................................................................... 78
Manejo de Sesiones.................................................................................................................... 79

1
INSTALACIN DE ORACLE
Instalacin de la Base de datos Oracle 10g Express Edition

La base de datos de Oracle es el primer componente que debe ser instalado. Para efectos de ste
curso se utilizar la Base de Datos Oracle 10g Express Edition. Una vez instalado ste producto, podr
contar con una pgina web local que permite acceder a algunas herramientas administrativas que permiten
administrar y gestionar aspectos de almacenamiento, memoria, usuarios y control. Si desea contar con la
gua de instalacin de la base de datos puede ingresar al siguiente sitio web de documentacin de Oracle
www.oracle.com/pls/xe102/homepage.
Cada base de datos instalada en un servidor conforma una instancia de Oracle, la cual
consume recursos de memoria y disco considerables del servidor donde sta se encuentra
instalada, por lo que es recomendable crear una sola instancia por servidor, para que el
rendimiento del mismo sea ptimo y resuelva cada peticin en un tiempo prudencial.
La estructura de una base de datos Oracle est compuesta por archivos de control (Control
File), archivos de datos (Data File) y Archivos de Bitcora (Redo Log Files).

Conexin con una instancia de base de datos

Una vez instalada la base de datos Oracle, varios servicios son definidos en el sistema operativo, de
los cuales nos enfocamos bsicamente en los siguientes:
El servicio relacionado con la instancia y la base de datos, cuyo nombre tiene la estructura:
OracleServiceXXX, donde XXX representa el nombre de la instancia de base de datos.
Para efectos del curso la instancia instalada tiene por nombre XE, por lo tanto el nombre
del servicio es OracleServiceXE.
El servicio relacionado con la disponibilidad del servidor para permitir el acceso remoto,
recibe el nombre de OracleXETNSListener para la instancia XE instalada en el servidor.
Ambos servicios deben encontrarse en estado iniciado, para poder ingresar a la base de datos a
travs de cualquier gestor de bases de datos Oracle, siendo utilizados con mayor frecuencia los siguientes:
SQL Plus de Oracle, TOAD, SQL-DEVELOPER entre otros.
Utilizando el gestor Oracle Database Express Edition, ingresaremos a la base de datos,
autenticndonos mediante el siguiente dilogo de conexin, donde debe ingresar el usuario SYSTEM y la
clave de paso. Una vez autenticado el usuario y clave de paso la base de datos le presentar la pgina
principal de Oracle Database Express Edition.

Dilogo de conexin

Pgina principal de la base de datos XE

Instalacin del Developer Suite 10G de Oracle


1. En el servidor de la localidad con el administrador de la red definir la ruta donde se instala el
Developer suite, se sugiere instalar en la carpeta APPS\Oracle10iDS
2. DISCO 1
3. ABRIR CARPETA DISK1
4. SETUP
5. Seleccionar siguiente:

Especificar en el destino:
Nombre:
oracle10IDS

default
DevSuiteHome1
Ruta Acceso: C:\APPS\oracle10iDS (ruta
definida con el administrador de red)

Debe seleccionar la opcin Terminar


1.15GB y seleccionar siguiente: Seleccionar
la opcin instalar para dar inicio a la
instalacin del producto Oracle Developer
Suite 10g:

1.6 Cambiar y seleccionar el disk2 y aceptar:

Seleccionar y cambiar al disk 1 y aceptar:

Finalizada la instalacin de Oracle


Developer Suite 10g, presionar el botn
Salir.

Iniciando el contenedor de Oracle para J2EE (OC4J)

Al instalar ORACLE 10 iDS, Ud


encuentra en la carpeta de Forms Developer
un componente adicional OC4J; el cual es el
servicio que permite que el servidor funcione
en ambiente de Aplicaciones Web.
El contenedor de Oracle para Java con
sus siglas en ingles OC4J (Oracle Container for
J2EE), es un componente del Servidor de
Aplicaciones de Oracle corriendo sobre un
standard Java SE distributions, el cual permite
que las aplicaciones desarrolladas en Oracle
Forms y Report sean ejecutadas desde un
explorador de Internet, ofreciendo un
comportamiento
excelente
y
de
alta
escalabilidad para ambientes de produccin.
Abrir el Contenedor de Oracle para J2EE

Este componente se levanta como un


servicio local en el servidor de aplicaciones,
tal y como se muestra en la siguiente imagen.
Este servicio se debe iniciar a travs de la
opcin START OC4J Instante, se debe
mantener activa la ventana mientras se
ejecuta la aplicacin. Por ninguna razn debe
cerrar la sesin Start OC4J Instance, ya que
sta representa el servicio que el servidor de
aplicaciones de Oracle requiere para ejecutar
los formularios (pantallas) y reportes que el
programador desarrolla.

Instancia del OC4J Activa

Para bajar el servicio utilice la opcin


Shutdown OC4J Instante, automticamente se
cierra la ventana de Start OC4J Instance y se
baja el servicio.

Cuando el servicio se encuentra abajo


(no disponible) le muestra el siguiente error al
ejecutar la aplicacin:

Configuracin bsica del servidor de aplicaciones


Para que la aplicacin de Curso funcione apropiadamente se debe:
Copiar DEFAULT.ENV como CURSO.ENV y modificar la configuracion ubicados en
<ORACLE_HOME>\forms\server
Modificar los archivos FORMSWEB.CFG ubicados en <ORACLE_HOME>\forms\server, donde
<ORACLE_HOME> es la ruta de instalacin del Developer Suite 10g , Ej: C:\oracle10iDS\forms

ARCHIVO
curso.env

VARIABLES
FORMS_PATH=

ACCION
Incluir los Path de la aplicacin de curso

Ejemplo: FORMS_PATH=D:\APPS\Curso\lib;
D:\APPS\Curso\bin;

Formsweb.cfg

Incluir las siguientes lneas al final del archivo

[curso] separateFrame=True lookandfeel=oracle

10

form=D:\APPS\Curso\bin\acceso.fmx
userid=USER/PASSWORD@[String de conexion]
envfile=curso.env
useSDI=yes colorScheme=Teal
config=sepwin IE=JInitiator

Creacin del String de Conexin:


Ejecutar el asistente de configuracin de Red de oracle:

Seleccionar Configuracin del nombre del


servicio de red local y

Seleccionar Agregar y siguiente para agregar


un nuevo servicio de red

11

Seleccionar el nombre de la instancia de la


base de datos, el cual corresponde a un
nombre de base de datos global.

Seleccionar el tipo de protocolo de


comunicacin , en este caso y para efectos de
ste curso utilizaremos: TCP

Introducimos la direccin IP donde se ubica el


servidor de la base de datos: Ej: 127.0.0.1,
direccin que corresponde al LocalHost.
El puerto a utilizar es el 1521
corresponde al puerto por defecto.

que

12

Probar la conexin, para validar que la


configuracin del nuevo servicio de red local
se haya realizado correctamente.

El asistente realiza inmediatamente una


prueba con el usuario system, con una clave
que probablemente no coincide con la que se
defini en la instalacin de la base de datos.
Por lo anterior, se debe seleccionar el botn
de Cambiar Conexin para suministrar el
usuario y clave de paso correcta para probar
la conexin.

13

Una vez suministrado el usuario y clave


correcta, la prueba de configuracin del nuevo
servicio de red local es exitosa.

El de nombre del servicio de Red local es


ingresado con el mismo nombre de la base de
datos global, sin embargo, el mismo puede
ser nombrado diferente. Teniendo en cuenta
que es con el nuevo nombre que debe
conectarse a la base de datos desde
cualquier herramienta del Developer Suite 10g
de Oracle. (SQL Plus, Forms, Report). Como
recomendacin dejar el nombre por defecto.

Si no se desea configurar mas servicios,


seleccionar NO y siguiente.

14

El asistente le indicar que concluy la


configuracin del servicio.

Presione Terminar para salir del asistente de


configuracin de Red de Oracle.

15

Configuracin del servidor de reportes

Para configurar el servidor de reportes se crea


un icono de acceso directo al archivo
rwserver,exe ubicado en el directorio
<ORACLE_HOME>\bin de la siguiente
manera:
Botn derecho del Mouse aparece lo
siguiente: Configurar la ruta de los reportes
del aplicativo Curso

Una vez localizado el archivo rwserver.exe


agregamos en la ubicacin del elemento
Server=<nombre_servidor_de_reportes>
como se muestra en la siguiente imagen.

16

Para finalizar la creacin del servidor de


reportes, indicamos el nombre con el que
deseamos se visualice el acceso directo.

Para que todos los objetos del aplicativo


(pantallas, menus, libreras y reportes) puedan
ser ubicados por la aplicacin en tiempo de
desarrollo (programacin), se configura el
REGEDIT de la siguiente forma:

Al
presentarse
el
editor
del
registro
de
Windows
se
debe
localizar
la
clave
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_DevSuite10gR2
y
modificar
los
valores
FORMS_PATH, REPORT_PATH y UI_ICON, adicionando al inicio de la cadena del valor la ruta donde se
encuentran almacenados los archivos del aplicativo, para nuestro efecto D:\apps\Curso\Bin(Formas,
reportes y mens), D:\apps\Curso\Lib(Libreras) y D:\apps\Curso\Ico(Imgenes).

17

18

Subir los servicios: START


OC4J Instante Servicio de
reportes:

Una vez que se haya establecido el servicio


OC4J puede iniciar el servidor de reportes
configurado anteriormente.

Inicialmente el Reports Server es un archivo


bloqueado por el Firewall de Windows, debe
desbloquearse para que pueda establecerse el
servicio de reportes.

El servicio de reportes est preparado y listo


para ser utilizado.

19

De acuerdo a la ruta sealada, abrir con Wordpad el archivo Orion_web.xml y adicionar las siguientes
lneas, como recomendacin copiar cualquier lnea en el archivo en una nueva y sustituir los valores
correspondientes.
<virtual-directory virtual-path="/Icons" Real-path="D:\APPS\Curso/Ico" />
SALVAR Y SALIR

20

Abrir archivo Registy.dat y adicionar al final de las variables los valores del directorio virtual y la extensin de
los conos utilizados en la aplicacin.
Ejemplo:
default.icons.iconpath= icons/
default.icons.iconextension=gif

21

Comprobando la configuracin del ambiente de ejecucin


Despus de modificados los archivos de configuracin del ambiente de ejecucin de las aplicaciones que
sern desarrolladas durante ste curso, procedemos a ingresar al Forms Builder de Oracle para comprobar
la conexin y el ingreso a la pantalla de prueba.
Durante el desarrollo de ste curso utilizaremos el usuario HR, el cual corresponde a un pequeo esquema
que consta de ocho entidades (tablas) que comprenden la lgica de un sistema de nmina.

Conectarse a la base de datos de la siguiente forma:


ctrl. + j (tecla j) o ir a la siguiente opcin de men de
{Archivo}{Conectar}.

Si sta es la primera vez que nos


conectamos a la base de datos con el
usuario HR es posible que el usuario
se encuentre bloqueado.
Para
desbloquear el usuario debe ingresar
a una sesin de SQL con el usuario
SYSTEM y digitar las siguientes
instrucciones, que desbloquearn el usuario HR para lograr conectarse.

Alter User hr Account Unlock;


Alter User hr Identified By hr;

Una vez ejecutadas las instrucciones anteriores intente conectarse nuevamente con el Forms Builder, ste
paso debera de ejecutarse sin ningn problema.

22

Vaya a la siguiente opcin de men del Forms Builder,


al ingresar se le presenta la siguiente pantalla:

Presione le botn Restablecer y copie el texto ubicado


en el campo URL de Servidor de Aplicacin. Abra
una sesin de Explorador de Internet y pegue el texto
anterior en el espacio de direccin. Antes asegrese
que el componente OC4J se encuentra activo.
Si es la primera vez que ejecuta el servicio de forms, se
instalar el componente JINITIATOR en el sistema
operativo en forma automtica.
La versin de
JINITIATOR depende de la versin del servicio de
forms utilizado. Para efectos de ste cursos se utilizar
la versin 1.3.1.22 ya que estamos utilizando
Developer Suite 10g Forms Builder 10.1.2.02.

Permita la instalacin del complemento Oracle JInitiator de Oracle Corporation, posicionndose en la barra
amarilla y haciendo Clic, esta accin le presentar el men que se observa en la siguiente figura, en el cual
usted deber seleccionar Instalar control ActiveX

23

Finalmente instale el componente JINITIATOR


presionando el botn Instalar y en la siguiente
pantalla presine el botn Next para indicar la
carpeta donde se desea instar ste componente.
Recomendacin permitir que se instale en la ruta que se
presenta por defecto.

Una vez concluida la instalacin del componente JINITIATOR se le solicitar que reinicie su ordenador,
ejecute sta accin y al ingresar nuevamente compruebe que el componente haya sido instalado
correctamente, ingresando a la opcin Agregar y quitar programas ubicada en el Panel de Control.

24

Ingrese nuevamente el texto http://127.0.0.1:8889/forms/frmservlet en una nueva sesin de explorador de


Internet, esta accin le presentar la aplicacin test.fmb, que est creada desde la instalacin del Developer
Suite y configurada como aplicacin inicial en el archivo de configuracin Formsweb.cfg para el ambiente
default.

Si sta aplicacin se presenta, significa


que la configuracin del servidor de
aplicaciones para el servicio de forms
est funcionando correctamente.
Ahora contamos con el ambiente de
desarrollo y de ejecucin listos para ser
utilizados, si recordamos que tanto el
Registro de Windows y los archivos de
configuracin
del
Servidor
de
Aplicaciones

25

2
PROGRAMACION CON FORMS DEVELOPER DE ORACLE

Componentes de la herramienta
NAVEGADOR DE OBJETOS Es el navegador de Objetos, aparece con la misma estructura en
todas las herramientas ORACLE DEVELOPER y permite movilizarse entre las otras 3 interfaces y
se pueden arrastrar los objetos entre diferentes formas. Este componente es el primero en
aparecer despus de ingresar al ORACLE Forms Builder.

EDITOR DE DISEO Es el editor de diseo, aqu se disea el aspecto de los lienzos (Canvas), se
colocan los distintos objetos para el desarrollo de la aplicacin. Para crear un lienzo se selecciona
Lienzos en el Navegador de Objetos, luego se pulsa CREAR (paleta de herramientas) y aparece
el Lienzos, luego seleccione el Lienzos que desee crear y pulse F2.

PALETA DE PROPIEDADES Es la paleta de propiedades, aqu se configuran todas las


propiedades y caractersticas de los diferentes objetos, por ejemplo: tamao de letra, fuentes,
visibilidad, etc. Existen 2 maneras de mostrar la paleta, la primera pulsando F4 y la segunda es
dar un clic derecho sobre el objeto al cual se desea configurar sus caractersticas.

26

EDITOR PL/SQL: El editor del PL/SQL permite aadir, modificar, eliminar y compilar cdigo
PL/SQL, aqu se modifican las estructuras y procedimientos de la base de datos. Para abrir el
editor, simplemente pulse doble-clic sobre el procedimiento que desee modificar, trigger a
programar.

BIBLIOTECAS DE OBJETOS La librera de Objetos se definen los estndares para el desarrollo


de aplicaciones y los objetos a reutilizar.

PAQUETES INCORPORTADOS Paquetera que Oracle incorpora como parte del producto Forms
Developer que ofrece diversas utilidades como lectura y escritura sobre archivos texto,
operaciones con rboles jerrquicos, funciones de uso estndar, etc..

OBJETOS DE BASE DE DATOS Permite la visualizacin y definicin de componentes de base


de datos como unidades de programa almacenadas PL/SQL, tales como procedimientos,
funciones, paquetes y disparadores (Triggers) Update, Delete e Insert de tablas.

Componentes en la definicin de las formas o pantallas


DISPARADORES Los Disparadores son bloques de cdigo PL/SQL escrito para realizar tareas
cuando un evento especifico ocurre dentro de la aplicacin.

ALERTAS Una alerta es una ventana modal que despliega un mensaje el cual notifica al operador
sobre alguna condicin de la aplicacin. Existen 3 tipos de alertas: Parar, Atencin y Nota.

BIBLIOTECAS CONECTADAS Son vnculos a las libreras de los archivos de sistema, las cuales
tienen procedimientos, paquetes y funciones que realizan ciertas operaciones al momento de
ejecutar la aplicacin.

BLOQUES DE DATOS Se refiere a los bloques que agrupan cierta informacin, ya sea tems de
trabajo, o bloques de datos que representan a campos de una tabla.

LIENZOS Es el lienzo donde se disea la forma que ver el usuario final, aqu se insertan los
tems que contendr la misma.

EDITORES Se refiere a los editores personalizados que ORACLE FORMS permite definir.
LISTA DE VALORES (LOV`S) Es un objeto que tiene una ventana desplegable que representa
una estructura de datos lgica. Bsicamente realiza una sola consulta por cada lista de valores.

GRUPOS DE OBJETOS Es un contenedor para un grupo de objetos los cuales permiten trabajar
con herencias entre formularios a travs de atributos y componentes.

PARMETROS Son variables del tipo CHAR, NUMBER o DATE que se definen en tiempo de
diseo y capaces de almacenar valores por defecto y ser alterados en tiempo de ejecucin.

MENUS EMERGENTES Son mens anexados a los elementos de la forma y lienzos, permiten a
los usuarios finales rpidamente acceder a funciones y comandos comunes.

27

UNIDADES DE PROGRAMA Se almacenan los procedimientos y funciones programadas dentro


de la misma forma. Tambin se tienen los procedimientos que utilizan los disparadores (si es que
se programara adicionalmente).

CLASES DE PROPIEDAD Un clase de propiedad es un objeto nombrado que contiene una lista
de propiedades y sus configuraciones para los elementos y componentes de la aplicacin.

GRUPOS DE REGISTRO Son objetos que representan una estructura de datos con el marco
fila/columna de la base de datos.

INFORMES Permite la vinculacin de informes que han sido diseados con el Reports Builder de
Oracle. Corresponde al nombre del vnculo para ejecutar un informe almacenado fsicamente en
el servidor de aplicaciones.

ATRIBUTOS VISUALES Representa un atributo visual que es aplicado a un objeto en tiempo de


ejecucin. Los atributos definen color, fuente, patrones y la apariencia de un objeto.

VENTANAS Es un contenedor para todos los objetos visuales que hacen la aplicacin de FORMS
BUILDER, puede incluir varios Lienzos. As mismo, una forma puede contener varias Ventanas.

Generacin de otros objetos aplicativos


MENES Son listas de items que los usuarios utilizan para seleccionar funciones especficas u
operaciones.

LIBRERAS Es una coleccin de subprogramas, incluyendo procedimientos, funciones y


paquetes, los cuales pueden compartirse entre distintas aplicaciones. Esto ayuda a la
estandarizacin del desarrollo.

Componentes en la definicin de mens


BIBLIOTECAS CONECTADAS Las libreras son archivos que contienen un conjunto de
procedimientos, funciones o paquetes que pueden ser utilizados por cualquier objeto aplicativo de
ORACLE Forms, Reports y Mens.
Una vez creadas las libreras, estas se relacionan(Atachan) al men; y posteriormente su cdigo
PL/SQL puede ser invocado desde triggers, otro cdigo PL/SQL de tem del men y rutinas
predefinidas.

MENS Los Menes son listas de tems que los usuarios utilizan para seleccionar funciones
especficas u operaciones. Forms soporta tres tipos de Menes: men de formas, men de barra
de herramientas y men popup (desplegables).

GRUPOS DE OBJETOS Un Objeto de Grupo es un contenedor para un grupo de objetos (tems,


propiedades, atributos, alertas, disparadores). Se lo define cuando se quiere empaquetar objetos
relacionados, los cuales pueden ser copiados o heredados en otro mdulo. (Men Template)

28

UNIDADES DE PROGRAMA Se almacenan los procedimientos o funciones a nivel del men, se


los utiliza comnmente para definir programticamente las propiedades del men, inicializacin de
variables, definicin de seguridades para los mens y estados para trabajar con los mens, etc.

CLASES DE PROPIEDAD Una clase de propiedad es un objeto nombrado que contiene una lista
de propiedades y sus configuraciones para los tems de la aplicacin.
Luego de crear la clase de propiedad puede poner otros objetos en l. Un objeto basado en una
clase de propiedad puede heredar las caractersticas de cualquier propiedad. Pueden existir
varias propiedades en una clase de propiedad y las propiedades en una clase. Las propiedades
pueden ser controladas y localmente pueden ser descartadas para ese tem, es decir que la
herencia puede romperse.

ATRIBUTOS VISUALES Son las fuentes, colores y propiedades patrn que se configuran para
los objetos del men. Cada objeto de la interfaz tiene un grupo de atributos visuales que
determinan su configuracin.

Diseo de una pantalla bsica


Para definir una pantalla debe crear un nuevo
mdulo de pantalla, posicionndose en el
componente Pantallas y presionando para
crear un nuevo mdulo de
pantalla.

Una vez creado el mdulo de la nueva


pantalla, ubicarse en el componente Bloques
de Datos y hacer clic derecho sobre ste
componente, al presentarse el men de
opciones seleccione Asistente de Bloques de
Datos.

29

Al presentarse la pantalla de bienvenida al


asistente de bloques de datos presione el
botn Siguiente para definir el bloque de
datos.

Seleccione Tabla o Vista para definir el tipo


bloque de datos que se desea crear.

Seleccione la tabla y las columnas que se desean utilizar y presentar en el bloque de datos. No
necesariamente todos las columnas de una tabla deben seleccionarse, solo aquellas que se desean utilizar
y en el caso de bloques utilizados para registro deben presentarse las que corresponden a datos necesarios
(requeridos).

30

Seleccione la tabla Departments para crear el


bloque de datos y presione Aceptar.

Seleccione todas las columnas disponibles


mediante el botn con doble signo mayor
para elegir todas las columnas como
elementos de base de datos que conformarn
el bloque de datos.

Utilice el mismo nombre de la tabla para


definir el nombre del bloque de datos y
presione el botn Siguiente. Esto finalizar la
creacin del bloque de datos.

31

Ha concluido el diseo del bloque de datos,


seleccione uno de los botones de radio para
indicar al Asistente de Bloques de Datos la
operacin que desea realizar. Si selecciona
Crear el bloque de datos y, a continuacin,
llamar
al
Asistente
de
Diseo,
automticamente se abrir el Asistente de
Diseo de Lienzos. Si elige Crear solo el
bloque de datos el volver al navegador de
objetos donde podr observar el bloque de
datos creado.
Para efectos del ejemplo seleccione el primer
botn.

Al presentarse la pantalla de bienvenida al


asistente de diseo de lienzos presione el
botn Siguiente para definir el bloque de
datos.

Diseo del Lienzo Son los lienzos de trabajo para realizar el diseo grfico de las formas. Los elementos
que lo conforman son los Grficos (Graphics). Existen varios tipos de LienzosCanvas.

Contenido: Lienzo contenedor, en este se depositarn los objetos del diseo, incluyendo otros
lienzos de tipo apilados.

Apilado: es un lienzo que se coloca sobre el lienzo de contenido, se lo utiliza cuando se requieren
lienzos sobrepuestos para continuar cierto ingreso / presentacin de la informacin (opcional).

Separador: Es la implementacin en Forms de lo que en otras herramientas se conoce como


Carpetas, los lienzos Separadores, pueden tener 1 o ms Pginas, los cuales son independientes
para contener los objetos de las formas.

Barra de Herramienta Horizontal: es un lienzo utilizado para disear barra de herramientas con
orientacin horizontal.

Barra de Herramienta Vertical: es un lienzo utilizado para disear barra de herramientas con
orientacin vertical.

32

Seleccione Nuevo Lienzo para crear el lienzo


donde desee disear los elementos del bloque de
datos. Si el lienzo ya existe seleccinelo. Si crea
un nuevo lienzo asegrese de seleccionar el tipo
de lienzo apropiado.
Si selecciona un lienzo de tipo separador, debe
seleccionar las pginas donde desea disear los
elementos del bloque de datos.

Seleccione el bloque de datos y los elementos de


ste que desea presentar en el lienzo.

Ingrese el nombre de la etiqueta que desea que


presente cada campo en el lienzo, puede
modificar el ancho y el alto de elemento, sta
medida est dada en puntos.

33

Seleccione el estilo de diseo que desea para la


pantalla, el cual debe ser elegido segn la
presentacin que se quiera dar a los datos.
Si se desea registrar informacin muy completa
en un solo registro es conveniente seleccionar
Pantalla, si la informacin a ingresar es masiva o
es agrupada por otro elemento se debe
seleccionar Tabular.

Ingrese el ttulo que desea para el marco que


encierra los elementos en el lienzo.
Indique el nmero de registros que desea mostrar
en el lienzo. Usualmente si seleccion el estilo
del lienzo de tipo Pantalla se mostrar un solo
registro, si es tabular indique la cantidad de
registros que desea visualizar y la distancia entre
cada registro.
Indique si desea ver la barra de desplazamiento,
la cual puede ser vertical u horizontal segn el
sentido de orientacin de los datos el bloque.

El asistente diseo ha finalizado el diseo del


lienzo.
Para crear el marco y disear los
elementos seleccionados presione el botn
Terminar.
El asistente de diseo mostrar el marco nuevo
en el Editor de Diseo. Puede ajustar el diseo en
el futuro utilizando nuevamente el asistente de
diseo, o utilizando la paleta de propiedades
para modificar propiedades especficas del marco,
lienzo o de cualquier elemento dentro de ste.

34

Esta es la pantalla resultante del diseo


anterior. El diseo es bsico, sin embargo
puede ajustarse a medida que se identifican
los elementos de ajuste necesarios.

Esta aplicacin esta preparada para


ejecutarse.
Puede presionar el botn
Ejecutar Pantalla para ejecutarla, ste
paso abrir en forma automtica el
explorador de Internet y presentar en modo
de ejecucin la aplicacin diseada.

Si el servicio del contenedor OC4J est


levantado puede ejecutarse la aplicacin
diseada, sino levante el servicio tal y como
se explic anteriormente.

La pantalla que se presenta inicialmente


est en modo de insercin de datos, si se
desea consultar la informacin debe
presionar los botones de Introducir
consulta y Ejecutar consulta.

35

Una vez consultados los datos, stos


pueden modificarse y almacenarse
presionando el botn Guardar .

Modifique el nombre del departamento, luego nos pasamos a otro registro presionando el botn o la tecla
de direccin con la flecha sin guardar el cambio, modificamos otra descripcin y luego guardamos
presionando el botn guardar , observe como se despliega en la barra de estado el mensaje transaccin
terminada: dos registros aplicados y
guardados, esto se puede realizar
entre registros, pero no entre bloques
de registros. Es decir, si contamos con
dos bloques Maestro Detalle, y
modificamos un registro del bloque
detalle, si intentamos navegar hacia otro
registro del bloque maestro, Oracle
solicitar que se almacene o se
descarte los cambios realizados en el
bloque detalle del registro que
deseamos abandonar, debido a que no
mantiene en memoria los cambios
realizados entre registros de nivel de
detalle
para
mltiples
registros
maestros, sino nicamente del registro
maestro actual.

36

Si modificamos datos que afecten la integridad referencial entre uno o mas datos, se produce un error
durante el evento de almacenamiento en base de datos (Grabar), el error puede ser visualizado en el men
{Ayuda}{Mostrar Error} de la pantalla en
ejecucin.

Como puede observar, se presenta una


ventana que describe el error en forma de
la sentencia en lenguaje DML que
ocasion el fallo, y el error de validacin
por violacin a la integridad de la base de
datos, al tratar del almacenar un dato que
no existe en una entidad, a la cual existe
una llave fornea.

37

Objetos de trabajo
Ventanas
Es un contenedor para todos los objetos visuales que hacen
la aplicacin de Form Builder, incluyendo los lienzos. Una sola
forma puede tener varias ventanas.
Cuando se crea una ventana, se especifica su tipo
configurando la propiedad Window Style, existen 2 estilos :

Document: Son ventanas que tpicamente despliegan el


canvas principal y reas de trabajo de la aplicacin donde
se realiza la mayor parte de interaccin entrada / salida
con el usuario final.
Dialog: Son ventanas flotantes, contenedores usados para
dilogos modales que esperan respuesta inmediata.

Ventana que muestra la consola de Forms Builder


Esta ventana despliega la consola para la forma actual activa
en la aplicacin. Esta manera de trabajar es opcional, aunque es muy utilizada en aplicaciones de
formas mltiples, la ventaja es que siempre muestra la consola de la forma actual.

Bloques de datos
Son estructuras que agrupan a un conjunto de tems de diferente tipo, que podra por ejemplo representar a
los campos de una tabla o conformar un bloque de trabajo.
Si se utiliza un bloque para relacionarlo a la informacin de la base de datos, existen 2 formas: Relacin
Directa, donde se especfica directamente con que tabla(solo una) trabajar el bloque. Relacin Indirecta, en
este caso el bloque trabajar con informacin de la base datos a travs de procedimientos. La programacin
en estos procedimientos tiene ciertas restricciones pero en general tiene ventajas como la mejora del
performance y que permite enlazar un bloque con un conjunto de tablas.
Los bloques de datos estas conformados con los siguientes elementos: Disparadores, elementos (columnas
de tabla o elementos temporales) y relaciones, estas ultimas se forman cuando se crean bloques maestrodetalle.

38

En la siguiente imagen
observamos las diferentes
secciones que contiene
un bloque de datos, y las
propiedades
que
corresponden a cada
seccin.

Propiedades bsicas de un bloque de datos


General
Nombre: Nombre interno del objeto.
Comentarios: Informacin general que usted desea especificar acerca del bloque de datos creado.
Navegacin
Estilo de navegacin: Como procesar el elemento siguiente o anterior cuando el foco es el primer o
ltimo elemento navegable dentro del bloque de datos.
Registros
Consultar todos los registros: Especifica si
desea recupera todos los registros que
coinciden con los criterios de consulta en el
bloque de datos. Esta propiedad tiene por
defecto el valor NO, para utilizar elementos
calculados de tipo resumen en un bloque, se
debe definir sta propiedad en SI.
Grupo de atributos visuales del registro actual:
Permite definir atributos visuales a nivel de
forma, bloque de datos y elementos de un
bloque de datos, o bien, para formas con
varios niveles de bloques de datos, permite la
combinacin de atributos visuales para cada
bloque o elemento de un bloque, otorgando
una apariencia visual independiente.

Base de Datos
Bloque de datos de base de datos: Indica si

39

el bloque de datos se basa en un objeto de base de datos (SI), o si se utiliza como un bloque de trabajo
temporal (NO).
Consulta permitida: Define si las aplicaciones pueden ejecutar una consulta en el bloque de datos.
Insercin permitida: Define si las aplicaciones pueden insertar registros en el bloque de datos.
Actualizacin permitida: Define si las aplicaciones pueden actualizar registros en el bloque de datos.
Supresin permitida: Define si las aplicaciones pueden suprimir registros en el bloque de datos.
Alias: Nombre del Alias asociado al Origen/Destino de datos.
Clusula WHERE: Clusula estndar asociada por defecto al bloque de datos, en la cual se define
especficamente las sentencias de condicin que limita la consulta de registros en el bloque.
Clsula ORDER BY: Clusula estandar asociada por defecto al bloque de datos, en la cual se define el
orden de visualizacin de los registros recuperados en una consulta.
Puede utilizar orden
ascendente(ASC) o descendente(DESC) despus de cada columna.
Ejemplo Location_Id Desc, Department_Name Asc

Barra de desplazamiento
Mostrar barra de desplazamiento: Desea visualizar la barra de desplazamiento en el lienzo.
Lienzo de barra de desplazamiento: Especifica el lienzo donde ser visualizada la barra de
desplazamiento.
Pgina de separador de la barra de desplazamiento: Especifica la pgina donde ser visualizada la
barra de desplazamiento en caso de que se utilicen lienzos de tipo separador.

Tipos de bloques de datos


De acuerdo a la necesidad de la aplicacin y para optimizar el desarrollo de la misma se tienen diferentes
tipo de bloques.

Bloque de barra de herramientas


Es un bloque donde se aaden los objetos que pertenecern al toolbar (barra de herramientas) de la
aplicacin, regularmente son botones tpicos de edicin, impresin, grabar, hacia delante, hacia atrs, los
cuales son programados para que realicen las funciones que les corresponde.
Este bloque no pertenece a la base de datos, por lo tanto no se deben parametrizar las propiedades de
base de datos y registros en el property palette.

Bloques de trabajo
Es un bloque utilizado por los programadores, donde se manejan valores necesarios para la aplicacin pero
que no necesitan ser vistos por el usuario final, se los esconde al no definir en que lienzo debe mostrase.
Regularmente tenemos datos de consultas generadas por PL/SQL cargadas en estos elementos del bloque
de trabajo.
Este tipo de bloque puede estar enlazado con alguna columna de la base de datos de la cual se recoja
informacin, otras veces simplemente los elementos del bloque de trabajo son repositorio transitorio hasta
realizar algn proceso.

Bloques de informacin
Son los bloques presentados al usuario final, aqu se permiten realizar consultas, ingresar, actualizar o
eliminar datos. Dependiendo de la funcionalidad pueden estar enlazados a tablas o procedimientos
almacenados, estos ltimos trabajan con columnas de las tablas del mdulo.

40

Cuando se desea crear un bloque con el botn Create de la paleta de herramientas, aparece el Asistente de
ayuda y all se puede indicar que vinculo tendr ese bloque, con una tabla o con un procedimiento, si se
hace de esa manera es ms fcil.
Si se prefiere la creacin manual deben especificarse ciertas propiedades en la paleta de propiedades para
ese bloque de datos en particular.
En la propiedad Elemento de Base de Datos indique SI
Si se trabaja con claves primarias, seleccione SI en la propiedad Clave Primaria
Contine parametrizando las propiedades restantes, dependiendo de las necesidades de la aplicacin.
Generalmente las aplicaciones se realizan enlazando los bloques de datos con la base de datos, debido a
las transacciones que se manejan, adems existen mtodos que optimizan el tiempo de consulta a la base
de datos.

Elementos grficos
Los elementos grficos aparecen como una paleta en el editor de diseo del lienzo, esta situado al lado
izquierdo de la pantalla.
Marcos
Son objetos grficos que aparecen en un lienzo. Se los usa para acomodar varios objetos dentro de un
bloque. Esto ayuda porque varias propiedades pueden configurarse para ese marco y permite la
estandarizacin.
Texto Fijo
Son etiquetas de texto las cuales son editadas en modo de diseo.
Texto

Elemento texto

Tipos de elementos
Elemento mostrado
Son tems que nicamente despliegan valores asignados al mismo. No son navegables y comnmente
se utilizan para mostrar valores referenciales.
Elemento de texto
Es un recuadro o campo que permite desplegar y adems editar texto. Son utilizados para permitir al
usuario ingresar informacin que ser posteriormente procesada. Como todos los objetos tienen
propiedades que pueden ser configuradas en modo de diseo, o con programacin.
Botn
Son tems de interfaz que permite a los usuarios finales ejecutar comandos o iniciar acciones. Se los
utiliza para iniciar navegacin, desplegar listas de valores, invocar un editor o ventana; y son
programados con pl/sql. En Forms se soportan 2 estilos: de texto e icnicos, estos ltimos pueden
contener un grfico visible al usuario. Este grfico tiene que ser un archivo de tipo .ICO.
Grupo de botones de radio
Es desplegado como un indicador visual (circulo) y aparece lleno o vaco para indicar el status actual de
cada sub-opcin. Un radio button debe pertenecer a un radio group men de dos o mas tems
relacionados.

41

Casilla de control
Son casilleros de seleccin mltiple, los cuales pueden ser configurados en tiempo de diseo o por
programacin.
Elemento de lista
Es una lista de elementos de texto que pueden ser desplegados de alguna forma: poplist, tlist o combo
box.
Estas listas muestran nmeros fijos de elementos, estos son cadenas de texto de hasta 30 caracteres.
En tiempo de ejecucin, programticamente pueden ser evaluados o eliminados.

Creacin de elementos de trabajo

Creando el bloque de datos


Employees relacionado con el
bloque Departments, agregar en el
los siguientes elementos en el
bloque Employees luego de que
ste es diseado:
L_Total_Linea
L_Total_Salario
L_Total_General

Asignar a la propiedad Elemento de Base


de Datos el valor SI. Ya que ste es un
valor de clculo temporal el cual no es
almacenado en base de datos, sino que
nicamente se muestra para efectos de
resumir o totalizar datos.

42

Existen 2 mtodos de clculo del valor de un elemento calculado:


Frmula: Se especifican los elementos que se desean operar entre s, formando una operacin
aritmtica simple o combinada.
Formula= :employees.salary*(1+NVL(:employees.commission_pct))

Resumen: Suma o resume los valores de un elemento. Esto es muy til cuando se requiera sumar
los valores que presenta un elemento especfico en un bloque de varios registros (Tabular).
Resumen= function resumen (suma)
Bloque resumido: employees
Elemento resumido:salary

El elemento debe residir en un bloque


de datos donde la propiedad
Consultar todos los registros=SI, o
Pre-Calcular=SI.

43

Como una buena prctica y para


indicar que es un elemento que no
puede ser modificado, debe definir
ste elemento como un tipo de
elemento mostrado, utilizado para
aquellos elementos que no deben ser
manipulados o alterado su valor en
tiempo de ejecucin.

Al ejecutar la aplicacin
una vez concluida la
especificacin de las
propiedades necesarias
para los elementos de
frmula y resumen, sta
debe presentar como
sigue a continuacin

44

Listas de Valores
El constructor Forms de Oracle ofrece muchas ventajas al contar con asistentes para disear y definir
ciertos objetos como Listas de Valores y Grupos de Registros, los cuales trabajan conjuntamente.
Uso del Asistente
A continuacin se detalla el uso del Asistente para la creacin de listas de valores y grupos de registro.
Durante su definicin se crea primero el grupo de registros, ya que los valores o registros que obtenga la
consulta sern mostrados en la lista de valores.
Como ejemplo se elabora una lista de valor basada en la consulta de la tabla Employees, de la cual se
consultarn todos los empleados que tengan una jefatura. Para esto se implementar el uso de la siguiente
consulta:
select a.employee_id, a.first_name||' '||a.last_name nombre_empleado
from
employees a
where a.employee_id in (select b.manager_id
from
employees b
where a.employee_id = b.manager_id
)

O bien, la siguiente creada automticamente por Query Builder de Oracle Developer.


SELECT DISTINCT A.MANAGER_ID, B.FIRST_NAME, B.LAST_NAME
FROM EMPLOYEES A, EMPLOYEES B
WHERE (A.MANAGER_ID = B.EMPLOYEE_ID)
ORDER BY A.MANAGER_ID ASC

Los elementos marcados MANAGER_ID y L_MANAGER_NAME presentan los valores del cdigo de un
empleado jefe (Elemento de base de datos = SI) y el nombre de empleado jefe (Elemento de base de datos=NO)
respectivamente, lo cuales sern utilizados para desplegar la lista de valores y retornar los valores
seleccionados de la lista.

45

Creando la lista de valores con el asistente de diseo


Seleccione el componente Listas de Valores en el navegador de
objetos, presione clic derecho sobre el componente y elija Asistente
de Listas de Valores para iniciar la creacin de la lista de valores.

La lista de valores obtiene los datos de los


grupos de registros, stos ltimos se pueden
definir con consultas SQL o introduciendo una
lista de valores estticos.
Si el grupo de registros existe, seleccinelo de la
lista de Grupo de Registros Existente, si la lista
de valor es completamente nueva, seleccione
Nuevo Grupo de Registros Basado en una
Consulta y presione el botn Siguiente.

Los grupos de registros pueden basarse en


consultas SQL. Si desea introducir o modificar
una consulta que es utilizada por un
grupo de registros de la lista de valores,
puede hacerlo a partir de la creacin de
una nueva consulta o su importacin
desde un archivo del tipo SQL
almacenado.

Si desea obtener ayuda al crear la


consulta seleccione Crear Consulta
SQL , Oracle le permite utilizar Query
Builder de Oracle Developer, donde
podr seleccionar las tablas y columnas
que desee presentar y relacionar.

46

Ordenar datos
por columnas

Debe seleccionar las tablas que


conformarn la consulta, una vez
seleccionadas cierre ste dilogo de
seleccin y establezca las relaciones
entre las tablas incluidas, de modo que
la consulta se defina debidamente
normalizada.
Para efectos de ste ejemplo, se ha
seleccionado la tabla EMPLOYEES dos
veces,
relacionando
la
columna
Manager_Id de la entidad con alias
EMPLOYEES
y
la
columna
Employee_Id de la tabla con alias
EMPLOYEES_A1.

Una vez establecida la consulta bsica,


sta se presentara de la manera en
que lo muestra sta figura.
Sin embargo, puede mejorarse su
estructura, utilizando ordenamientos de
columnas y asignando un nombre de
diferente a los alias de las tablas
incluidas en la consulta.

47

Ordenamiento de datos
puede establecer el orden de
Mediante el cono
los datos en la consulta. Seleccione de la lista de
Columnas Disponibles, la columna por la cual desea
ordenar la informacin, presione doble-clic o presione
el botn
columnas ordenadas.

para establecer el grupo de

Cambiar Nombre de Tablas


Query Builder asigna automticamente el alias de las tablas incluidas en la consulta, sin embargo, el
(Cambiar nombre de tablas). Seleccione la
nombre de stas puede ser cambiado mediante el botn
tabla a modificar y asigne en el campo Nombre Nuevo el nuevo alias de la tabla.
EMPLOYEES
EMPLOYEES_A1

A
B

48

De la forma en que se presenta en la figura Consulta A, es creada la consulta con el asistente de Query
Builder, en cuyo caso se presentaran tantos registros de un mismo jefe como ste se encuentre asignado a
diferentes empleados. De manera que para presentar nicamente un registro de cada jefe y el nombre
respectivo, se sustituye la clusula ALL por DISTINCT.

Consulta A

Consulta B

Los datos de presentaran en cada caso como se muestra a continuacin:

Para una mejor presentacin del nombre del empleado, realice la siguiente modificacin a la consulta
generada:
SELECT DISTINCT A.MANAGER_ID, (B.FIRST_NAME|| ||B.LAST_NAME) NOMBRE
FROM EMPLOYEES A, EMPLOYEES B
WHERE (A.MANAGER_ID = B.EMPLOYEE_ID)
ORDER BY A.MANAGER_ID ASC

Los datos sern presentados como se muestra en sta figura. Este ajuste es
necesario debido a que segn el diseo de la aplicacin, en la cual tenemos
nicamente dos campos para retornar los valores de la lista, los cuales son
Manager_Id y L_Manager_Name, donde en ste ltimo se debe mostrar el
nombre completo del empleado jefe.

49

Una vez que la consulta es definida


puede incluir algunas o todas las
columnas del grupo de registros en la lista
de valores.
Seleccione de la lista de Columnas del
Grupo de Registros la columna(s) que
desea visualizar en la lista de valores y
para pasar
presione el botn
dichas columnas como parte de la lista de
Columnas de la Lista de Valores.
Presione el botn
pasar a la siguiente pantalla.

para

Nuevamente otra ventana le indica


que etiquetas llevaran las columnas o
si desea usar el default.

En la parte inferior de la ventana hay


un botn Consultar elemento de
retorno, el cual le permite definir
cuales sern los elementos que
recibirn a cada columna de la
consulta. Estos objetos pueden ser
elementos de texto o elementos
mostrados.

Seleccione el elemento del bloque de datos que recibir el valor de la


columna que el usuario elige de la lista de valores en tiempo de
ejecucin.
Avance a la siguiente pantalla presionando Siguiente >

50

En sta pantalla debe definir algunos


valores a ciertas atributos de la lista.
Para ste ejemplo asigne el ttulo
Lista de Jefes, modifique los valores
por defecto del ancho y la altura de la
ventana de la lista de valores,
asignando
300
y
350
respectivamente. Forms colocar la
lista de valores automticamente.
Avance a la siguiente
presionando Siguiente >

pantalla

Si desea modificar las propiedades


avanzadas puede hacerlo.
Recuperar # de filas cada vez
permite limitar la cantidad de filas que
muestra la lista de valores.
Refrescar los datos del grupo de
registros antes de mostrar la lista
de valores permite actualizar datos
que hayan sido incluidos durante el
tiempo en que se ha interactuado con
una aplicacin sin salir de ella,
presentando en la lista de valores
cualquier cambio en las tablas que la
conforman.
Permitir al usuario filtrar los
registros antes de mostrarlos es
una funcionalidad que en tiempo de
ejecucin permitir al usuario final
filtrar informacin antes de que los
valores de la lista sean mostrados en
pantalla.
Avance a la siguiente pantalla presionando Siguiente >

51

De
los
elementos
que
se
seleccionaron como valores de
retorno, se han seleccionado el
Manager_Id y L_Manager_Name
donde se asignarn el cdigo y el
nombre del empleado jefe.
Asigne a alguno de stos elementos o
a todos la lista de valores, con el fin
de que el usuario presionando la
combinacin de teclas CTRL+L pueda
levantar la lista de valores.
Importante: los elementos deben ser
de tipo Elemento de Texto, en ste
caso Manager_Id es elemento de
texto
y
L_Manager_Name
es
elemento mostrado por lo tanto ste
ltimo al ser un elemento que nunca
podr tener el foco de edicin, no
tendr sentido asignarle la lista de
valores.

Una vez asignada la lista de valores al elemento


presione el botn Siguiente >

El asistente ha completado la definicin de la lista


para
de valores, presione el botn
crear el grupo de registros y la lista de valores. El
navegador de objetos mostrar y asignar un
nombre y un consecutivo de grupo de registros y
lista de valores, el cual podr modificar editndolos.
Si desea modificar la lista de valores en un futuro,
vuelva a llamar al asistente de diseo de listas de
valores y modifique los atributos que considere
necesarios.

52

Creando listas de valores manualmente

Creacin de Grupo de Registros


Se abre la forma a la cual se le aadir el Grupo de Registros.
Luego se da clic en el componente de Grupo de Registros en el navegador de objetos y en la
paleta de herramientas escoja Crear (+)
Aparece una ventana para la creacin de la consulta o indicar que se trabajara con valores
estticos. Escoja la opcin que necesite.
Clic en aceptar.
Aparecer el nuevo objeto Record Group.

Creacin de la Lista de Valores


Previamente creado el grupo de registros se da clic en el componente Lista de Valores del
navegador de objetos y en la paleta de herramientas escoja Crear (+)
Aparece una ventana la cual indica el modo de creacin (manual o Asistente). Escoja Manual.
Presione Aceptar.
Luego dirjase a la paleta de propiedades de la nueva lista de valores.
Defina cual Grupo de Registros se utilizar en la propiedad Grupo de Registros.
Luego en la propiedad Propiedades de Correspondencia de Columnas, indique cuales columnas
sern retornadas a los elementos del bloque de datos.
Finalizado esto debe indicar al botn que disparara la lista de valores, cual lista de valores debe
ejecutarse (Ver cdigo en la parte superior). Si fuera un text item quien dispara la lista de valores, se
define en la propiedad Lista de Valores del elemento de texto cual Lista de Valores se invocar.

Alertas
Una alerta es una ventana modal que despliega un mensaje el cual notifica al operador sobre alguna
condicin de la aplicacin.
Existen 3 estilos de alertas: Parar,
Atencin y Nota.
Cada estilo de alerta mostrar una
figura diferente.
La cantidad de botones en una alerta
ser definida por la cantidad de
Etiquetas de Botn con contenido.
Es decir, si se necesita una alerta que
presente un mensaje, sta deber
tener el texto Aceptar en la Etiqueta
del Botn 1, y las etiquetas del botn
1 y 2 deben de dejarse sin contenido.

53

Disparadores
Los disparadores responden a eventos que se ejecutan en una aplicacin en tiempo de ejecucin, con el
objetivo de ejecutar ciertas rutinas, dependiendo del procedimiento invocado.
Explicacin principales disparadores definidos
Existe divisin de categoras funcionales para los disparadores:
Disparadores para procesamiento de bloques
Disparadores para eventos de interfaz
Disparadores para maestro-detalle
Disparadores para el manejo de mensajes de error
Disparadores de navegacin
Disparadores para tiempo de consulta
Disparadores transaccionales
Disparadores de validacin
Disparadores para procesamiento de bloques .- Estos triggers se disparan en respuesta a eventos
relacionados en la administracin de un registro en un bloque.
When-Create-Record

Realiza una accin cuando se intenta crear un nuevo registro en un


bloque.

When-Clear-Block

Realiza una accin cuando se elimina el registro actual. Remueve


todos los registros del bloque.

When-Database-Record

Realiza una accin cuando cambia el estado del registro para


insertar, actualizar, as se indica que el registro ser procesado por
la siguiente operacin COMMIT_FORM.

When-Remove-Record

Realiza una accin cuando un registro es limpiado o eliminado.

Disparadores para eventos de interfaz.- Son disparados en los eventos que ocurren en la interfaz de la
forma.
When-Button-Pressed

Inicia una accin cuando un operador selecciona un botn


(mouse/tecla).

Key-Commit

Se ejecuta cuando se realiza la accin COMMIT, con la tecla F10.

Key-Entqry

Inicia accin cuando se entra el modo de consulta (tecla F7).

Key-Exeqry

Inicia accin cuando se ejecuta la consulta (tecla F8).

When-Timer-Expired

Inicia una accin cuando expira el timer programtico.

When-Window-Activated

Inicia una accin cuando un operador o aplicacin activa una


ventana.

54

When-Window-Closed

Inicia una accin cuando un operador cierra una ventana con el


comando Close del administrador de ventana.

Disparadores Maestro-Detalle .- Son generados automticamente al definirse una relacin maestrodetalle entre bloques. Estos obligan la coordinacin entre registros en un bloque detalle y en el registro
maestro del bloque maestro.
On-Check-Delete-Master
Se dispara cuando se intenta eliminar un registro en un bloque que es un
bloque maestro en una relacin maestro-detalle.
On-Clear-Details
Se dispara cuando se necesitan limpiar registros en un bloque que es un bloque
detalle en una relacin maestro-detalle.

Disparadores para el manejo de mensajes de error.- Form Builder enva mensajes de informacin y error
en respuesta a eventos en tiempo de ejecucin.
On-Error

Reemplaza un mensaje de error default con un mensaje de error personalizado.

Disparadores de navegacin.- Responden a eventos de navegacin. Por ejemplo cuando el usuario da un


clic en un tem de texto en otro bloque, un disparador de navegacin se dispara y Forms mueve el foco de
ingreso desde el tem actual al tem objetivo. Pueden dispararse en respuesta a eventos internos de
navegacin que ocurren durante el procesamiento de la forma. Se subdividen en 2 categoras: Pre-trigger y
Post-trigger.
Listado de Disparadores de Navegacin:
Pre-Block, Pre-Record, Pre-Text-Item, Post-Text-Item, Post-Record, Post-Block.
Pre-Form

Se dispara durante el evento de Entrar a la forma, al inicio de la forma.

Post-Form

Realiza una accin cuando Forms sale de la forma.

Adems, existen los disparadores When-New-Instance-Triggers que se disparan al final de la secuencia de


navegacin que ubica el foco en un tem diferente. Estos son: When-New-Block-Instance, When-NewRecord-Instance, When-New-Item-Instance.
When-New-Form-Instance

Realiza una accin al iniciar la forma. Se ejecuta despus del


disparador Pre-Form.

Disparadores para tiempo de consulta.- Son disparados antes y justo despus que el usuario o la
aplicacin ejecuta una consulta en un bloque. Estos disparadores son :
Pre-Query

Valida el criterio de consulta actual o provee programticamente criterio adicional.

Post-Query

Realiza una accin despus de recuperar un registro. Se dispara una vez para cada
registro dentro del bloque.

Disparadores transaccionales.- Se disparan en respuesta a varios eventos que ocurren cuando la forma
interacta con la fuente de datos. Los triggers son: On-Delete, On-Insert, On-Lock, On-Logout, On-Update,

55

Post-Database-Commit, Post-Delete, Post-Forms-Commit, Post-Insert, Post-Update, Pre-Commit, PreDelete, Pre-Insert, Pre-Update.


On-Logon

Se dispara para cada logon a la base de datos.

Disparadores de validacin.- Se disparan cuando Form Builder valida datos en un tem o registro. La
validacin la chequea durante la navegacin que ocurre por control de programacin, procesamiento, etc.
When-Validate-Item

Se dispara en la ultima parte de la validacin del tem para los


tems con el estado de validacin Nuevo o Modificado.

When-Validate-Record

Se dispara durante el proceso de validacin de registros, en la


ultima parte de la validacin del registro para los registros con
estado Nuevo o Modificado.

Otros Disparadores
When-Button-Pressed

Se dispara cuando se selecciona un botn al dar un clic o usar el


teclado. Es definido a nivel de forma, bloque o tem.

When-Mouse-Click

Se dispara despus de hacer click con el ratn, si ocurren estos


eventos: click en lienzos o elementos de la forma.

When-Mouse-Enter

Se dispara cuando el mouse entra a un tem o canvas.

When-Mouse-Leave

Se dispara cuando el mouse sale de un tem o canvas.

56

Implementacin de Disparadores ms comunes


POST-QUERY
Se implement el disparador PORTQUERY mediante un cursor el cual
obtiene el nombre del jefe, consultando el
cdigo del empleado en la tabla
EMPLOYEES y que corresponda al
cdigo de jefe del registro actual en el
bloque de departamentos.
Recordemos que ste disparador se
ejecuta luego de realizada la consulta a
la base de datos y presentados lo datos
en el bloque.
Este disparador se ejecuta para todos los
registros recuperados y visualizados en
el bloque de datos.
WHEN-VALIDATE-ITEM
El When-Validate-Item es un disparador
que podra implementarse igual que el
POST-QUERY para la recuperacin y
validacin del dato, incorporando el
comando Raise Form_Trigger_Failure
dentro de la validacin de localizacin del
registro. Sin embargo, para implementar
un ejemplo diferente, se realiza la
validacin haciendo una consulta directa
y utilizando el manejo de excepciones
para identificar si se logr o no encontrar
el registro.
En ste caso si el registro es encontrado
lo asigna directamente al elemento
L_Manager_Name, el registro no es
encontrado, el proceso se va a la seccin
de excepciones inmediantamente, ejecutando el cdigo dentro de la excepcin WHEN NO_DATA_FOUND,
asignando el cdigo no existe al elemento L_Manager_Name.
En caso de presentarse cualquier otro error se ejecuta la excepcin WHEN OTHERS, la cual mostrara el
mensaje de error de SQL, el cual no permitira identificar con precisin el error presentado.
Recordemos que ste disparador se ejecuta luego de realizada cualquier modificacin de informacin en un
elemento, cuando el bloque de datos se encuentra en estado NEW.

57

PRE-FORM
El Pre_Form es un disparador que se
ejecuta inmediatamente que se ingresa a
una pantalla, en ste se puede cargar
valores iniciales de trabajo que definen el
entorno de operacin en una aplicacin.
Para una mejor ilustracin tome como
ejemplo el cdigo fuente que se presenta
en el disparador Pre-Form de sta figura,
donde se implementa la carga de un
elemento de tipo lista a partir de los
valores de la tabla Departements del
esquema HR.
Para esto utilizamos el procedimiento
Gen_Carga_ListItem contenido en la
Biblioteca Pl/Sql llamada General.pll.
Esta unidad de programa consiste en
llenar un elemento de tipo lista a partir de
la construccin de una consulta a la base
de datos, recibiendo los parmetros necesarios para conformar la estructura de dicha consulta.
Bliblioteca:General.pll
PROCEDURE GEN_CARGA_LISTITEM(Campo In Varchar2,
Codigo In Varchar2,
Des In Varchar2,
Tabla In Varchar2,
Where_ In Varchar2 Default Null,
Order_ In Varchar2 Default Null,
GloDef In Varchar2 Default Null
) IS

-- campo tipo lista de manera: bloque.campo


-- Valor del campo a guardar en la lista
-- Descripcin del campo a guardar en la lista.
-- Nombre de Tabla de la cual se cargan valores
-- Condiciones de la consulta.
-- Ordenamiento de los valores a mostrar en la lista.
-- Global para utilizacin de valor inicial del campo.

RG
RecordGroup;
Status Number;
NomRG varchar2(20);
Consulta varchar2(2000);
Inicial varchar2(500);
BEGIN
-- Se crea la consulta para cargar los valores de la lista.
Consulta := 'Select '||Des||' DES, '||Codigo||' COD From '||Tabla;
IF Where_ is not null then
Consulta := Consulta ||' Where '||Where_;
End If;
IF Order_ is not null then
Consulta := Consulta ||' Order by '||Order_;
end if;
-- Si el RG ya existe, lo elimina para crear la nueva consulta.
RG := Find_Group('GRUPO_LISTA');
IF Not Id_Null(Rg) Then
Delete_Group (RG);
End IF;
-- Crea Record group.
NomRG := 'GRUPO_LISTA';
RG := Create_Group_From_Query (NomRG,Consulta);
Status := Populate_Group (RG);
Clear_List (Campo);
Populate_List (Campo,RG);
-- Asignar a la global el primer valor
if (GloDef is not null) and (Get_Group_Row_Count(RG) > 0) then
Inicial := Get_Group_Char_Cell (NomRG||'.COD',1);
Copy (Inicial,GloDef);
end if;
Delete_Group (RG);
EXCEPTION
When Others Then
Gen_Mensaje('<Gen_Carga_ListItem>..Error interno en rutina de carga de campo lista.. '||SqlErrM);
Raise Form_Trigger_Failure;
END;

58

Continuando con la implementacin del elemento de lista dinmico, es necesario definir la propiedad Tipo
de Elemento en la paleta de propiedades como Elemento de Lista.

Una vez definido el tipo de elemento y debido a que el elemento de lista se llena a partir de los datos en una
tabla, no deben existir valores en la propiedad Elementos en Lista, los cuales son creados por defecto y
deben eliminarse, tanto el Elemento de Lista como el Valor de Elemento de Lista.

Asegrese de conectar la biblioteca


General.pll para poder utilizar la unidad
de
programa
Gen_Carga_ListItem
contenida en ella.
Al ejecutar la aplicacin sta deber
presentarse como se observa en la
siguiente figura.

59

Bibliotecas PL/SQL
Es una coleccin de subprogramas, incluyendo procedimientos, funciones y paquetes, los cuales pueden
compartirse entre distintas aplicaciones. Esto ayuda a la estandarizacin del desarrollo.
Crear una librera nueva

Para crear una Biblioteca, debe ubicarse en el componente


Bibliotecas PL/SQL, y presionar el botn crear en el panel
vertical, seguidamente Forms crear el objeto en sta
seccin de componentes con un nombre lgico temporal, el
cual ser almacenado con el nombre que se le defina.

Una vez almacenada la biblioteca en disco, podemos


incorporarle funciones, procedimientos y paquetes, tal y
como se muestra en la siguiente figura.

60

Como se puede apreciar, esta biblioteca llamada,


General.pll, contiene una serie de procedimientos y
funciones que se convierten en cdigo flexible y
estndar, el cual puede ser utilizado por cualquier
aplicacin que conecte sta biblioteca.
Una vez creada la biblioteca, sta puede ser
recuperada para adicionarle o modificarle cualquier
de las unidades de programa que la componen.
Luego de realizar cualquier cambio en la biblioteca,
sta debe ser compilada completamente utilizando
la combinacin de teclas CTRL+SHIFT+K.
Posteriormente con CTRL+T debe generar el
mdulo compilado, para su utilizacin en ambiente
de ejecucin.

Conectar Bibliotecas
Son vnculos a las libreras del sistema de archivos, las cuales tienen procedimientos, paquetes y funciones
que realizan ciertas operaciones al momento de ejecutar la aplicacin.

Para conectar una biblioteca PL/SQL, debe


ubicarse en el componente Bibliotecas
Conectadas, y presionar el botn crear en el
panel vertical, seguidamente Forms abrir un
dilogo de conexin, donde deber buscar el
archivo con extensin PLL y seleccionarlo para
conectarlo a la aplicacin.

Al conectar la biblioteca Forms le solicitar que indique si


desea eliminar la ruta de acceso, si la elimina deber definir
la ruta en la variable FORMS_PATH en el Regedit y en el
archivo ambiente *.env del ambiente de ejecucin. Si no
elimina la ruta se debe tener en cuenta que la aplicacin
buscar tanto en ambiente de desarrollo como de ejecucin la biblioteca en la ubicacin donde
originalmente se encontraba almacenada en el momento de conectarla a la aplicacin.

61

Unidades de Programa
Son procedimientos o funciones a nivel de la forma, las cuales tiene la lgica de programacin con la que
interactan los objetos de la forma.
Para ilustrar mejor ste concepto, confeccionar un elemento de tipo rbol Jerrquico a partir de la tabla
de Employees del esquema HR, el cual ser cargado utilizando una unidad de programa local a la forma de
Empleados.fmb.
Como primer paso se debe crear el componente Grupo de Registro al cual le asignaremos el nombre
Gr_Tree_Empleados, incorporando la consulta que se presenta en la siguiente figura.
Implementacin de un rbol jerrquico

Para la construccin de un rbol jerrquico a partir de


una tabla se debe respetar la siguiente estructura:
1. Valores numricos 0 y 1 que indican si el rbol
se presenta con todos sus nodos colapsados o
expandidos respectivamente.
2. Nivel de jerrqua del nodo en el rbol.
3. Descripcin que ser mostrada en el rbol.
4. cono con que se desea visualizar un nivel o
jerarqua de nodos.
5. Valor al que responde o que encapsula el nodo.

Cree el bloque de datos manualmente con el nombre


B_Tree_Empleados no basado en tablas y agregue en este un
nuevo elemento de tipo rbol Jerrquico con el nombre TREE, vaya
a la seccin funcional de la paleta de propiedades y asciele el
Grupo de Registros Gr_Tree_Empleados y finalmente vinclelo al
lienzo donde se desea visualizar.

62

Tome el siguiente procedimiento e inclyalo como una unidad de programa local a la forma Empledos.fmb,
con el nombre Tree_Carga_Rg.
PROCEDURE TREE_CARGA_RG

v_Status Number := 0;
RG
RecordGroup;

(p_Campo In Varchar2, -- Item tipo rbol


p_NomRG In Varchar2 -- Nombre del Record Group asociado
) IS

-- Almacena resultado de ejecucin de RG.


-- Record group de cuentas contables definidas.

BEGIN
-- Asigna el Record Group al campo determinado
FTree.Set_Tree_Property(p_Campo,FTree.Record_Group,p_NomRG);
-- Asigna el cursor como ocupado
Set_Application_Property(Cursor_Style,'Busy');
-- Ejecuta el record group con el cual se cargar el rbol
v_Status := Populate_Group(p_NomRG);
:Parameter.Par_TotNodos := Get_Group_Row_Count(p_NomRG);
-- Carga elementos en el rbol
FTree.Populate_Tree(p_Campo);
-- Restaura el estilo del mouse para indica que ya finaliz el proceso
Set_Application_Property(Cursor_Style,'Default');
-- Establece el primer elemento del rbol como Seleccionado
FTree.Set_Tree_Selection(p_Campo, 1, FTree.Select_On);
END;

Una vez incluido el procedimiento en la forma, incluya en el


disparador When-New-Form-Instance el llamado al
procedimiento Tree_Carga_Rg para que sea cargado el
elemento de tipo rbol Jerrquico del bloque
B_Tree_Empleados y puedan ser visualizados los registros
de la tabla Employees segn la jerarqua de jefatura
asignada a cada empleado, segn la consulta implementada
en el grupo de registros GR_TREE_EMPLEADOS.

El procedimiento Tree_Carga_Rg
cargar los registros recuperados
en el grupo de registros
GR_TREE_EMPLEADOS en el
elemento
de
tipo
rbol
B_Tree_Empleados.Tree,
presentndolo como se muestra
en la sta figura.

63

Como ejercicio adicional y explotando la funcionalidad que permite el elemento de tipo rbol, cree el
siguiente procedimiento en como una unidad de programa local a la forma Empleados.fmb, con el nombre
Tree_Nodos_Seleccianados, la cual recorrer cada uno de los nodos seleccionados en el rbol y
utilizaremos para que realice una consulta al bloque Employees y presente la informacin de cada
empleado seleccionado en el rbol, simulando una relacin entre bloques de datos.
La seleccin de registros puede ser mltiple, presentando los mismos registros en el bloque empleados que
fueron seleccionados en el rbol.
PROCEDURE tree_nodos_seleccionados (
p_campoarbol IN
VARCHAR2,
-- Campo tipo rbol por controlar
p_rgelementos OUT
recordgroup, -- Rg donde almacena elem seleccionados
p_colcodigo
OUT
groupcolumn, -- Columna a consultar posteriormente
p_totelementos OUT
NUMBER,
-- # Elementos seleccionados
p_selecpadres IN
BOOLEAN DEFAULT FALSE -- Indica si se desean seleccionar los padres
)
IS
htree
item
:= FIND_ITEM (p_campoarbol);
v_nodoactual ftree.node;
-- Almacena c/nodo seleccionado
v_nodotmp
ftree.node;
-- Nodo padre temporal
v_idtmp_rg
recordgroup;
v_valor_nodo VARCHAR2 (100);
-- Almacena el valor del nodo
v_tipo_nivel VARCHAR2 (2);
-- Almacena el tipo de nivel que se extrae del rbol (1:Uen, 2:Proceso, 3:Funcionario)
v_primera_vez BOOLEAN
:= TRUE;
v_error
VARCHAR2 (2000) := NULL;
BEGIN
IF ID_NULL (htree)
THEN
gen_error ( 'El campo tipo rbol: '
|| p_campoarbol
|| ' no existe en la forma actual.'
);
RAISE form_trigger_failure;
END IF;
-- Si no existen elementos seleccionados, solamente sale
p_totelementos := ftree.GET_TREE_PROPERTY (htree, ftree.selection_count);
IF p_totelementos = 0
THEN
RETURN;
END IF;
-- Si el grupo por crear existe, lo borra
v_idtmp_rg := FIND_GROUP ('Grupo_Elementos');
IF NOT ID_NULL (v_idtmp_rg)
THEN
DELETE_GROUP (v_idtmp_rg);
END IF;
-- Crea el record group y lo devuelve para luego permitir obtener los
-- elementos seleccionados
p_rgelementos := CREATE_GROUP ('Grupo_Elementos');
-- Crea la columna que almacena el valor de cada nodo seleccionado
p_colcodigo := ADD_GROUP_COLUMN (p_rgelementos, 'COD', char_column, 100);
-- Se recorren todos los nodos del rbol seleccionados, y si tiene padre, marca
-- selecciona el padre.
IF p_selecpadres
THEN
FOR nodopadre IN 1 .. p_totelementos
LOOP
-- Obtiene el nodo seleccionado
v_nodoactual := ftree.GET_TREE_SELECTION (htree, nodopadre);
-- Obtiene el padre (si es que tiene)
v_nodotmp := NULL;
v_nodotmp := ftree.GET_TREE_NODE_PARENT (htree, v_nodoactual);
IF v_nodotmp <> 0
THEN
ftree.SET_TREE_SELECTION (htree, v_nodotmp, ftree.select_on);
END IF;
END LOOP;
END IF;
-- Obtiene de nuevo los elementos seleccionados
p_totelementos := ftree.GET_TREE_PROPERTY (htree, ftree.selection_count);
IF p_totelementos = 0
THEN
RETURN;
END IF;
:parameter.estatuto_sql := 'Where employee_id In ( ';
-- En realidad, al seleccionarse nodos en un rbol, ste les asigna un ndice, por lo que
-- solamente debe recorrese cada elemento y obtener dicha seleccin
FOR elemento IN 1 .. p_totelementos

64

LOOP
v_nodoactual := ftree.GET_TREE_SELECTION (htree, elemento);
v_valor_nodo := UPPER (ftree.GET_TREE_NODE_PROPERTY (htree,
v_nodoactual,
ftree.node_value
)
);
-- Incluye nueva lnea y Asigna el valor al Recor group de elementos
ADD_GROUP_ROW (p_rgelementos, end_of_group);
SET_GROUP_CHAR_CELL (p_colcodigo, elemento, v_valor_nodo);
IF NOT v_primera_vez
THEN
:parameter.estatuto_sql := :parameter.estatuto_sql || ', ' || v_valor_nodo;
ELSE
:parameter.estatuto_sql := :parameter.estatuto_sql || v_valor_nodo;
v_primera_vez := FALSE;
END IF;
END LOOP;
:parameter.estatuto_sql := :parameter.estatuto_sql || ') ';
-- Ejecuta el estatuto sql para visualizar el registro en el bloque de mantenimiento
-- que corresponde al valor del dato seleccionado en el arbol
IF NOT gen_ejecutaqueryconwhere
(:parameter.estatuto_sql, -- Estatuto SQL
'Employees'
-- Bloque donde se ejecutar la consulta
)
THEN
NULL;
END IF;
RETURN;
END;

Seguidamente incluya en el elemento B_Tree_Empleados.Tree el disparador When-Tree-Node_Selected e


ingrese el siguiente cdigo, el cual ser ejecutado cada vez que se seleccione uno o ms nodos del rbol.
Disparador When-Tree-Node_Selected
Declare
v_RGElementos RecordGroup;
v_ColCodigo GroupColumn;
v_TotElementos Number;
v_BloqueActual Varchar2(50);

-- Rg donde almacena elem seleccionados


-- Columna a consultar posteriormente

Begin
Tree_Nodos_Seleccionados ('B_TREE_EMPLEADOS.TREE',
v_RGElementos,
v_ColCodigo,
v_TotElementos);

-- Elemento de tipo arbol


-- Grupo de registro donde almacena elem seleccionados
-- Columna a consultar posteriormente

End;

65

Posteriormente a la implementacin correcta del disparador When-Tree-Node_Selected compile y ejecute


la aplicacin. Seleccione uno o varios registros del rbol y observe como simultneamente son consultados
los registros en el bloque de datos Employees.
Para lograr esta funcionalidad se incluye el siguiente cdigo en la unidad de programa
Tree_Nodos_Seleccionados, el cual incrusta en la clusula Where del bloque, la condicin de bsqueda
dinmicamente, donde el parmetro Estatuto_Sql contiene la condicin Employee_Id In (valor1, valorN).
La funcin Gen_EjecutaQueryConWhere se encuentra en la biblioteca General.pll, la cual se encarga de
armar la clusula de condicin.
-- Ejecuta el estatuto sql para visualizar el registro en el bloque de mantenimiento
-- que corresponde al valor del dato seleccionado en el arbol
IF NOT gen_ejecutaqueryconwhere
(:parameter.estatuto_sql, -- Estatuto SQL
'Employees'
-- Bloque donde se ejecutar la consulta
)
THEN
NULL;
END IF;

Funcin Gen_EjecutaQueryConWhere integrado a la biblioteca General.pll.


FUNCTION gen_ejecutaqueryconwhere (
p_estatutosql IN VARCHAR2,
-- Estatuto SQL
p_bloque
IN VARCHAR2, -- Bloque donde se ejecutar la consulta
p_num_registro
NUMBER
DEFAULT 1
-- Registro en el que se debe posicionarse posterior a la consulta
)
RETURN BOOLEAN
IS
/*
OBJETIVO.........: Ejecutar un query para un bloque dado, utilizando la clusula WHERE dada en el
estatuto SQL en P_EstatutoSQL
REQUIERE.........: Que existe la palabra WHERE, sino retorna FALSE
RESTRICCIONES....: Si el valor de la consulta no corresponde al bloque en el parmetro P_Bloque se
ocurrir un error de consulta en tiempo de ejecucin.
EFECT SECUNDARIOS: Mueve el cursor al bloque pasado en P_Bloque
CONSIDERACIONES..: Si se utiliza el valor de la variable de sistema :System.Last_Query para asignarlo
al Estatuto Sql que se recibe en el parmetro P_EstatutoSql, dicho valor debe ser
asignado a un parmetro o item local caracter con una presicin de 2000 y ejecutado
desde el Trigger Post-Query del Bloque para el cual se ejecutar la consulta.
Para que no se refresque el valor en el parmetro o varible local se puede condicionar
a que dicho valor sea nulo para ser asignado, limpindose en el trigger Key-ExeQry
del mismo bloque.
*/
v_whereanterior VARCHAR2 (5000);
v_wherenuevo
VARCHAR2 (5000);
v_orderbyanterior VARCHAR2 (5000);
v_poswhere
NUMBER;
v_posorderby
NUMBER;
v_ret
BOOLEAN
:= FALSE;
BEGIN
IF p_estatutosql IS NOT NULL
THEN
-- Guarda el valor anterior
v_whereanterior := GET_BLOCK_PROPERTY (p_bloque, default_where);
-- Obtiene la posicion del WHERE en el estatuto
v_poswhere := INSTR (UPPER (p_estatutosql), 'WHERE');
IF v_poswhere != 0
THEN
-- Determina si hay un order by
v_posorderby := INSTR (UPPER (p_estatutosql), 'ORDER BY');
-- Obtiene el estatuto WHERE
IF v_posorderby = 0
THEN
v_wherenuevo := SUBSTR (UPPER (p_estatutosql), v_poswhere);
ELSE
v_wherenuevo :=
SUBSTR (UPPER (p_estatutosql),
v_poswhere,
v_posorderby - v_poswhere
);
END IF;
-- Cambia el estatuto WHERE, respaldando el anterior
SET_BLOCK_PROPERTY (p_bloque, default_where, v_wherenuevo);
END IF;
GO_BLOCK (p_bloque);
EXECUTE_QUERY;

-- ejecuta la consulta

66

-- Determina si el registro en el cual se va a posicionar es mayor que el nmero


-- de registros traido por la consulta, si lo es se queda en el ltimo registro
LAST_RECORD;
IF p_num_registro <= GET_BLOCK_PROPERTY (p_bloque, current_record)
THEN
GO_RECORD (p_num_registro);
END IF;
-- restaura el where anterior
SET_BLOCK_PROPERTY (p_bloque, default_where, v_whereanterior);
v_ret := TRUE;
ELSE
GO_BLOCK (p_bloque);
EXECUTE_QUERY;
END IF;
RETURN v_ret;
END;

67

Excepciones, RETURN y EXIT


En Developer Forms se manejan las excepciones que son situaciones las cuales generan error y no son
manejadas por Oracle, entonces la aplicacin le indica al usuario la anomala y el programa muestra un
mensaje de error o precaucin.
Las excepciones se definen en la parte final del procedimiento o funcin, dentro de ella no se escribe begin
o end para que realice la tarea que se especificar.
EXCEPTION
Nombre de la excepcin THEN
/* indicaciones a realizar cuando se dispare la excepcin */
Ejemplo:
Function Gen_EjecutarSql ( Instruccin in varchar2, Err out varchar2 ) Return boolean IS
BEGIN
if Form_Success then
Return (true);
else
Err := DBMS_Error_Text;
Return (false);
end if;
EXCEPTION
when OTHERS then
Err := DBMS_Error_Text||' / '||SqlErrM;
Return (false);
END;

Manejo de Errores con ERROR_CODE, ERROR_TEXT


Error Code: retorna el nmero del error que genero Form Builder.
Error_Text : retorna el mensaje de error que gener Form Builder.
Trigger: On-Error
DECLARE
errnum NUMBER
:= ERROR_CODE;
errtxt VARCHAR2(80) := ERROR_TEXT;
BEGIN
IF errnum = 40301 THEN
Message('Criterio de bsqueda errneo);
END IF;
END;
Diferencias con SQLCODE
SQLCODE captura los errores Oracle, si se desea usarlo en Forms, debe estar especificado dentro de las
excepciones. Su uso es popular con la excepcin WHEN OTHERS.

68

DECLARE
lv_sqlcode NUMBER;
lv_sqlerrm VARCHAR2(240);
lv_constr VARCHAR2(41);
BEGIN
UPDATE empleados
SET dept = 5
WHERE PRIMARY_KEY_FIELD = :BLOCK.PK;
EXCEPTION
WHEN OTHERS THEN
lv_sqlcode := SQLCODE;
lv_sqlerrm := SQLERRM;
IF (lv_sqlcode = -2290) THEN
lv_constr := strip_constraint_name(lv_sqlerrm);
END IF;
END;
Errores FRM
Cuando se programa en Forms Builder, puede aparecer errores a nivel de la forma, estos errores se
denotan con las siglas FRM seguidas de nmeros.

69

Uso de Identificadores
Identificadores Locales
Son las variables locales o aquellas que estn en el mbito del procedimiento/funcin. Son utilizadas por el
procedimiento y pueden recibir valores externos por medio de parmetros.
Identificadores del Sistema
Es una variable de Form Builder que mantiene rastro de un estado interno de Form Builder. Los valores de
estas variables se aplican solamente a la forma actual. A continuacin una lista de las variables del sistema
ms utilizadas:
:system.BLOCK_STATUS: Representa el estado del bloque de datos donde el cursor est localizado.
:system.CURRENT_BLOCK: Retorna el valor del bloque actual si el foco esta en tem, registro o bloque
(Pre-Item, Post-Item, triggers de registro y bloque) , de lo contrario retorna NULL, si el foco esta en un a
forma (Triggers PreForm, Post-Form).
:system.CURRENT_ITEM: Representa el nombre del bloque e tem (bloque.tem) donde el foco esta
localizado. Es un cadena de caracteres.
:system.CURRENT_VALUE: Representa el valor del tem donde el cursor esta localizado.
Identificadores Globales

De Paquete: Son variables globales definidas por el usuario en un paquete, el cual puede estar en el
filesystem o base de datos.

GLOBAL: Estas variables tienen declaracin implcita, es decir que no necesitan ser declaradas,
simplemente cuando se necesita se las crea. Son tipo varchar.

Referencia a Objetos de la forma


Al desarrollar en Form Builder, se pueden referenciar objetos de la forma, dentro de los procedimientos,
funciones y triggers, pueden ser utilizados para realizar validaciones y consultas. Estos objetos tienen
valores que pueden ingresar como parmetros.
Se los referencia de la siguiente manera: Situando : (dos puntos) delante del objeto.
: nombre_objeto (podra ser un tem)
: nombre_bloque.nombre_objeto (formato bloque.item)

70

Referencia indirecta a Objetos con NAME_IN


Se utiliza la funcin NAME_IN para retornar el valor de una variable enviada como parmetro a esta
funcin.
Declare
v_tm Varchar2(20);
Begin
Default_Value( '0', v_tm );
If name_in(v_tm) is null then
v_tm := 1;
Else
Procesar(v_tm);
End if;
End

Cdigo provisto por DEVELOPER


-

Regedit : Cuando se necesitan especificar ciertos valores que dependen de variables de entorno, ya
sean propias de Oracle o definidas por el usuario, existe un procedimiento que nos permite capturar
esos valores y manipular el resultado para procesos de validacin. El procedimiento se llama
tool_env.getvar (variable_de_ambiente, variable);
tool_env.getvar (EV_COMPANY, Lv_Compania);
- Esta sentencia esta almacenando el valor de EV_COMPANY en Lv_Compania.

Propiedades de Items: A los tems se les puede modificar las propiedades en tiempo de ejecucin.
Existe la funcin GET_ITEM_PROPERTY que recupera la propiedad especifica del tem tambin existe
el procedimiento SET_ITEM_PROPERTY, que modifica la propiedad en cierto tem.
La sintxis de GET_ITEM_PROPERTY:
GET_ITEM_PROPERTY (item_id, ITEM, property NUMBER);
GET_ITEM_PROPERTY (item_name VARCHAR2, property NUMBER);
Se debe tomar en cuenta que existen ciertas propiedades que no estn especificadas para todos los
tems, por esto si se desea setear o recuperar la propiedad de cierto tem y en l no aplica la propiedad,
generar error.
Cuando se utiliza set_item_property, solo se puede modificar la propiedad a un solo tem. La sintaxis de
este procedimiento es amplia, a continuacin se detalla la parametrizacin comnmente usada.
SET_ITEM_PROPERTY (item_id ITEM, property NUMBER, value

VARCHAR2);

SET_ITEM_PROPERTY (item_name VARCHAR2, property NUMBER, value

VARCHAR2);

71

Navegacin entre Objetos: Cuando se tienen mdulo de consultas o ingresos en los que se requiere
llenar rpidamente los parmetros, es necesario manejar una buena navegacin entre objetos. As
tambin en el aspecto de programacin, el desarrollador debe indicarle a los procedimientos en que
campos depositar los datos, por cual registro iniciar la navegacin.
Algunas ocasiones se nos presentan errores en la consulta de datos y se debe a que no se ha
especificado directamente a cual bloque se llevarn los datos.
- GO_BLOCK: Indica a que bloque se debe fijar el foco para el ingreso / consulta de datos. La sintaxis
es la siguiente: GO_BLOCK (NOMBRE_DEL_BLOQUE)
- GO_ITEM: Indica a que objeto debe fijarse el foco de ingreso . La sintaxis es as:
- GO_ITEM (item_id Item); Antes de definir el tipo ITEM se debe hacer FIND_ITEM para retornar un
valor tipo ITEM y ejecutar el procedimiento GO_ITEM con esta parametrizacin.
- GO_ITEM (:nombre_bloque.nombre_item);
NEXT_ITEM: Navega al siguiente tem, regularmente se programa en el trigger KEY-NEXT-ITEM. Este
procedimiento no recibe parmetros. La sintaxis es: NEXT_ITEM;
PREVIOUS_ITEM: Navega al tem anterior navegable. La sintaxis es: PREVIOUS_ITEM;
/* Trigger: Key-Previous-Item */
DECLARE
cur_itm VARCHAR2(80) := :System.Cursor_Item;
cur_blk VARCHAR2(80) := :System.Cursor_Block;
frs_itm VARCHAR2(80);
BEGIN
frs_itm := cur_blk||'.'||Get_Block_Property(cur_blk,FIRST_ITEM);
IF cur_itm = frs_itm THEN
Previous_Block;
ELSE
Previous_Item;
END IF;
END;

Men: Dentro de las formas se pueden manejar los menes para indicar cual debe aparecer o
esconderse. Para esto existe el procedimiento REPLACE_MENU.
Este procedimiento reemplaza el men actual con el men que se especifica, pero no lo hace activo al
nuevo men. La sintaxis comn es REPLACE_MENU;
Pero dependiendo de la necesidad existen mas parmetros para definir en la programacin.
Por ejemplo: REPLACE_MENU (nombre_menu);

72

Navegacin entre registros


Forms trabaja con formularios multiregistros, es decir es un arreglo de registros para el ingreso/consulta de
datos. Se utilizan los siguientes procedimientos para trabajar con estos : FIRST_RECORD,
NEXT_RECORD, LAST_RECORD, GO_RECORD, INSERT_RECORD, DELETE_RECORD.
FIRST_RECORD: Navega al primer registro del bloque de datos.
** Trigger: When-Button-Pressed
*/
BEGIN
/*
Si no esta en el ltimo registro entonces vaya al ltimo, de lo contrario vaya al primer registro.
IF :System.Last_Record <> 'TRUE' THEN
Last_Record;
ELSE
First_Record;
END IF;
END;

*/

NEXT_RECORD: Navega al siguiente tem habilitado y secuencial en el registro con el nmero de


secuencia mas alto que del registro actual. Si no existe un registro, Forms crear un registro.
** Trigger: Key-Next-Item
/* lst_itm recibe el nombre del ultimo tem del registro. Luego compara al tem actual con lst_item.
Si son iguales avanza al primer tem del siguiente registro, avanza un registro, no regresa al primer tem del
registro actual, de lo contrario, avanza al siguiente tem del registro actual.
*/
DECLARE
cur_itm VARCHAR2(80) := :System.Cursor_Item;
cur_blk VARCHAR2(80) := :System.Cursor_Block;
lst_itm VARCHAR2(80);
BEGIN
lst_itm := cur_blk||'.'||Get_Block_Property(cur_blk,LAST_ITEM);
IF cur_itm = lst_itm THEN
Next_Record;
ELSE
Next_Item;
END IF;
END;
LAST_RECORD: Navega al ltimo registro en la lista de registros del bloque. Si una consulta esta abierta,
Forms recoge los datos restantes del bloque y cierra la consulta.
-- Trigger: When-Button-Pressed
BEGIN
/*
Si es diferente del ultimo registro, entonces que vaya al ltimo registro */
IF :System.Last_Record <> 'TRUE' THEN
Last_Record;
END IF;
END;
GO_RECORD: Navega al registro con el nmero de registro especificado en el parmetro.

73

BEGIN
Go_Record( :nombre_bloque.ultimo_numero_registro );
END;
ultimo_numero_registro: es el numero del ultimo registro, puede ser un valor esttico o un nmero
retornado de una variable de sistema.
INSERT_RECORD: Al llamarse desde un disparador KEY-CREREC, se inserta el registro actual en la base
de datos durante el proceso de transacciones Commit y Post.
-- Trigger: On-Insert
BEGIN
/*
Chequea la bandera para iniciar la insercion */
IF flag = 'TRUE' THEN
Insert_Record;
END IF;
END;
DELETE_RECORD: Al usar el disparador KEY-DELREC remueve el registro actual y marca al registro
como eliminado. Estos registros no se borran instantneamente, sino que son procesados en el siguiente
proceso COMMIT.

Como personalizar la barra de herramientas


Oracle Forms provee a las aplicaciones con una barra de herramientas horizontal estndar para la
operacin y navegacin entre registros. Sin embargo, se puede personalizar la barra de herramientas
utilizando las mismas tcnicas y operabilidad contenida en la estndar.
Construya un bloque de datos con el nombre TOOLBAR, ste
nombre es opcional puede darle el nombre que crea conveniente.
El bloque de datos debe contener una serie de botones con el
mismo nombre que corresponde a la funcin o comando que
estara ejecutando cuando ste sea presionado por el usuario.
Como puede observar los nombres de los elementos que que
inician desde ENTER-QURY hasta EXIT-FORM, corresponden a
el comando de ejecucin que cada botn debera realizar si fuese
presionado. Los dems elementos permiten mostrar informacin
de inters en tiempo de ejecucin, la cual se describe a
continuacin:
ELEMENTO
IMAGEN
USUARIO
PROGRAMA
FECHA
EMPRESA
SISTEMA
DES_APLICACION

DESCRIPCION DEL ELEMENTO


Imagen que desea ser presentada
Cdigo del usuario que conectado
Nombre fsico del programa ejecutado
Fecha de la base de datos
Nombre de empresa
Nombre del sistema de la aplicacin
Nombre descriptivo de la aplicacin

74

DISEO DEL LIENZO DE LA BARRA DE HERRAMIENTAS


Cada elemento de tipo botn de la barra de herramientas diseada en el bloque TOOLBAR, debe tener un
cono que represente la funcin que ste ejecutara al ser presionado por el usuario.

La funcionalidad de cada botn se centraliza en una sola unidad de programa, sta se realiza mediante la
ejecucin del disparador WHEN-BUTTON-PRESS definido a nivel del bloque de datos y no por cada
elemento botn, esto para aprovechar los niveles de definicin de algunos disparadores comunes que
pueden manejarse en un nivel superior.

75

Procedimiento Ejecuta_Boton
Lee el nombre del botn y ejecuta un DO_KEY(item_name),respetando la operacin de QUERY:
Si hay botones llamados EXECUTE_QUERY y CANCEL_QUERY, esta funcin los muestra, cuando
el botn Enter_query es presionado y los oculta, cuando EXECUTE_QUERY CANCEL_QUERY
es presionado. Ningn error ser retornado, si estos botones no existen.
EXIT, QUIT and EXIT_FORM ejecutan un exit_form, an si la forma se encuentra en modo ENTER_QUERY !!!!!
El boton CANCEL_QUERY cancela algn query en estado "open".
PROCEDURE ejecuta_botn
IS
action
VARCHAR (80);
PROCEDURE oculta_boton (item_name VARCHAR2)
IS
BEGIN
IF NOT ID_NULL (FIND_ITEM (item_name))
THEN
SET_ITEM_PROPERTY (item_name, displayed, property_false);
END IF;
END;
FUNCTION muestra_boton (item_name VARCHAR2)
RETURN BOOLEAN
IS
BEGIN
IF NOT ID_NULL (FIND_ITEM (item_name))
THEN
SET_ITEM_PROPERTY (item_name, displayed, property_true);
SET_ITEM_PROPERTY (item_name, enabled, property_true);
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
RETURN NULL;
END;
BEGIN
--Obtiene nombre del trigger
action := GET_ITEM_PROPERTY (NAME_IN ('SYSTEM.TRIGGER_ITEM'), item_name);
IF action = 'ENTER_QUERY'
THEN
-- Garantiza que si se han realizado cambios en la forma se guarden u omitan
-- dichos cambios antes de ingresar a modo enter-query, de este modo se omite
-- el mensaje que sale al usuario indicando que existen cambios sin guardar
-- en ingls.
IF :SYSTEM.form_status = 'CHANGED'
THEN
gen_mensaje
(
'Ha realizado cambios en la informacin, debe guardar o eliminar '
|| 'los cambios realizados para poder consultar informacin.'
);
RAISE form_trigger_failure;
END IF;
IF muestra_boton ('EXECUTE_QUERY') AND muestra_boton ('CANCEL_QUERY')
THEN
oculta_boton ('ENTER_QUERY');
END IF;
END IF;
-- Si la accin fue disparada por el botn de salida ejecuta
-- el comando EXIT-FORM dos veces, si una vez aplicado el primero
-- la aplicacin queda en modo ENTER-QUERY, lo cual significa que
-- el usuario luego de presionar ENTER-QUERY quiso salir de la pantalla
IF action IN ('EXIT_FORM', 'EXIT', 'QUIT')
THEN
action := 'EXIT_FORM';
IF NAME_IN ('SYSTEM.MODE') = 'ENTER-QUERY'
THEN
DO_KEY ('EXIT_FORM');
END IF;
END IF;
IF action = 'CANCEL_QUERY'
THEN
action := 'EXIT_FORM';
END IF;
-- Ejecuta KEY-TRIGGER asociado al nombre del botn
-- Si la operacin es de impresin, valida la rutina que debe
-- ejecutarse, dependiendo del sistema activo.
IF action = 'PRINT'
THEN
NULL;
-Corre_Report;
ELSE
-- Cualquier otra accin.
-- Si la accin es eliminar un registro se pregunta antes de efectuar operacin
IF action IN ('DELETE_RECORD')

76

THEN
IF gen_confirma_sino ('Est seguro de eliminar la informacin ?') =
2
THEN
RETURN;
END IF;
END IF;
DO_KEY (action);
END IF;
-- Si la operacin es "Eliminar", debe actualizar la informacin realizando el commit_Form,
-- adicionalmente, si se ejecutaron procesos que afectaron la base de datos no relacionada
-- con los datos del form, debe realizar la operacin commit en la BD.
IF action IN ('DELETE_RECORD')
THEN
-- Se determina si hubo error en triggers que se ejecutan segn el flujo normal de FORMS
-- para la operacin DELETE_RECORD, de modo que no se ejecute la operacin de borrado
-- si la ltima operacin que FORMS haya ejecutado falla( ej con un raise form_trigger_failure)
-- De este modo, es posible segmentar las operaciones y dejar el resto de la operacin al toolbar
-- se incluye este control pues si se intenta borrar y forms encuentra por ej un Key-Delrec y en
-- este se hace fallar la aplicacin, Forms seguir ejecutando el cdigo asociado al botn de
-- borrado por lo cual ejecutar este cdigo y si no se controla si hubo o no fallo, se intentar
-- eliminar la informacin, el Form_Failure, determina el resultado de la ltima operacin ejecutada
-- en este caso, si el Key-Delrec falla, no se realiza la operacin de eliminar originalmente llamada.
IF FORM_FAILURE
THEN
RAISE form_trigger_failure;
END IF;
:GLOBAL.operacion_borrando := 'S';
END IF;
--Muestra botn ENTER_QUERY, oculta EXECUTE_QUERY y CANCEL_QUERY
IF NAME_IN ('SYSTEM.MODE') != 'ENTER-QUERY'
THEN
IF muestra_boton ('ENTER_QUERY')
THEN
oculta_boton ('EXECUTE_QUERY');
oculta_boton ('CANCEL_QUERY');
END IF;
END IF;
END;

De sta forma se observara la


aplicacin en tiempo de ejecucin.
Como
puede
apreciarse,
no
necesariamente se visualizan las
mismas figuras de la barra de
herramientas, en diseo y ejecucin,
ya que corresponden a archivos
diferentes, los cuales para efectos de
ste ejemplo se tratan de archivos ICO
y GIF respectivamente.

77

Uso de Parmetros
Los parmetros son utilizados para inicializar algn valor en el momento de ejecucin de la forma.
Para trabajar con parmetros desde Forms, se deben aadir objetos en la rama de Parameter en el
Navegador de objetos, luego dependiendo de la funcionalidad pueden ser utilizados para trabajar con
valores iniciales en cualquier procedimiento o funcin de la forma.
Podemos pasar valores desde un disparador de forma o desde cualquier unidad de programa, de la manera
en que se muestra en el siguiente ejemplo, asumiendo que se encuentran definidas las variables globales
Global.Par_Num_Empresa, Global.Par_Num_Sucursal y Global.Par_Fec_Sistema.
PROCEDURE GEN_LLAMAFORMA

(Forma In Varchar2,
-- Nombre de la forma a cargar
Ocultar In Boolean Default True, -- Oculta forma que ejecuta llamado
Lis_Par In Varchar2 Default Null -- Lista de parmetros
) IS

/*
GENERAL: Esta rutina carga la forma determinada por el parmetro Forma con una posible lista
de parmetros a pasar a la forma convocada.
*/
v_parametro Paramlist; -- Identificador nico de la lista de parmetros.
BEGIN
-- Se Identifica si existe lista de parametros asociada al llamado o no
v_parametro := get_parameter_list('Lis_Par');
IF (NOT id_null(v_parametro)) THEN
destroy_parameter_list(v_parametro);
END IF;
v_parametro := create_parameter_list('Lis_Par');
add_parameter(v_parametro, 'par_num_empresa', TEXT_PARAMETER, Name_In('Global.par_num_empresa'));
add_parameter(v_parametro, 'par_num_sucursal', TEXT_PARAMETER, Name_In('Global.par_num_sucursal'));
add_parameter(v_parametro, 'par_fec_sistema', TEXT_PARAMETER, Name_In('Global.par_fec_sistema'));
IF Id_Null(v_parametro) Then
IF Ocultar Then
Call_Form (Forma, HIDE, DO_REPLACE, NO_QUERY_ONLY , FORMS40_NULL_PARAMLIST);
Else
Call_Form (Forma, NO_HIDE, DO_REPLACE, NO_QUERY_ONLY , FORMS40_NULL_PARAMLIST);
End IF;
IF Not Form_Success then
Gen_Mensaje('Error cargando la forma '||Forma);
End IF;
Elsif Not Id_Null(v_parametro) Then
IF Ocultar Then
Call_Form (Forma, HIDE, DO_REPLACE, NO_QUERY_ONLY ,'Lis_Par');
Else
Call_Form (Forma, NO_HIDE, DO_REPLACE, NO_QUERY_ONLY ,'Lis_Par');
End IF;
IF Not Form_Success then
Gen_Mensaje('Error cargando la forma '||Forma);
End IF;
End IF;
END;

Parmetros de la instruccin CALL_FORM


formmodule_name El nombre de la forma debe ser encerrado entre comillas simples.
Tipo de dato: VARCHAR2.

78

display HIDE (The default.) Oracle Forms esconder la forma desde donde se realiza la llamada antes de
presentar la forma que est siendo invocada. NO_HIDE Oracle Forms presentar la forma invocada sin
ocultar la forma que realiza la llamada.
switch_menu NO_REPLACE (The default.) Oracle Forms mantendr el menu por defecto de Oracle en la
forma invocada. DO_REPLACE Oracle Forms sustituir el men del modulo asociado a la forma llamada
por el CALL_FORM, remplazando el menu por defecto por el que se encuentre definido en la forma.
query_mode NO_QUERY_ONLY (El valor por defecto.) las Formas de Oracle ejecutarn la forma indicada
en modo normal, permitindole al usuario final realizar inserciones, actualizaciones, y supresiones de
registros de dentro de la forma llamada. QUERY_ONLY Oracle Forms ejecutar la forma indicada en modo
de solo consulta, permitindole al usuario final consultar registros, pero si la capacidad de insertar,
actualizar o suprimir registros.
paramlist_id El identificador de parmetros que asigna cuando crea la lista de parmetros, puede incluir
una lista de parmetros adicionales como entrada inicial a la forma llamada. El tipo de datos es
PARAMLIST. paramlist_name El nombre que usted dio al objeto de lista de parmetro cuando usted lo
defini. Tipo de datos VARCHAR2.
Mas sobre Formas
CLEAR_FORM: Es un procedimiento que limpia los registros de la forma actual y lleva el punto de entrada
de datos al primer tem del primer bloque. Este procedimiento puede o no recibir parmetros.
BEGIN
Clear_Form(No_Validate);
END;
Fecha del sistema operativo $$DATETIME$$
La variable del sistema $$DATETIME$$ recupera la fecha y hora del sistema operativo. Se lo puede utilizar
para asignar valores por default. Este valor ($$DATETIME$$) es inicializado en el campo Initial Value del
Property Palette para el tem que llevara la fecha/hora del sistema. Luego puede ser asignado a alguna
variable tipo DATE dentro de algn procedimiento o funcin.

Manejo de Sesiones
Forms permite al desarrollador personalizar la ventana de logon a la base de datos desde la aplicacin.
LOGON: Procedimiento LOGON, es utilizado desde el trigger ON-LOGON. Permite la conexin a la base de
datos.
DECLARE
username VARCHAR2(80);
password VARCHAR2(80);
cn_string VARCHAR2(80);
BEGIN
/* Recoje la informacin de la conexin */
Get_Connect_Info(un,pw,cn);

79

/*
**Si no es base de datos Oracle, salir del intento de conexin */
IF :Global.Non_Oracle_Datasource = 'TRUE' THEN
User_Exit('my_logon username='||un||' password='||pw);
ELSE
IF un IS NULL THEN
un:='/';
END IF
IF cn IS NOT NULL THEN
LOGON(un,pw||'@'||cn);
ELSE
LOGON(un,pw);
END IF;
END IF;
END;
LOGOUT: Desconecta al usuario de la base de datos. Se lo programa en el trigger ON-LOGOUT
BEGIN
/* Si no es base de datos Oracle , sale de la conexion */
IF :Global.Non_Oracle_Datasource = 'TRUE' THEN
User_Exit('my_logout');
ELSE
Logout;
END IF;
END;
SYNCHRONIZE: Sincroniza la pantalla con el estado de la forma.
Begin
Synchronize;
Message(Hola);
End;

80

Вам также может понравиться