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
UN LENGUAJE DE
CUARTA GENERACIN
Primera Edicin
ORACLE DEVELOPER SUITE 10G
PROGRAMACIN BSICA EN ORACLE FORMS Y REPORT
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).
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
Especificar en el destino:
Nombre:
oracle10IDS
default
DevSuiteHome1
Ruta Acceso: C:\APPS\oracle10iDS (ruta
definida con el administrador de red)
ARCHIVO
curso.env
VARIABLES
FORMS_PATH=
ACCION
Incluir los Path de la aplicacin de curso
Ejemplo: FORMS_PATH=D:\APPS\Curso\lib;
D:\APPS\Curso\bin;
Formsweb.cfg
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
11
que
12
13
14
15
16
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
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
Una vez ejecutadas las instrucciones anteriores intente conectarse nuevamente con el Forms Builder, ste
paso debera de ejecutarse sin ningn problema.
22
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
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
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.
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..
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
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.
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).
28
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
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
31
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
33
34
35
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
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 :
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.
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.
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.
42
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
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
)
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
46
Ordenar datos
por columnas
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.
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
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
para
50
pantalla
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.
52
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
When-Remove-Record
Disparadores para eventos de interfaz.- Son disparados en los eventos que ocurren en la interfaz de la
forma.
When-Button-Pressed
Key-Commit
Key-Entqry
Key-Exeqry
When-Timer-Expired
When-Window-Activated
54
When-Window-Closed
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
Post-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
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
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
Otros Disparadores
When-Button-Pressed
When-Mouse-Click
When-Mouse-Enter
When-Mouse-Leave
56
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;
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.
Crear una librera nueva
60
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.
Implementacin de un rbol jerrquico
62
Tome el siguiente procedimiento e inclyalo como una unidad de programa local a la forma Empledos.fmb,
con el nombre Tree_Carga_Rg.
PROCEDURE TREE_CARGA_RG
v_Status Number := 0;
RG
RecordGroup;
BEGIN
-- Asigna el Record Group al campo determinado
FTree.Set_Tree_Property(p_Campo,FTree.Record_Group,p_NomRG);
-- Asigna el cursor como ocupado
Set_Application_Property(Cursor_Style,'Busy');
-- Ejecuta el record group con el cual se cargar el rbol
v_Status := Populate_Group(p_NomRG);
:Parameter.Par_TotNodos := Get_Group_Row_Count(p_NomRG);
-- Carga elementos en el rbol
FTree.Populate_Tree(p_Campo);
-- Restaura el estilo del mouse para indica que ya finaliz el proceso
Set_Application_Property(Cursor_Style,'Default');
-- Establece el primer elemento del rbol como Seleccionado
FTree.Set_Tree_Selection(p_Campo, 1, FTree.Select_On);
END;
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;
Begin
Tree_Nodos_Seleccionados ('B_TREE_EMPLEADOS.TREE',
v_RGElementos,
v_ColCodigo,
v_TotElementos);
End;
65
-- ejecuta la consulta
66
67
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.
70
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);
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
*/
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.
74
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;
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;
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