Lenguajes de Cuarta Generacion - Oracle Developer Suite 10g

80
UN LENGUAJE DE CUARTA GENERACIÓN Primera Edición ORACLE DEVELOPER SUITE 10G PROGRAMACIÓN BÁSICA EN ORACLE FORMS Y REPORT Lic. Roy Morales Venegas

Transcript of Lenguajes de Cuarta Generacion - Oracle Developer Suite 10g

  • UN LENGUAJE DE CUARTA GENERACIN

    Primera Edicin

    ORACLE DEVELOPER SUITE 10G

    PROGRAMACIN BSICA EN ORACLE FORMS Y REPORT

    Lic. Roy Morales Venegas

  • 2

    UN LENGUAJE DE CUARTA GENERACIN

    Primera Edicin

    ORACLE DEVELOPER SUITE 10G

    PROGRAMACIN BSICA EN ORACLE FORMS Y REPORT

    Lic. Roy Morales Venegas Universidad Magister San Jos COSTA RICA

  • 3

    1............................................................................................................................................................ 4

    INSTALACIN DE ORACLE ....................................................................................................... 4 Instalacin de la Base de datos Oracle 10g Express Edition ....................................................... 4 Conexin con una instancia de base de datos .............................................................................. 4 Instalacin del Developer Suite 10G de Oracle........................................................................... 6 Iniciando el contenedor de Oracle para J2EE (OC4J) ................................................................. 9 Configuracin bsica del servidor de aplicaciones.................................................................... 10 Configuracin del servidor de reportes...................................................................................... 16 Comprobando la configuracin del ambiente de ejecucin....................................................... 22

    2.......................................................................................................................................................... 26 PROGRAMACION CON FORMS DEVELOPER DE ORACLE ............................................... 26

    Componentes de la herramienta................................................................................................. 26 Componentes en la definicin de las formas o pantallas ........................................................... 27 Generacin de otros objetos aplicativos .................................................................................... 28 Componentes en la definicin de mens ................................................................................... 28 Diseo de una pantalla bsica .................................................................................................... 29 Objetos de trabajo ...................................................................................................................... 38 Ventanas..................................................................................................................................... 38 Bloques de datos ........................................................................................................................ 38 Tipos de elementos .................................................................................................................... 41 Listas de Valores........................................................................................................................ 45 Alertas ........................................................................................................................................ 53 Disparadores .............................................................................................................................. 54 Implementacin de Disparadores ms comunes ........................................................................ 57 Bibliotecas PL/SQL ................................................................................................................... 60 Conectar Bibliotecas .................................................................................................................. 61 Unidades de Programa ............................................................................................................... 62 Excepciones, RETURN y EXIT ................................................................................................ 68 Manejo de Errores con ERROR_CODE, ERROR_TEXT ........................................................ 68 Uso de Identificadores ............................................................................................................... 70 Referencia a Objetos de la forma............................................................................................... 70 Referencia indirecta a Objetos con NAME_IN ........................................................................ 71 Cdigo provisto por DEVELOPER........................................................................................... 71 Navegacin entre registros......................................................................................................... 73 Como personalizar la barra de herramientas.............................................................................. 74 Uso de Parmetros ..................................................................................................................... 78 Manejo de Sesiones.................................................................................................................... 79

  • 1

    INSTALACIN DE ORACLE

    Instalacin de la Base de datos Oracle 10g Express Edition

    La base de datos de Oracle es el primer componente que debe ser instalado. Para efectos de ste curso se utilizar la Base de Datos Oracle 10g Express Edition. Una vez instalado ste producto, podr contar con una pgina web local que permite acceder a algunas herramientas administrativas que permiten administrar y gestionar aspectos de almacenamiento, memoria, usuarios y control. Si desea contar con la gua de instalacin de la base de datos puede ingresar al siguiente sitio web de documentacin de Oracle www.oracle.com/pls/xe102/homepage.

    Cada base de datos instalada en un servidor conforma una instancia de Oracle, la cual consume recursos de memoria y disco considerables del servidor donde sta se encuentra instalada, por lo que es recomendable crear una sola instancia por servidor, para que el rendimiento del mismo sea ptimo y resuelva cada peticin en un tiempo prudencial.

    La estructura de una base de datos Oracle est compuesta por archivos de control (Control File), archivos de datos (Data File) y Archivos de Bitcora (Redo Log Files).

    Conexin con una instancia de base de datos

    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.

    Utilizando el gestor Oracle Database Express Edition, ingresaremos a la base de datos,

    autenticndonos mediante el siguiente dilogo de conexin, donde debe ingresar el usuario SYSTEM y la clave de paso. Una vez autenticado el usuario y clave de paso la base de datos le presentar la pgina principal de Oracle Database Express Edition.

    Dilogo de conexin Pgina principal de la base de datos XE

    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

    3. ABRIR CARPETA DISK1

    4. SETUP

    5. Seleccionar siguiente:

    6

    Especificar en el destino: Nombre: oracle10IDS default DevSuiteHome1 Ruta Acceso: C:\APPS\oracle10iDS (ruta definida con el administrador de red)

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

    1.6 Cambiar y seleccionar el disk2 y aceptar:

    7

  • 8

    eleccionar y cambiar al disk 1 y aceptar:

    inalizada la instalacin de Oracle

    S

    F Developer Suite 10g, presionar el botn Salir.

  • Iniciando el contenedor de Oracle para J2EE (OC4J)

    9

    Al instalar ORACLE 10 iDS, Ud encuentra en la carpeta de Forms Developer un componente adicional OC4J; el cual es el servicio que permite que el servidor funcione en ambiente de Aplicaciones Web.

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

    Abrir el Contenedor de Oracle para J2EE

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

    Instancia del OC4J Activa

  • 10

    Para bajar el servicio utilice la opcin

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

    Cuando el servicio se encuentra abajo

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

    Configuracin bsica del servidor de aplicaciones

    Para que la aplicacin de Curso funcione apropiadamente se debe:

    Copiar DEFAULT.ENV como CURSO.ENV y modificar la configuracion ubicados en \forms\server

    Modificar los archivos FORMSWEB.CFG ubicados en \forms\server, donde es la ruta de instalacin del Developer Suite 10g , Ej: C:\oracle10iDS\forms

    ARCHIVO VARIABLES ACCION curso.env FORMS_PATH= Incluir los Path de la aplicacin de curso

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

    Formsweb.cfg Incluir las siguientes lneas al final del archivo

    [curso] separateFrame=True lookandfeel=oracle

  • form=D:\APPS\Curso\bin\acceso.fmx userid=USER/PASSWORD@[String de conexion]

    envfile=curso.env useSDI=yes colorScheme=Teal

    config=sepwin IE=JInitiator

    Creacin del String de Conexin: Ejecutar el asistente de configuracin de Red de oracle:

    11

    Seleccionar Configuracin del nombre del servicio de red local y

    Seleccionar Agregar y siguiente para agregar un nuevo servicio de red

  • Seleccionar el nombre de la instancia de la base de datos, el cual corresponde a un nombre de base de datos global.

    12

    Seleccionar el tipo de protocolo de comunicacin , en este caso y para efectos de ste curso utilizaremos: TCP

    Introducimos la direccin IP donde se ubica el servidor de la base de datos: Ej: 127.0.0.1, direccin que corresponde al LocalHost.

    El puerto a utilizar es el 1521 que corresponde al puerto por defecto.

  • Probar la conexin, para validar que la configuracin del nuevo servicio de red local se haya realizado correctamente.

    El asistente realiza inmediatamente una prueba con el usuario system, con una clave que probablemente no coincide con la que se defini en la instalacin de la base de datos.

    Por lo anterior, se debe seleccionar el botn de Cambiar Conexin para suministrar el usuario y clave de paso correcta para probar la conexin.

    13

  • Una vez suministrado el usuario y clave correcta, la prueba de configuracin del nuevo servicio de red local es exitosa.

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

    Si no se desea configurar mas servicios, seleccionar NO y siguiente.

    14

  • El asistente le indicar que concluy la configuracin del servicio.

    Presione Terminar para salir del asistente de configuracin de Red de Oracle.

    15

  • Configuracin del servidor de reportes Para configurar el servidor de reportes se crea un icono de acceso directo al archivo rwserver,exe ubicado en el directorio \bin de la siguiente manera:

    Botn derecho del Mouse aparece lo siguiente: Configurar la ruta de los reportes del aplicativo Curso

    Una vez localizado el archivo rwserver.exe agregamos en la ubicacin del elemento Server= como se muestra en la siguiente imagen.

    16

  • Para finalizar la creacin del servidor de reportes, indicamos el nombre con el que deseamos se visualice el acceso directo.

    Para que todos los objetos del aplicativo (pantallas, menus, libreras y reportes) puedan ser ubicados por la aplicacin en tiempo de desarrollo (programacin), se configura el REGEDIT de la siguiente forma:

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

    17

  • 18

  • Subir los servicios: START OC4J Instante Servicio de reportes:

    Una vez que se haya establecido el servicio OC4J puede iniciar el servidor de reportes configurado anteriormente.

    Inicialmente el Reports Server es un archivo bloqueado por el Firewall de Windows, debe desbloquearse para que pueda establecerse el servicio de reportes.

    El servicio de reportes est preparado y listo para ser utilizado.

    19

  • De acuerdo a la ruta sealada, abrir con Wordpad el archivo Orion_web.xml y adicionar las siguientes lneas, como recomendacin copiar cualquier lnea en el archivo en una nueva y sustituir los valores correspondientes.

    SALVAR Y SALIR

    20

  • Abrir archivo Registy.dat y adicionar al final de las variables los valores del directorio virtual y la extensin de los conos utilizados en la aplicacin.

    Ejemplo: default.icons.iconpath= icons/ default.icons.iconextension=gif

    21

  • Comprobando la configuracin del ambiente de ejecucin Despus de modificados los archivos de configuracin del ambiente de ejecucin de las aplicaciones que sern desarrolladas durante ste curso, procedemos a ingresar al Forms Builder de Oracle para comprobar la conexin y el ingreso a la pantalla de prueba. Durante el desarrollo de ste curso utilizaremos el usuario HR, el cual corresponde a un pequeo esquema que consta de ocho entidades (tablas) que comprenden la lgica de un sistema de nmina. Conectarse a la base de datos de la siguiente forma: ctrl. + j (tecla j) o ir a la siguiente opcin de men de {Archivo}{Conectar}.

    22

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

    Alter User hr Account Unlock; Alter User hr Identified By hr;

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

  • 23

    Vaya a la siguiente opcin de men del Forms Builder, al ingresar se le presenta la siguiente pantalla:

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

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

  • 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

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

  • 2

    PROGRAMACION CON FORMS DEVELOPER DE ORACLE

    Componentes de la herramienta

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

    EDITOR DE DISEO Es el editor de diseo, aqu se disea el aspecto de los lienzos (Canvas), se

    colocan los distintos objetos para el desarrollo de la aplicacin. Para crear un lienzo se selecciona Lienzos en el Navegador de Objetos, luego se pulsa CREAR (paleta de herramientas) y aparece el Lienzos, luego seleccione el Lienzos que desee crear y pulse F2.

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

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

    26

  • 27

    EDITOR PL/SQL: El editor del PL/SQL permite aadir, modificar, eliminar y compilar cdigo

    PL/SQL, aqu se modifican las estructuras y procedimientos de la base de datos. Para abrir el editor, simplemente pulse doble-clic sobre el procedimiento que desee modificar, trigger a programar.

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

    de aplicaciones y los objetos a reutilizar. PAQUETES INCORPORTADOS Paquetera que Oracle incorpora como parte del producto Forms

    Developer que ofrece diversas utilidades como lectura y escritura sobre archivos texto, operaciones con rboles jerrquicos, funciones de uso estndar, etc..

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

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

    Componentes en la definicin de las formas o pantallas

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

    ALERTAS Una alerta es una ventana modal que despliega un mensaje el cual notifica al operador

    sobre alguna condicin de la aplicacin. Existen 3 tipos de alertas: Parar, Atencin y Nota. BIBLIOTECAS CONECTADAS Son vnculos a las libreras de los archivos de sistema, las cuales

    tienen procedimientos, paquetes y funciones que realizan ciertas operaciones al momento de ejecutar la aplicacin.

    BLOQUES DE DATOS Se refiere a los bloques que agrupan cierta informacin, ya sea tems de

    trabajo, o bloques de datos que representan a campos de una tabla. LIENZOS Es el lienzo donde se disea la forma que ver el usuario final, aqu se insertan los

    tems que contendr la misma. EDITORES Se refiere a los editores personalizados que ORACLE FORMS permite definir. LISTA DE VALORES (LOV`S) Es un objeto que tiene una ventana desplegable que representa

    una estructura de datos lgica. Bsicamente realiza una sola consulta por cada lista de valores. GRUPOS DE OBJETOS Es un contenedor para un grupo de objetos los cuales permiten trabajar

    con herencias entre formularios a travs de atributos y componentes. PARMETROS Son variables del tipo CHAR, NUMBER o DATE que se definen en tiempo de

    diseo y capaces de almacenar valores por defecto y ser alterados en tiempo de ejecucin. MENUS EMERGENTES Son mens anexados a los elementos de la forma y lienzos, permiten a

    los usuarios finales rpidamente acceder a funciones y comandos comunes.

  • 28

    UNIDADES DE PROGRAMA Se almacenan los procedimientos y funciones programadas dentro de la misma forma. Tambin se tienen los procedimientos que utilizan los disparadores (si es que se programara adicionalmente).

    CLASES DE PROPIEDAD Un clase de propiedad es un objeto nombrado que contiene una lista

    de propiedades y sus configuraciones para los elementos y componentes de la aplicacin. GRUPOS DE REGISTRO Son objetos que representan una estructura de datos con el marco

    fila/columna de la base de datos. INFORMES Permite la vinculacin de informes que han sido diseados con el Reports Builder de

    Oracle. Corresponde al nombre del vnculo para ejecutar un informe almacenado fsicamente en el servidor de aplicaciones.

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

    ejecucin. Los atributos definen color, fuente, patrones y la apariencia de un objeto. VENTANAS Es un contenedor para todos los objetos visuales que hacen la aplicacin de FORMS

    BUILDER, puede incluir varios Lienzos. As mismo, una forma puede contener varias Ventanas.

    Generacin de otros objetos aplicativos

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

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

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

    Componentes en la definicin de mens

    BIBLIOTECAS CONECTADAS Las libreras son archivos que contienen un conjunto de procedimientos, funciones o paquetes que pueden ser utilizados por cualquier objeto aplicativo de ORACLE Forms, Reports y Mens.

    Una vez creadas las libreras, estas se relacionan(Atachan) al men; y posteriormente su cdigo PL/SQL puede ser invocado desde triggers, otro cdigo PL/SQL de tem del men y rutinas predefinidas.

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

    GRUPOS DE OBJETOS Un Objeto de Grupo es un contenedor para un grupo de objetos (tems, propiedades, atributos, alertas, disparadores). Se lo define cuando se quiere empaquetar objetos relacionados, los cuales pueden ser copiados o heredados en otro mdulo. (Men Template)

  • UNIDADES DE PROGRAMA Se almacenan los procedimientos o funciones a nivel del men, se los utiliza comnmente para definir programticamente las propiedades del men, inicializacin de variables, definicin de seguridades para los mens y estados para trabajar con los mens, etc.

    CLASES DE PROPIEDAD Una clase de propiedad es un objeto nombrado que contiene una lista

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

    ATRIBUTOS VISUALES Son las fuentes, colores y propiedades patrn que se configuran para

    los objetos del men. Cada objeto de la interfaz tiene un grupo de atributos visuales que determinan su configuracin.

    Diseo de una pantalla bsica

    29

    P ionando para pan

    na vez creado el mdulo de la nueva

    Para definir una pantalla debe crear un nuevo mdulo de pantalla, posicionndose en el componente antallas y prescrear un nuevo mdulo de talla. Upantalla, ubicarse en el componente Bloques de Datos y hacer clic derecho sobre ste componente, al presentarse el men de opciones seleccione Asistente de Bloques de Datos.

  • 30

    l presentarse la pantalla de bienvenida al

    eleccione Tabla o Vista para definir el tipo

    eleccione la tabla y las columnas que se desean utilizar y presentar en el bloque de datos. No

    Aasistente de bloques de datos presione el botn Siguiente para definir el bloque de datos. Sbloque de datos que se desea crear. Snecesariamente 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).

  • eleccione la tabla Departments para crear el

    eleccione todas las columnas disponibles

    Sbloque de datos y presione Aceptar. Smediante el botn con doble signo mayor

    para elegir todas las columnas como ntos de base de datos que conformarn

    el bloque de datos.

    eleme

    tilice el mismo nombre de la tabla para

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

    31

  • 32

    a concluido el diseo del bloque de datos,

    el ejemplo seleccione el primer

    l presentarse la pantalla de bienvenida al

    iseo del Lienzo Son los lienzos de trabajo para realizar el diseo grfico de las formas. Los elementos

    Contenido: Lienzo contenedor, en este se depositarn los objetos del diseo, incluyendo otros

    Apilado: es un lienzo que se coloca sobre el lienzo de contenido, se lo utiliza cuando se requieren

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

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

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

    Hseleccione 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 dbotn. Aasistente de diseo de lienzos presione el botn Siguiente para definir el bloque de datos. Dque lo conforman son los Grficos (Graphics). Existen varios tipos de LienzosCanvas.

    lienzos de tipo apilados.

    lienzos sobrepuestos para continuar cierto ingreso / presentacin de la informacin (opcional).

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

    orientacin horizontal.

    orientacin vertical.

  • eleccione Nuevo Lienzo para crear el lienzo

    i selecciona un lienzo de tipo separador, debe

    eleccione el bloque de datos y los elementos de

    grese el nombre de la etiqueta que desea que

    Sdonde 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. Sseleccionar las pginas donde desea disear los elementos del bloque de datos. Sste que desea presentar en el lienzo.

    33

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

  • 34

    eleccione el estilo de diseo que desea para la

    i se desea registrar informacin muy completa

    grese el ttulo que desea para el marco que

    esea mostrar

    a ver la barra de desplazamiento,

    l asistente diseo ha finalizado el diseo del

    l asistente de diseo mostrar el marco nuevo

    Spantalla, el cual debe ser elegido segn la presentacin que se quiera dar a los datos. Sen un solo registro es conveniente seleccionar Pantalla, si la informacin a ingresar es masiva o es agrupada por otro elemento se debe seleccionar Tabular. Inencierra los elementos en el lienzo. Indique el nmero de registros que den el lienzo. Usualmente si seleccion el estilo del lienzo de tipo Pantalla se mostrar un solo registro, si es tabular indique la cantidad de registros que desea visualizar y la distancia entre cada registro. Indique si desela cual puede ser vertical u horizontal segn el sentido de orientacin de los datos el bloque. Elienzo. Para crear el marco y disear los elementos seleccionados presione el botn Terminar. Een el Editor de Diseo. Puede ajustar el diseo en el futuro utilizando nuevamente el asistente de diseo, o utilizando la paleta de propiedades para modificar propiedades especficas del marco, lienzo o de cualquier elemento dentro de ste.

  • sta es la pantalla resultante del diseo

    sta aplicacin esta preparada para

    i el servicio del contenedor OC4J est

    a pantalla que se presenta inicialmente

    Eanterior. El diseo es bsico, sin embargo puede ajustarse a medida que se identifican los elementos de ajuste necesarios. Eejecutarse. Puede presionar el botn Ejecutar Pantalla para ejecutarla, ste paso abrir en forma automtica el explorador de Internet y presentar en modo de ejecucin la aplicacin diseada.

    35

    Slevantado puede ejecutarse la aplicacin diseada, sino levante el servicio tal y como se explic anteriormente. Lest en modo de insercin de datos, si se desea consultar la informacin debe presionar los botones de Introducir consulta y Ejecutar consulta.

  • 36

    na vez consultados los datos, stos Upueden modificarse y almacenarse presionando el botn Guardar . Modifique el nombre del departamento, luego nos pasamos a otro registro presionando el botn o la tecla

    gde direccin con la flecha sin guardar el cambio, modificamos otra descripcin y luego uardamos 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.

  • 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

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

  • 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.

    38

    Cuando se crea una ventana, se especifica su tipo configurando la propiedad Window Style, existen 2 estilos :

    Document: Son ventanas que tpicamente despliegan el canvas principal y reas de trabajo de la aplicacin donde se realiza la mayor parte de interaccin entrada / salida con el usuario final.

    Dialog: Son ventanas flotantes, contenedores usados para dilogos modales que esperan respuesta inmediata.

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

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

  • 39

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

    Nombre: Nombre interno del objeto. Comentarios: Informacin general que usted desea especificar acerca del bloque de datos creado.

    Navegacin

    Estilo de navegacin: Como procesar el elemento siguiente o anterior cuando el foco es el primer o ltimo elemento navegable dentro del bloque de datos.

    Registros

    Consultar todos los registros: Especifica si desea recupera todos los registros que coinciden con los criterios de consulta en el bloque de datos. Esta propiedad tiene por defecto el valor NO, para utilizar elementos calculados de tipo resumen en un bloque, se debe definir sta propiedad en SI.

    Grupo de atributos visuales del registro actual: Permite definir atributos visuales a nivel de forma, bloque de datos y elementos de un bloque de datos, o bien, para formas con varios niveles de bloques de datos, permite la combinacin de atributos visuales para cada bloque o elemento de un bloque, otorgando una apariencia visual independiente.

    Base de Datos

    Bloque de datos de base de datos: Indica si

  • 40

    el bloque de datos se basa en un objeto de base de datos (SI), o si se utiliza como un bloque de trabajo temporal (NO).

    Consulta permitida: Define si las aplicaciones pueden ejecutar una consulta en el bloque de datos. Insercin permitida: Define si las aplicaciones pueden insertar registros en el bloque de datos. Actualizacin permitida: Define si las aplicaciones pueden actualizar registros en el bloque de datos. Supresin permitida: Define si las aplicaciones pueden suprimir registros en el bloque de datos. Alias: Nombre del Alias asociado al Origen/Destino de datos. Clusula WHERE: Clusula estndar asociada por defecto al bloque de datos, en la cual se define

    especficamente las sentencias de condicin que limita la consulta de registros en el bloque. Clsula ORDER BY: Clusula estandar asociada por defecto al bloque de datos, en la cual se define el

    orden de visualizacin de los registros recuperados en una consulta. Puede utilizar orden ascendente(ASC) o descendente(DESC) despus de cada columna. Ejemplo Location_Id Desc, Department_Name Asc

    Barra de desplazamiento

    Mostrar barra de desplazamiento: Desea visualizar la barra de desplazamiento en el lienzo. Lienzo de barra de desplazamiento: Especifica el lienzo donde ser visualizada la barra de

    desplazamiento. Pgina de separador de la barra de desplazamiento: Especifica la pgina donde ser visualizada la

    barra de desplazamiento en caso de que se utilicen lienzos de tipo separador. Tipos de bloques de datos De acuerdo a la necesidad de la aplicacin y para optimizar el desarrollo de la misma se tienen diferentes tipo de bloques. Bloque de barra de herramientas Es un bloque donde se aaden los objetos que pertenecern al toolbar (barra de herramientas) de la aplicacin, regularmente son botones tpicos de edicin, impresin, grabar, hacia delante, hacia atrs, los cuales son programados para que realicen las funciones que les corresponde. Este bloque no pertenece a la base de datos, por lo tanto no se deben parametrizar las propiedades de base de datos y registros en el property palette. Bloques de trabajo Es un bloque utilizado por los programadores, donde se manejan valores necesarios para la aplicacin pero que no necesitan ser vistos por el usuario final, se los esconde al no definir en que lienzo debe mostrase. Regularmente tenemos datos de consultas generadas por PL/SQL cargadas en estos elementos del bloque de trabajo. Este tipo de bloque puede estar enlazado con alguna columna de la base de datos de la cual se recoja informacin, otras veces simplemente los elementos del bloque de trabajo son repositorio transitorio hasta realizar algn proceso. Bloques de informacin Son los bloques presentados al usuario final, aqu se permiten realizar consultas, ingresar, actualizar o eliminar datos. Dependiendo de la funcionalidad pueden estar enlazados a tablas o procedimientos almacenados, estos ltimos trabajan con columnas de las tablas del mdulo.

  • 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

  • 42

    Casilla de control Son casilleros de seleccin mltiple, los cuales pueden ser configurados en tiempo de diseo o por programacin.

    Elemento de lista

    Es una lista de elementos de texto que pueden ser desplegados de alguna forma: poplist, tlist o combo box. Estas listas muestran nmeros fijos de elementos, estos son cadenas de texto de hasta 30 caracteres. En tiempo de ejecucin, programticamente pueden ser evaluados o eliminados.

    Creacin de elementos de trabajo Creando el bloque de datos Employees relacionado con el bloque Departments, agregar en el los siguientes elementos en el bloque Employees luego de que ste es diseado:

    L_Total_Linea L_Total_Salario L_Total_General

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

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

    43

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

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

    El elemento debe residir en un bloque de datos donde la propiedad Consultar todos los registros=SI, o Pre-Calcular=SI.

  • 44

    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

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

    select a.employee_id, a.first_name||' '||a.last_name nombre_empleado from employees a where a.employee_id in (select b.manager_id from employees b where a.employee_id = b.manager_id )

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

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

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

    45

  • Creando la lista de valores con el asistente de diseo Seleccione el componente Listas de Valores en el navegador de objetos, presione clic derecho sobre el componente y elija Asistente de Listas de Valores para iniciar la creacin de la lista de valores. La lista de valores obtiene los datos de los grupos de registros, stos ltimos se pueden definir con consultas SQL o introduciendo una lista de valores estticos. Si el grupo de registros existe, seleccinelo de la lista de Grupo de Registros Existente, si la lista de valor es completamente nueva, seleccione Nuevo Grupo de Registros Basado en una Consulta y presione el botn Siguiente. Los grupos de registros pueden basarse en consultas SQL. Si desea introducir o modificar una consulta que es utilizada por un grupo de registros de la lista de valores, puede hacerlo a partir de la creacin de una nueva consulta o su importacin desde un archivo del tipo SQL almacenado. Si desea obtener ayuda al crear la consulta seleccione Crear Consulta SQL , Oracle le permite utilizar Query Builder de Oracle Developer, donde podr seleccionar las tablas y columnas que desee presentar y relacionar.

    46

  • 47

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

    Ordenar datos por columnas

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

  • Ordenamiento de datos

    Mediante el cono puede establecer el orden de 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 para establecer el grupo de columnas ordenadas. Cambiar Nombre de Tablas 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

    Los datos de presentaran en cada caso como se muestra a continuacin: Para una mejor presentacin del nombre del empleado, realice la siguiente modificacin a la consulta generada:

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

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

    49

  • Una vez que la consulta es definida puede incluir algunas o todas las columnas del grupo de registros en la lista de valores. Seleccione de la lista de Columnas del Grupo de Registros la columna(s) que desea visualizar en la lista de valores y

    presione el botn para pasar dichas columnas como parte de la lista de Columnas de la Lista de Valores.

    Presione el botn para pasar a la siguiente pantalla. Nuevamente otra ventana le indica que etiquetas llevaran las columnas o si desea usar el default.

    50

    En la parte inferior de la ventana hay un botn Consultar elemento de retorno, el cual le permite definir cuales sern los elementos que recibirn a cada columna de la consulta. Estos objetos pueden ser elementos de texto o elementos mostrados. Seleccione el elemento del bloque de datos que recibir el valor de la columna que el usuario elige de la lista de valores en tiempo de ejecucin. Avance a la siguiente pantalla presionando Siguiente >

  • 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

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

  • 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

    Asigne a alguno de stos elementos o a todos la lista de valores, con el fin de que el usuario presionando la combinacin de teclas CTRL+L pueda levantar la lista de valores. Importante: los elementos deben ser de tipo Elemento de Texto, en ste caso Manager_Id es elemento de texto y L_Manager_Name es elemento mostrado por lo tanto ste ltimo al ser un elemento que nunca podr tener el foco de edicin, no tendr sentido asignarle la lista de valores. Una vez asignada la lista de valores al elemento presione el botn Siguiente > El asistente ha completado la definicin de la lista

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

  • Creando listas de valores manualmente Creacin de Grupo de Registros

    Se abre la forma a la cual se le aadir el Grupo de Registros. Luego se da clic en el componente de Grupo de Registros en el navegador de objetos y en la

    paleta de herramientas escoja Crear (+) Aparece una ventana para la creacin de la consulta o indicar que se trabajara con valores

    estticos. Escoja la opcin que necesite. Clic en aceptar. Aparecer el nuevo objeto Record Group.

    Creacin de la Lista de Valores

    Previamente creado el grupo de registros se da clic en el componente Lista de Valores del navegador de objetos y en la paleta de herramientas escoja Crear (+)

    Aparece una ventana la cual indica el modo de creacin (manual o Asistente). Escoja Manual. Presione Aceptar.

    Luego dirjase a la paleta de propiedades de la nueva lista de valores. Defina cual Grupo de Registros se utilizar en la propiedad Grupo de Registros. Luego en la propiedad Propiedades de Correspondencia de Columnas, indique cuales columnas

    sern retornadas a los elementos del bloque de datos. Finalizado esto debe indicar al botn que disparara la lista de valores, cual lista de valores debe

    ejecutarse (Ver cdigo en la parte superior). Si fuera un text item quien dispara la lista de valores, se define en la propiedad Lista de Valores del elemento de texto cual Lista de Valores se invocar.

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

    53

    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.

  • 54

    Disparadores Los disparadores responden a eventos que se ejecutan en una aplicacin en tiempo de ejecucin, con el objetivo de ejecutar ciertas rutinas, dependiendo del procedimiento invocado. Explicacin principales disparadores definidos

    Existe divisin de categoras funcionales para los disparadores: Disparadores para procesamiento de bloques Disparadores para eventos de interfaz Disparadores para maestro-detalle Disparadores para el manejo de mensajes de error Disparadores de navegacin Disparadores para tiempo de consulta Disparadores transaccionales Disparadores de validacin

    Disparadores para procesamiento de bloques .- Estos triggers se disparan en respuesta a eventos relacionados en la administracin de un registro en un bloque. When-Create-Record Realiza una accin cuando se intenta crear un nuevo registro en un

    bloque. When-Clear-Block Realiza una accin cuando se elimina el registro actual. Remueve

    todos los registros del bloque. When-Database-Record Realiza una accin cuando cambia el estado del registro para

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

    When-Remove-Record Realiza una accin cuando un registro es limpiado o eliminado. Disparadores para eventos de interfaz.- Son disparados en los eventos que ocurren en la interfaz de la forma. When-Button-Pressed Inicia una accin cuando un operador selecciona un botn

    (mouse/tecla). Key-Commit Se ejecuta cuando se realiza la accin COMMIT, con la tecla F10. Key-Entqry Inicia accin cuando se entra el modo de consulta (tecla F7). Key-Exeqry Inicia accin cuando se ejecuta la consulta (tecla F8). When-Timer-Expired Inicia una accin cuando expira el timer programtico. When-Window-Activated Inicia una accin cuando un operador o aplicacin activa una

    ventana.

  • 55

    When-Window-Closed Inicia una accin cuando un operador cierra una ventana con el comando Close del administrador de ventana.

    Disparadores Maestro-Detalle .- Son generados automticamente al definirse una relacin maestro-detalle entre bloques. Estos obligan la coordinacin entre registros en un bloque detalle y en el registro maestro del bloque maestro. On-Check-Delete-Master Se dispara cuando se intenta eliminar un registro en un bloque que es un bloque maestro en una relacin maestro-detalle. On-Clear-Details Se dispara cuando se necesitan limpiar registros en un bloque que es un bloque detalle en una relacin maestro-detalle. Disparadores para el manejo de mensajes de error.- Form Builder enva mensajes de informacin y error en respuesta a eventos en tiempo de ejecucin. On-Error Reemplaza un mensaje de error default con un mensaje de error personalizado. Disparadores de navegacin.- Responden a eventos de navegacin. Por ejemplo cuando el usuario da un clic en un tem de texto en otro bloque, un disparador de navegacin se dispara y Forms mueve el foco de ingreso desde el tem actual al tem objetivo. Pueden dispararse en respuesta a eventos internos de navegacin que ocurren durante el procesamiento de la forma. Se subdividen en 2 categoras: Pre-trigger y Post-trigger. Listado de Disparadores de Navegacin: Pre-Block, Pre-Record, Pre-Text-Item, Post-Text-Item, Post-Record, Post-Block. Pre-Form Se dispara durante el evento de Entrar a la forma, al inicio de la forma. Post-Form Realiza una accin cuando Forms sale de la forma. Adems, existen los disparadores When-New-Instance-Triggers que se disparan al final de la secuencia de navegacin que ubica el foco en un tem diferente. Estos son: When-New-Block-Instance, When-New-Record-Instance, When-New-Item-Instance. When-New-Form-Instance Realiza una accin al iniciar la forma. Se ejecuta despus del

    disparador Pre-Form. Disparadores para tiempo de consulta.- Son disparados antes y justo despus que el usuario o la aplicacin ejecuta una consulta en un bloque. Estos disparadores son : Pre-Query Valida el criterio de consulta actual o provee programticamente criterio adicional. Post-Query Realiza una accin despus de recuperar un registro. Se dispara una vez para cada

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

  • 56

    Post-Database-Commit, Post-Delete, Post-Forms-Commit, Post-Insert, Post-Update, Pre-Commit, Pre-Delete, Pre-Insert, Pre-Update. On-Logon Se dispara para cada logon a la base de datos. Disparadores de validacin.- Se disparan cuando Form Builder valida datos en un tem o registro. La validacin la chequea durante la navegacin que ocurre por control de programacin, procesamiento, etc. When-Validate-Item Se dispara en la ultima parte de la validacin del tem para los

    tems con el estado de validacin Nuevo o Modificado. When-Validate-Record Se dispara durante el proceso de validacin de registros, en la

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

    Otros Disparadores When-Button-Pressed Se dispara cuando se selecciona un botn al dar un clic o usar el

    teclado. Es definido a nivel de forma, bloque o tem. When-Mouse-Click Se dispara despus de hacer click con el ratn, si ocurren estos

    eventos: click en lienzos o elementos de la forma. When-Mouse-Enter Se dispara cuando el mouse entra a un tem o canvas. When-Mouse-Leave Se dispara cuando el mouse sale de un tem o canvas.

  • Implementacin de Disparadores ms comunes POST-QUERY

    Se implement el disparador PORT-QUERY mediante un cursor el cual obtiene el nombre del jefe, consultando el cdigo del empleado en la tabla EMPLOYEES y que corresponda al cdigo de jefe del registro actual en el bloque de departamentos. Recordemos que ste disparador se ejecuta luego de realizada la consulta a la base de datos y presentados lo datos en el bloque. Este disparador se ejecuta para todos los registros recuperados y visualizados en el bloque de datos.

    WHEN-VALIDATE-ITEM

    57

    El When-Validate-Item es un disparador que podra implementarse igual que el POST-QUERY para la recuperacin y validacin del dato, incorporando el comando Raise Form_Trigger_Failure dentro de la validacin de localizacin del registro. Sin embargo, para implementar un ejemplo diferente, se realiza la validacin haciendo una consulta directa y utilizando el manejo de excepciones para identificar si se logr o no encontrar el registro. En ste caso si el registro es encontrado lo asigna directamente al elemento L_Manager_Name, el registro no es encontrado, el proceso se va a la seccin

    de excepciones inmediantamente, ejecutando el cdigo dentro de la excepcin WHEN NO_DATA_FOUND, asignando el cdigo no existe al elemento L_Manager_Name. En caso de presentarse cualquier otro error se ejecuta la excepcin WHEN OTHERS, la cual mostrara el mensaje de error de SQL, el cual no permitira identificar con precisin el error presentado. Recordemos que ste disparador se ejecuta luego de realizada cualquier modificacin de informacin en un elemento, cuando el bloque de datos se encuentra en estado NEW.

  • 58

    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; 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('..Error interno en rutina de carga de campo lista.. '||SqlErrM); Raise Form_Trigger_Failure; END;

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

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

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

    59

  • Bibliotecas PL/SQL Es una coleccin de subprogramas, incluyendo procedimientos, funciones y paquetes, los cuales pueden compartirse entre distintas aplicaciones. Esto ayuda a la estandarizacin del desarrollo. Crear una librera nueva Para crear una Biblioteca, debe ubicarse en el componente Bibliotecas PL/SQL, y presionar el botn crear en el panel vertical, seguidamente Forms crear el objeto en sta seccin de componentes con un nombre lgico temporal, el cual ser almacenado con el nombre que se le defina. Una vez almacenada la biblioteca en disco, podemos incorporarle funciones, procedimientos y paquetes, tal y como se muestra en la siguiente figura.

    60

  • 61

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

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

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

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

  • 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

    ree el bloque de datos manualmente con el nombre

    Para la construccin de un rbol jerrquico a partir de una tabla se debe respetar la siguiente estructura:

    1. Valores numricos 0 y 1 que indican si el rbol se presenta con todos sus nodos colapsados o expandidos respectivamente.

    2. Nivel de jerrqua del nodo en el rbol. 3. Descripcin que ser mostrada en el rbol. 4. cono con que se desea visualizar un nivel o

    jerarqua de nodos. 5. Valor al que responde o que encapsula el nodo.

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

  • Tome el siguiente procedimiento e inclyalo como una unidad de programa local a la forma Empledos.fmb, con el nombre Tree_Carga_Rg. PROCEDURE TREE_CARGA_RG (p_Campo In Varchar2, -- Item tipo rbol p_NomRG In Varchar2 -- Nombre del Record Group asociado ) IS v_Status Number := 0; -- Almacena resultado de ejecucin de RG. RG RecordGroup; -- Record group de cuentas contables definidas. BEGIN -- Asigna el Record Group al campo determinado FTree.Set_Tree_Property(p_Campo,FTree.Record_Group,p_NomRG); -- Asigna el cursor como ocupado Set_Application_Property(Cursor_Style,'Busy'); -- Ejecuta el record group con el cual se cargar el rbol v_Status := Populate_Group(p_NomRG); :Parameter.Par_TotNodos := Get_Group_Row_Count(p_NomRG); -- Carga elementos en el rbol FTree.Populate_Tree(p_Campo); -- Restaura el estilo del mouse para indica que ya finaliz el proceso Set_Application_Property(Cursor_Style,'Default'); -- Establece el primer elemento del rbol como Seleccionado FTree.Set_Tree_Selection(p_Campo, 1, FTree.Select_On); END;

    Una vez incluido el procedimiento en la forma, incluya en el disparador When-New-Form-Instance el llamado al procedimiento Tree_Carga_Rg para que sea cargado el elemento de tipo rbol Jerrquico del bloque B_Tree_Empleados y puedan ser visualizados los registros de la tabla Employees segn la jerarqua de jefatura asignada a cada empleado, segn la consulta implementada en el grupo de registros GR_TREE_EMPLEADOS. El procedimiento Tree_Carga_Rg cargar los registros recuperados en el grupo de registros GR_TREE_EMPLEADOS en el elemento de tipo rbol B_Tree_Empleados.Tree, presentndolo como se muestra en la sta figura.

    63

  • 64

    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

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

    Seguidamente incluya en el elemento B_Tree_Empleados.Tree el disparador When-Tree-Node_Selected e ingrese el siguiente cdigo, el cual ser ejecutado cada vez que se seleccione uno o ms nodos del rbol. Disparador When-Tree-Node_Selected Declare v_RGElementos RecordGroup; -- 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

  • 66

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

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

  • -- Determina si el registro en el cual se va a posicionar es mayor que el nmero -- de registros traido por la consulta, si lo es se queda en el ltimo registro LAST_RECORD; IF p_num_registro
  • 68

    Excepciones, RETURN y EXIT En Developer Forms se manejan las excepciones que son situaciones las cuales generan error y no son manejadas por Oracle, entonces la aplicacin le indica al usuario la anomala y el programa muestra un mensaje de error o precaucin. Las excepciones se definen en la parte final del procedimiento o funcin, dentro de ella no se escribe begin o end para que realice la tarea que se especificar. EXCEPTION

    Nombre de la excepcin THEN /* indicaciones a realizar cuando se dispare la excepcin */

    Ejemplo: Function Gen_EjecutarSql ( Instruccin in varchar2, Err out varchar2 ) Return boolean IS BEGIN if Form_Success then Return (true); else Err := DBMS_Error_Text; Return (false); end if; EXCEPTION when OTHERS then Err := DBMS_Error_Text||' / '||SqlErrM; Return (false); END;

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

  • 69

    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.

  • 70

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

    filesystem o base de datos. - GLOBAL: Estas variables tienen declaracin implcita, es decir que no necesitan ser declaradas,

    simplemente cuando se necesita se las crea. Son tipo varchar.

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

    : nombre_objeto (podra ser un tem) : nombre_bloque.nombre_objeto (formato bloque.item)

  • 71

    Referencia indirecta a Objetos con NAME_IN

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

    Cdigo provisto por DEVELOPER - Regedit : Cuando se necesitan especificar ciertos valores que dependen de variables de entorno, ya

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

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

  • 72

    - 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 c