Anda di halaman 1dari 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; Incluir las siguientes lneas al final del archivo

Formsweb.cfg

[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 When-Clear-Block When-Database-Record Realiza una accin cuando se intenta crear un nuevo registro en un bloque. Realiza una accin cuando se elimina el registro actual. Remueve todos los registros del bloque. 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. Realiza una accin cuando un registro es limpiado o eliminado.

When-Remove-Record

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 Key-Entqry Key-Exeqry When-Timer-Expired When-Window-Activated

Se ejecuta cuando se realiza la accin COMMIT, con la tecla F10. Inicia accin cuando se entra el modo de consulta (tecla F7). Inicia accin cuando se ejecuta la consulta (tecla F8). Inicia una accin cuando expira el timer programtico. 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 Post-Form Se dispara durante el evento de Entrar a la forma, al inicio de la forma. 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 Post-Query Valida el criterio de consulta actual o provee programticamente criterio adicional. 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 When-Validate-Record Se dispara en la ultima parte de la validacin del tem para los tems con el estado de validacin Nuevo o Modificado. 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 When-Mouse-Click When-Mouse-Enter When-Mouse-Leave Se dispara cuando se selecciona un botn al dar un clic o usar el teclado. Es definido a nivel de forma, bloque o tem. Se dispara despus de hacer click con el ratn, si ocurren estos eventos: click en lienzos o elementos de la forma. Se dispara cuando el mouse entra a un tem o canvas. 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 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; -- 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.

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 (p_Campo In Varchar2, -- Item tipo rbol p_NomRG In Varchar2 -- Nombre del Record Group asociado ) IS

v_Status Number := 0; RG RecordGroup; BEGIN

-- Almacena resultado de ejecucin de RG. -- Record group de cuentas contables definidas.

-- 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); Begin Tree_Nodos_Seleccionados ('B_TREE_EMPLEADOS.TREE', v_RGElementos, v_ColCodigo, v_TotElementos); End; -- Elemento de tipo arbol -- Grupo de registro donde almacena elem seleccionados -- Columna a consultar posteriormente -- Rg donde almacena elem seleccionados -- Columna a consultar posteriormente

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); VARCHAR2);

SET_ITEM_PROPERTY (item_name VARCHAR2, property NUMBER, value

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