Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Un Lenguaje de Cuarta Generacion Oracle PDF
Un Lenguaje de Cuarta Generacion Oracle PDF
CUARTA GENERACIN
Primera Edicin
Primera Edicin
2
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
3
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).
4
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.
5
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
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)
6
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:
7
Seleccionar y cambiar al disk 1 y aceptar:
8
Iniciando el contenedor de Oracle para J2EE (OC4J)
9
Para bajar el servicio utilice la opcin
Shutdown OC4J Instante, automticamente se
cierra la ventana de Start OC4J Instance y se
baja el servicio.
Ejemplo: FORMS_PATH=D:\APPS\Curso\lib;
D:\APPS\Curso\bin;
config=sepwin IE=JInitiator
11
Seleccionar el nombre de la instancia de la
base de datos, el cual corresponde a un
nombre de base de datos global.
12
Probar la conexin, para validar que la
configuracin del nuevo servicio de red local
se haya realizado correctamente.
13
Una vez suministrado el usuario y clave
correcta, la prueba de configuracin del nuevo
servicio de red local es exitosa.
14
El asistente le indicar que concluy la
configuracin del servicio.
15
Configuracin del servidor de reportes
16
Para finalizar la creacin del servidor de
reportes, indicamos el nombre con el que
deseamos se visualice el acceso directo.
17
18
Subir los servicios: START
OC4J Instante Servicio de
reportes:
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.
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.
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:
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.
25
2
PROGRAMACION CON FORMS DEVELOPER DE ORACLE
Componentes de la herramienta
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.
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.
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..
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.
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.
MENES Son listas de items que los usuarios utilizan para seleccionar funciones especficas u
operaciones.
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.
29
Al presentarse la pantalla de bienvenida al
asistente de bloques de datos presione el
botn Siguiente para definir el bloque de
datos.
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.
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.
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).
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.
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.
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.
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.
37
Objetos de trabajo
Ventanas
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 maestro-
detalle.
38
En la siguiente imagen
observamos las diferentes
secciones que contiene
un bloque de datos, y las
propiedades que
corresponden a cada
seccin.
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.
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.
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.
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
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.
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:
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
46
Ordenar datos
por columnas
47
Ordenamiento de datos
Query Builder asigna automticamente el alias de las tablas incluidas en la consulta, sin embargo, el
nombre de stas puede ser cambiado mediante el botn (Cambiar nombre de tablas). Seleccione la
tabla a modificar y asigne en el campo Nombre Nuevo el nuevo alias de la tabla.
EMPLOYEES A
EMPLOYEES_A1 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
Para una mejor presentacin del nombre del empleado, realice la siguiente modificacin a la consulta
generada:
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.
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.
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.
52
Creando listas de valores manualmente
Alertas
Una alerta es una ventana modal que despliega un mensaje el cual notifica al operador sobre alguna
condicin de la aplicacin.
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.
When-Database-Record Realiza una accin cuando cambia el estado del registro para
insertar, actualizar, as se indica que el registro ser procesado por
la siguiente operacin COMMIT_FORM.
Disparadores para eventos de interfaz.- Son disparados en los eventos que ocurren en la interfaz de la
forma.
54
When-Window-Closed Inicia una accin cuando un operador cierra una ventana con el
comando Close del administrador de ventana.
Disparadores para el manejo de mensajes de error.- Form Builder enva mensajes de informacin y error
en respuesta a eventos en tiempo de ejecucin.
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 :
Post-Query Realiza una accin despus de recuperar un registro. Se dispara una vez para cada
registro dentro del bloque.
Disparadores transaccionales.- Se disparan en respuesta a varios eventos que ocurren cuando la forma
interacta con la fuente de datos. Los triggers son: On-Delete, On-Insert, On-Lock, On-Logout, On-Update,
55
Post-Database-Commit, Post-Delete, Post-Forms-Commit, Post-Insert, Post-Update, Pre-Commit, Pre-
Delete, Pre-Insert, Pre-Update.
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.
Otros Disparadores
56
Implementacin de Disparadores ms comunes
POST-QUERY
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.
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, -- campo tipo lista de manera: bloque.campo
Codigo In Varchar2, -- Valor del campo a guardar en la lista
Des In Varchar2, -- Descripcin del campo a guardar en la lista.
Tabla In Varchar2, -- Nombre de Tabla de la cual se cargan valores
Where_ In Varchar2 Default Null, -- Condiciones de la consulta.
Order_ In Varchar2 Default Null, -- Ordenamiento de los valores a mostrar en la lista.
GloDef In Varchar2 Default Null -- Global para utilizacin de valor inicial del campo.
) 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;
Delete_Group (RG);
EXCEPTION
When Others Then
Gen_Mensaje('<Gen_Carga_ListItem>..Error interno en rutina de carga de campo lista.. '||SqlErrM);
Raise Form_Trigger_Failure;
END;
58
Continuando con la implementacin del elemento de lista dinmico, es necesario definir la propiedad Tipo
de Elemento en la paleta de propiedades como Elemento de Lista.
Una vez definido el tipo de elemento y debido a que el elemento de lista se llena a partir de los datos en una
tabla, no deben existir valores en la propiedad Elementos en Lista, los cuales son creados por defecto y
deben eliminarse, tanto el Elemento de Lista como el Valor de Elemento de Lista.
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.
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.
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.
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.
62
Tome el siguiente procedimiento e inclyalo como una unidad de programa local a la forma Empledos.fmb,
con el nombre Tree_Carga_Rg.
BEGIN
:Parameter.Par_TotNodos := Get_Group_Row_Count(p_NomRG);
END;
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;
IF p_totelementos = 0
THEN
RETURN;
END IF;
-- 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;
IF p_totelementos = 0
THEN
RETURN;
END IF;
-- 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;
RETURN;
END;
Disparador When-Tree-Node_Selected
Declare
v_RGElementos RecordGroup; -- Rg donde almacena elem seleccionados
v_ColCodigo GroupColumn; -- Columna a consultar posteriormente
v_TotElementos Number;
v_BloqueActual Varchar2(50);
Begin
Tree_Nodos_Seleccionados ('B_TREE_EMPLEADOS.TREE', -- Elemento de tipo arbol
v_RGElementos, -- Grupo de registro donde almacena elem seleccionados
v_ColCodigo, -- Columna a consultar posteriormente
v_TotElementos);
End;
65
Posteriormente a la implementacin correcta del disparador When-Tree-Node_Selected compile y ejecute
la aplicacin. Seleccione uno o varios registros del rbol y observe como simultneamente son consultados
los registros en el bloque de datos Employees.
*/
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');
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;
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:
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;
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;
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.
: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.
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.
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.
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
- 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
- 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:
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.
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);
/* 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.
** 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;
** 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;
ultimo_numero_registro: es el numero del ultimo registro, puede ser un valor esttico o un nmero
retornado de una variable de sistema.
-- Trigger: On-Insert
BEGIN
/*
Chequea la bandera para iniciar la insercion */
IF flag = 'TRUE' THEN
Insert_Record;
END IF;
END;
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.
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;
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;
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.
*/
BEGIN
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;
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.
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;
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
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