You are on page 1of 72

FORMS v6 y v10

Versin 1.0

rea de Aplicaciones Especiales y Arquitectura


Software

Forms v6 y v10
Manual del desarrollador
Hoja de Control

Ttulo

Forms v6 y v10

Documento de Referencia
Responsable

rea de Aplicaciones Especiales y Arquitectura Software

Versin

1.0

Fecha Versin

28/01/2013

Registro de Cambios
Versin
1.0

Causa del Cambio


Versin inicial del documento
a partir del documento Todo
Forms 10g

Responsable del Cambio

Fecha del Cambio

rea de Integracin y Arquitectura


de Aplicaciones

1.1

Pgina 2 de 72

28/01/2013

Forms v6 y v10
Manual del desarrollador

ndice

1.

INTRODUCCIN ...................................................................................................................................................5
1.1
1.2

AUDIENCIA OBJETIVO .................................................................................................................................5


CONOCIMIENTOS PREVIOS ........................................................................................................................5

NORMATIVA Y ESTANDARES ..........................................................................................................................5

2.1

SENTENCIAS DDL ............................................................................................................................................5

2.2

ESTANDAR GENERAL DE FUENTES Y COLORES ..................................................................................5

2.3

DOCUMENTACIN ..........................................................................................................................................6

2.4

NOMENCLATURA ESTANDAR DE DIRECTORIOS Y FICHEROS ........................................................6

ARQUITECTURA FISICA ...................................................................................................................................6

3.1

FORMS V6 ..........................................................................................................................................................6

3.2

FORMS V10 ........................................................................................................................................................6

LIBRERIAS .............................................................................................................................................................7

4.1

ICM_OBJ.OLB ...................................................................................................................................................7

4.2

ICM_PLL.PLL ....................................................................................................................................................8

4.2.1
5

ADAPTACIN DEL PROCEDIMIENTO MENSAJE DE LA LIBRERA ICM_PLL ................................9

TEMPLATES (PLANTILLAS) ........................................................................................................................... 12


5.1
5.2
5.3
5.4
5.5
5.6

APL_BASE ..................................................................................................................................................... 13
MENU_BASE ................................................................................................................................................. 14
FORM_BASE ................................................................................................................................................. 15
F60_MANT1 ................................................................................................................................................... 16
F60_MANT2 ................................................................................................................................................... 18
LOV_GEN ...................................................................................................................................................... 19

FICHERO INI ....................................................................................................................................................... 21

SOLUCIONES....................................................................................................................................................... 22
7.1
7.2
7.3
7.3.1
7.3.2
7.3.3
7.3.4
7.3.5
7.3.6
7.3.7
7.4
7.5
7.5.1
7.5.2
7.5.3
7.6
7.6.1
7.6.2
7.7
7.8
7.8.1

CALENDARIO ............................................................................................................................................... 22
FUSION DE DOCUMENTOS ........................................................................................................................ 23
TRATAMIENTO DE CAMPOS LOB ............................................................................................................ 27
CARGA DE ARCHIVOS TEXTO A CLOB ............................................................................................... 27
DESCARGA Y VISUALIZACION DE CLOB........................................................................................... 29
CARGA DE ARCHIVO DE TEXTO A CAMPO CLOB Y CAMPO BLOB .............................................................. 32
CARGA DE ARCHIVOS BINARIOS A BLOB ......................................................................................... 34
CARGA DE ARCHIVOS BINARIOS A BLOB DESDE URL ................................................................... 36
DESCARGA Y VISUALIZACION DE BLOB........................................................................................... 38
FUNCIONES GAT_FUNC_CARGA_BLOB Y GAT_FUNC_CARGA_CLOB ........................................... 41
ESCANEO DE DOCUMENTOS .................................................................................................................... 45
ENVIO DE CORREO ..................................................................................................................................... 46
ENVO DE CORREO DESDE FORMS V4.5 (UNIX) ............................................................................................ 46
ENVO DE CORREO DESDE FORMS6I -SIN ARCHIVOS ADJUNTOS- ................................................................... 47
ENVO DE CORREO DESDE FORMS 6I -CON ARCHIVOS ADJUNTOS .................................................................. 47
INFORMES CRYSTAL REPORTS................................................................................................................ 51
OBTENER EL TOKEN DE BUSINESS OBJECTS.................................................................................................. 51
EJECUCIN DE INFORME CRYSTAL REPORT ................................................................................................. 51
ICONOS .......................................................................................................................................................... 52
PROCESOS BATCH ...................................................................................................................................... 55
EJECUCION DE TRABAJOS .................................................................................................................... 56

Pgina 3 de 72

Forms v6 y v10
Manual del desarrollador
7.8.2
7.8.3

VISUALIZACION DE TRABAJOS ........................................................................................................... 59


VISUALIZACION DE TRABAJOS EN UNIX .......................................................................................... 60

GESTION DE PERFILES .................................................................................................................................... 62

REPORT BUILDER ............................................................................................................................................. 63

10

WEBS DE LA APLICACIN.......................................................................................................................... 63

10.1

WEB PARA ALOJAR PGINA ESTTICA INICIAL DE LA APLICACIN ........................................ 64

10.1.1
10.1.2
10.2

FRAMES ..................................................................................................................................................... 64
FRAME OCULTO ...................................................................................................................................... 67

WEB PARA AYUDA ........................................................................................................................................ 68

10.2.1

VISUALIZAR LA AYUDA ........................................................................................................................ 68

11

UTILIDADES .................................................................................................................................................... 69

11.1

CONV_F10G ..................................................................................................................................................... 69

11.2
11.3
11.4
12

COMP_F6 ....................................................................................................................................................... 70
CONTROL FICHEROS ................................................................................................................................... 70
COMPLINUX ................................................................................................................................................. 70
MIGRACION DE APLICACIN DE FORMS V6 A FORMS V10 ............................................................ 71

Pgina 4 de 72

Forms v6 y v10
Manual del desarrollador
1. INTRODUCCIN
Documentacin acerca de la utilizacin de forms v6 y forms v10 en las aplicaciones de la Comunidad de
Madrid.

1.1

AUDIENCIA OBJETIVO

Este documento va dirigido a jefes de proyecto, analistas y desarrolladores de proyectos que utilicen forms
v6 o forms v10.

1.2

CONOCIMIENTOS PREVIOS

Para un completo entendimiento del documento, el lector deber tener conocimientos previos sobre las
siguientes tecnologas:
Oracle Forms
Report Builder

NORMATIVA Y ESTANDARES

La ubicacin donde podemos encontrar todos los componentes que a continuacin se detallan para su
posterior localizacin es la siguiente:
\\Icm\Icm\EMBAJ181\GRP\Formsv10g para Forms v10g
\\Icm\Icm\EMBAJ181\GRP\Formsv6

para Forms v6

Por otro lado documentacin y ejemplos se encuentran accesibles en la siguiente URL:


http://intranet.madrid.org/arquitecturasw

2.1

Sentencias DDL

No se podrn utilizar sentencias SQL- DDL desde el cdigo.

2.2

Estandar General de Fuentes y Colores

Normas a nivel General:


Las propiedades de los Objetos en Forms relativas a los textos que se visualizan como pueden ser
entre ellas (Nombre, Tamao, Grosor, estilo, espaciado, color,..) deben ser: <No especificado> . Esto se
consigue posicionandose en la Propiedad y pulsar el botn heredar . sta operacin aplica los valores por
defecto que normalmente dran como resultado textos en color negro y color de fondo de objetos en
blanco, si no es as se debe cambiar a stos valores. Para los Tipos de Grfico tipo Marco (Rectngulo con
Texto) tambin se aplica sta Norma excepto en las siguientes propiedades:
Nombre de Fuente de Ttulo del Marco : MS Sans Serif

Pgina 5 de 72

Forms v6 y v10
Manual del desarrollador
Tamao de Fuente de Ttulo de Marco : 9
En los Tipos de Grfico como (Rectngulo, Marco,..) el bisel debe ser Sin Relieve y como Color de Fondo
Ningn Relleno.

Los Colores de Fondo de las ventanas ,Lienzos y botones debern llevar el valor <No especificado>
teniendo en cuenta que al realizar sta operacin nos aplica un Color de fondo por defecto que
normalmente es el Gris, si nos aplica otro color por defecto lo cambiaremos a Gris
Se puede aplicar en los Tipos de Objeto Elemento Mostrado (Display Item) el atributo visual
VIS_ATR_CAMPO_DISP siempre y cuando se visualicen en bloques con 1 solo registro de vsiualizacin

En los bloques multiregistro para resaltar el registro sobre el que estamos posicionados durante la
navegacin se consigue aplicando el atributo visual REGISTRO_CURRENT (disponible en las plantillas)
sobre la propiedad CURRENT_RECORD_ATTRIBUTE del bloque.

Los botones Icnicos como norma general tienen una dimensin de 18x18

En la configuracin del Forms Server hay que indicar que se va a trabajar con unas dimensiones del
AppletViewer del modo siguiente, en los parmetros del fichero formsweb.cfg :
widht=800
height=600
2.3

Documentacin

Adems de la documentacin especfica de los diferentes unidades de programa, triggers, objetos, ..


la documentacin a nivel general de la Pantalla (que funcin realiza el Form, a que tablas accede, en qu
Modo (lectura, escritura), .) as como Comentarios y Observaciones se indicar en la Propiedad
Comentarios a nivel de Form

2.4

Nomenclatura estandar de Directorios y Ficheros

Los Directorios deben ir en Minscula


El Nombre de Fichero debe ir en Mayscula y la extensin en Minscula

ARQUITECTURA FISICA

3.1

FORMS V6

3.2

FORMS V10

Pgina 6 de 72

Forms v6 y v10
Manual del desarrollador
4

LIBRERIAS

4.1

ICM_OBJ.OLB

Librera de Objetos que contiene los objetos comunes que componen los distintos mdulos genricos o
plantillas a partir de las cuales iniciaremos nuestros programas.

Esta librera ha de encontrarse almacenada en una ubicacin que sea accesible en todo momento a travs
del contenido de la variable FORMS90_PATH, de este modo los mdulos sern cargados correctamente a
la hora de ser abiertos desde FormBuilder.

Contiene entre otros:


- Grupo de objetos GRP_FORM_BASE compuesto de Trigger de carcter general que realizan los
distintos controles de activacin de perfiles, control de errores etc.
( Trigger When-new-form-instance, On-message, On-error, Canvas y Windows)
Este grupo de objetos ser referenciado por la plantilla FORM_BASE que se detalla en otro punto dentro
de este documento.

- Grupo de objetos GRP_APL_BASE compuesto de Trigger de carcter general para la interceptacin de


conexin a Oracle, perfiles para opciones de men etc.

Pgina 7 de 72

Forms v6 y v10
Manual del desarrollador
(Trigger On-Log, When-new-form-instance, bloques, campos, Canvas y Windows)
Este grupo de objetos ser referenciado por la plantilla FORM_APL que se detalla en otro punto dentro
de este documento.
- Atributos visuales genricos para campos de entrada, prompt, campos de display y de opciones de
men.
- Alarma de carcter general.

NOTA
Estn Prohibidas la utiizacin de referencias de objetos de un Form a otro Form, cuando se
necesiten realizar referencias a objetos se utilizar una librera de objetos (olb)

4.2

ICM_PLL.PLL
Librera de PL/SQL que contiene procedimientos de carcter general.
Contiene entre otros:
- APLICAR_PERFIL, para habilitar/deshabilitar objetos dentro de un form en funcin del perfil del usuario
de entrada a la aplicacin.
- GENERAR_MENU, iden. a nivel de opciones del men activo para la aplicacin.
- CIFRA, para realizar la encriptacin de la password del usuario de entrada.
- LEER_FICH_INI, utilidad para leer claves incluidas en el ficheros de .ini para la aplicacin
- y otras de carcter general.

Es necesario a la hora de desarrollar un nuevo proyecto, lo primero, fijar la variable de entorno del regedit:

\HKEY_LOCAL_MACHINE\Software\Oracle

FORMS90_PATH

a la carpeta donde se encuentre ubicada dicha librera ya que al abrir cualquiera de los mdulos que
contengan referencias a la misma nos obligar a que est localizada, bien en el directorio en donde vamos
a desarrollar nuestra aplicacin, bien en la carpeta de red donde se encuentran los archivos generales de
infraestructura, opcin esta ltima la ms aconsejada ya que as no nos tendremos que ocupar de
actualizar los cambios que se realicen sobre la misma.

(La correcta localizacin de esta librera ser el primer paso que hagamos antes de crearnos alguno de los
siguientes forms desde plantilla)

Pgina 8 de 72

Forms v6 y v10
Manual del desarrollador

NOTA
Hay que tener encuenta que la librera ICM_PLL ya tiene incorporada la librera F6_PROCS_SIS.pll .
Por lo tanto al atachar a nuestro form la librera ICM_PLL automticamente tendremos tambin la
librera F6_PROCS_SIS.pll . Posteriormente no se debe atachar la librera F6_PROCS_SIS.pll

No deben atacharse las libreras generales a las Libreras de Aplicacin .

4.2.1

ADAPTACIN DEL PROCEDIMIENTO MENSAJE DE LA LIBRERA ICM_PLL

Solamente para la migracin de los forms (v3) de procedimientos de carcter general se ha producido la
situacin de encontrarnos con dos procedimientos que se llaman de igual nombre contenidos en dos PLLs
distintas ambas de carcter general.

- MENSAJE perteneciente a F6_PROCS_SIS.pll


- MENSAJE perteneciente a ICM_PLL.pll

Pgina 9 de 72

Forms v6 y v10
Manual del desarrollador
el fin de ambos procedimientos es el mismo, mostrar un mensaje por pantalla, pero lo hacen de forma
distinta:
- el primero migrado de Forms v3 muestra un mensaje mediante la ejecucin de la built-in message por lo
tanto este aparecer en la linea de estatus de pantalla y adems el texto a mostrar lo obtiene de base de
datos en funcin de los parmetros recibidos en la llamada.
La llamada actual es del tipo:
MENSAJE(I,9999);

- el segundo tambin muestra un mensaje en pantalla pero este aparecer contenido en una ventana (el
modo habitual para cualquier mensaje de Windows) sin embargo no obtiene valor alguno de la base de
datos simplemente muestra en la ventana el texto que se la pasa por parmetro.
La llamada actual es del tipo:
MENSAJE(Texto);

Entonces para evitar tener dos procedimientos con idntica nomenclatura y tomar de cada uno de estos su
mxima funcionalidad se han realizado los siguientes cambios:

F6_PROCS_SIS.MENSAJE cambia de nombre y pasa a llamarse F6_PROCS_SIS.MENSAJE_BD y


adems pasa a ser una funcin en lugar de un procedimiento con lo cual se obtiene el texto del mensaje de
base de datos (a partir de ahora esta funcin no se llamar directamente, ser llamada desde
ICM_PLL.MENSAJE)

ICM_PLL.MENSAJE cambia el interface de llamada, pero no hace falta adaptacin alguna en los
programas que actualmente utilizan dicho procedimiento, aadiendole un nuevo parmetro y queda del
siguiente modo:

MENSAJE(TEXTO, [NUMERO] );

siendo este ltimo parmetro opcional con lo cual con el cambio obtenemos la siguiente funcionalidad:

- podemos utilizar la procedure como se utilizaba hasta ahora, para mostrar cualquier texto:
MENSAJE(Texto a mostrar);

- utilizar la procedure para obtener un mensaje a partir de la tabla de mensajes de base de datos
(ya que internamente la procedure detecta por el nmero de parmetros recibidos que en este
caso ha de realizar una llamada a PROCS_SIS.MENSAJE_BD para obtener el texto final a
mostrar):

Pgina 10 de 72

Forms v6 y v10
Manual del desarrollador

MENSAJE(I,9999);
- todos los procedimientos migrados de Forms v3 a PLLs a la hora de mostrar mensajes no
utilizarn la antigua procedure MENSAJE utilizarn esta nueva de ICM_PLL y por lo tanto los
textos se mostrarn siempre bajo una ventana de mensaje utilizando el interface de siempre.
MENSAJE(I,9999);

Adems aprovechando que se modificaban las libreras se borran de ICM_PLL.pll los siguientes
procedimientos:
- GLOBALES_MONEDA
- N2EDITAMONEDA
- N2EDITANUM2
ya que actualmente estn disponibles en la librera F6_PROCS_GENERAL.

En la librera ICM_PLL.pll se encuentra disponible el procedimiento MENSAJE_I que proporciona la


siguiente funcionalidad:

MENSAJE_I
Tiene la misma funcionalidad que MENSAJE y adems permite escoger el Estilo(Icono) de Alerta
que se va a visualizar indicandole el estilo en el parmetro Tipo_Alerta

Parmetros del Procedimiento MENSAJE_I:

TEXTO

:Texto a visualizar en la Alerta

NUM_ADAPT

:N del Mensaje de Base de Datos correspondiente a la tabla Mensajes (se incluye

como compatibilidad y es opcional) a visualizar en la Alerta


TIPO_ALERTA

:Valores Permitidos (1,2,3), Valor por Defecto 1


1-

Estilo: Parar

2-

Estilo: Nota

3-

Estilo: Precaucin

EJEMPLOS: Las siguientes llamadas al Procedimiento generarn una visualizacin de la


Alerta como sigue:

MENSAJE_I('Mensaje visualizado con Estilo de Alerta PARAR');


MENSAJE_I('Mensaje visualizado con Estilo de Alerta PARAR', 1);

Pgina 11 de 72

Forms v6 y v10
Manual del desarrollador

MENSAJE_I('Mensaje visualizado con Estilo de Alerta NOTA', 2);

MENSAJE_I('Mensaje visualizado con Estilo de Alerta PRECAUCIN', 3);

TEMPLATES (PLANTILLAS)

Se han creado una serie de mdulos genricos o plantillas los cuales ya contienen objetos referenciados a
la librera de objetos ICM_OBJ, tambin llevan incorporadas referencias a la librera de PL/SQL ICM_PLL
(localizada en disco).

La utilizacin de cualquiera de estas plantillas para los nuevos desarrollos se realizar del siguiente modo:
- seleccionar la opcin del men principal:
Nuevo Form con Plantilla Acceso a mdulo de fichero
navegaremos a nivel de carpetas hasta posicionarnos en la ubicacin donde se encuentran los forms de
infraestructura y seleccionaremos el mdulo del que se desea partir.

Pgina 12 de 72

Forms v6 y v10
Manual del desarrollador
Por el hecho de que estas plantillas contienen referencias a mdulos, cualquier modificacin que se realice
sobre ellos quedar reflejada en el momento de abrir de nuevo el mdulo -en caso de modificaciones en la
librera de objetos lCM_OBJ- y tan slo tendremos que compilar y automticamente en el caso de
modificacin de cualquier procedimiento/funcin de la librera PL/SQL ICM_PLL.

Estos mdulos se encuentran disponibles en la carpeta general de infraestructura y son los siguientes:

5.1

APL_BASE

Para la creacin del form de entrada a la aplicacin, en este form lo primero que se ha de hacer es
modificar el Trigger When-New-Form-Instance personalizndolo para la nueva aplicacin, se modificar:
:GLOBAL.COD_APLICACION := 'XXXX'; -- con el valor de nuestra aplicacin
:GLOBAL.FICH_INI := 'XXXX.ini'; -- con el nombre del fich. de ini de la aplicacin.

Igualmente se modificar el nombre de men asociado indicando el men anteriormente generado:


nombre_de_aplicacion_MENU

Contiene los siguientes puntos de inters:

- Se intercepta la conexin inicial a Oracle (ON-LOGON) para posteriormente realizar por programa el
control de dicha conexin.
- Lectura del fichero de .ini para la aplicacin especificando entre otros datos la base de datos a la cual
realizaremos la conexin.
- Actualizacin de opciones de men segn el perfil del usuario de entrada (PROC. GENERAR_MENU).
- Incorporacin de la librera de utilidades generales ICM_PLL.pll
- Muchos de los objetos aqu creados se encuentran referenciados mediante un grupo de objetos de la
librera de Objetos general ICM_OBJ.olb
Este mdulo al salvarlo se realizar con la siguiente nomenclatura:
nombre_de_aplicacion_APL.fmb

(Por ejem: PRY1_APL.fmb)

Los siguientes objetos no pueden cambiarse:


Trigger ON-LOGON
Procedure PROC_BACEPTAR
Si fuera necesario introducir cdigo adicional en la conexin se deber meter en el Trigger

WHEN-BUTTON-PRESSED del botn BACEPTAR

- En el trigger WHEN-NEW-FORM-INSTANCE no debe tocarse el Bloque de cdigo relativo a la


conexin

Pgina 13 de 72

Forms v6 y v10
Manual del desarrollador

NOTA
-Se permite realizar conexiones con distintas aplicaciones incluso entre distintas bases de datossin necesidad de autentificacin por parte del usuario, no se mostrara la ventana inicial de
autentificacin. Esta funcionalidad requiere, por supuesto, que el usuario y la password de acceso para
conectar con otra aplicacin sea la misma con la que se autentific inicialmente el usuario.
La llamada a otra/s aplicaciones se realiza del siguiente modo:
NEW_FORM(XXXX_APL,FULL_ROLLBACK);

5.2

MENU_BASE

Se utilizar para la creacin del men inicial de la aplicacin.

Contiene:
- Unas opciones de men de prueba simulando una llamada a un programa como estndar de
llamada, va CALL_FORM(XXX,NO_HIDE, NO_REPLACE);
- Incorporacin de opciones de ayuda con acceso dinmico a pginas HTML
- Opcin de abandono de aplicacin

Pgina 14 de 72

Forms v6 y v10
Manual del desarrollador
- Cdigo de ejecucin inicial Startup Code para controlar la ejecucin de las llamadas a
programas (para evitar el actual bug de la actual versin cuando ejecutamos ms de un Form a la
vez desde el men y se nos cuelga al realizar un acceso a base de datos).
- Incorporacin de la librera de utilidades generales ICM_PLL.pll

Este menu a la hora de salvarlo se realizar con la nomenclatura :


nombre_de_aplicacin_MENU.mmb

5.3

(Por ejem: PRY1_MENU.mmb)

FORM_BASE

Para la creacin del resto de programas de nuestra aplicacin, contiene:

-Procedimiento para realizar la actualizacin de objetos del programa en base al perfil del usuario de
entrada a la aplicacin (PROC. APLICAR_PERFIL)
- Procedimiento para la interceptar los mensajes no controlados por aplicacin y obtenerlos mediante una
ventana de dilogo en lugar de mostrarlos en la linea de estado, muchas veces inapreciable.
- Incorporacin de la librera de utilidades generales ICM_PLL.pll

Pgina 15 de 72

Forms v6 y v10
Manual del desarrollador
- Contiene alarma general, atributos visuales etc.referenciados mediante un grupo de objetos de la
librera de objetos generales ICM_OBJ.olb

Inicialmente no se ha incluido ningn bloque en el mdulo de modo que para poder ejecutarlo lo primero
que se requiere es la creacin del al menos un bloque y un campo.

Al guardar el modulo se realizar con la siguiente nomenclatura:


nombre_de_aplicacion + letra_identif. + cadena_numerica_dentro_de_la_aplicacion.fmb
(Por ejem: PRY1_M001.fmb)

5.4

F60_MANT1

Se utilizar como plantilla para la creacin de forms de mantenimiento de catlogos.


Dentro del propio Form plantilla en la propiedad Comentario se pueden consultar los pasos a seguir para
obtener una form personalizado para la tabla a mantener.

Pasos a seguir para la creacin del Form de Mantenimiento 1:

Pgina 16 de 72

Forms v6 y v10
Manual del desarrollador
1.- Crear un nuevo bloque asociado a la tabla a mantener

2.- Copiar los triggers del bloque 'BLOQUE_TRIGGERS_DE_TABLA' al nuevo bloque recien creado
(posteriormente borrar el bloque 'BLOQUE_TRIGGERS_DE_TABLA').

3.- En el Trigger WHEN-NEW-FORM-INSTANCE asignar el nombre del nuevo bloque a la variable:


:BOPCION.BLOQUE_TABLA := 'NUEVO_BLOQUE';

4.- Asociar a los campos del nuevo bloque el menu desplegable 'MENU_MANT'

5.- Incluir los filtros oportunos, si se necesitan, en pantalla y la programacin de los mismos en el
procedimiento 'PROC_FILTRO'.

6.- Incluir las validaciones necesarias para la actualizacin de los registros del nuevo bloque en el
procedimiento 'PROC_VALIDACIONES'.

Este form en concreto realiza el mantenimiento basandose en una nica ventana, es decir mantenemos
los datos en sobre el mismo bloque que se presenta para la consulta inicial.
Contiene todos los controles a nivel de perfiles e incorporacin de plls al igual que el form anterior
Form_Base.fmb.

Pgina 17 de 72

Forms v6 y v10
Manual del desarrollador
5.5

F60_MANT2

Se utilizar como plantilla para la creacin de forms de mantenimiento de catlogos.


Dentro del propio Form plantilla en la propiedad Comentario se pueden consultar los pasos a seguir para
obtener una form personalizado para la tabla a mantener.

Pasos a seguir para la creacin del Form de Mantenimiento 2:

1.- Crear dos bloques asociados a la misma tabla a mantener:


- Un nuevo bloque a visualizar en estilo 'multiregistro'
- Otro bloque asociado a la misma tabla a visualizar en 'registro nico'.

2.- Copiar los triggers de los bloques:


'BLOQUE_TRIGGERS_TABLA1'-'BLOQUE_TRIGGERS_TABLA2' a los bloques creados anteriormente
'multiregistro' y 'registro nico' respectivamente (posteriormente borrar estos bloques).

3.- En el Trigger WHEN-NEW-FORM-INSTANCE asignar el nombre de los nuevos bloques a las


variables:
:BOPCION.BLOQUE_TABLA1 := 'NOMBRE_DEL_NUEVO_BLOQUE_MULTIREGISTRO';
:BOPCION.BLOQUE_TABLA2 := 'NOMBRE_DEL_NUEVO_BLOQUE_UNICO_REGISTRO';

4.- Asociar a los campos del bloque multiregistro el menu desplegable 'MENU_MANT' ya existente en el
modelo.

5.- Fijar en el bloque 'registro nico', en el Trigger Pre-Query la igualdad de claves para realizar el
acceso adecuado entre ambos bloques.

6.- Incluir los filtros oportunos, si se necesitan, en pantalla y la programacin de los mismos en el
procedimiento 'PROC_FILTRO'.

7.- Incluir las validaciones necesarias para la actualizacin de los registros del nuevo bloque en el
procedimiento 'PROC_VALIDACIONES'.
Es similar al form anterior tan solo que para el mantenimiento del catlogo se tienen dos ventanas en
lugar de una como el anterior, de manera que cuando entramos por las opciones de actualizacin de
informacin nos aparecer una nueva ventana mostrndonos tan slo la informacin del registro a
procesar y cuando aceptamos o cancelamos los cambios regresamos a la ventana principal.

Pgina 18 de 72

Forms v6 y v10
Manual del desarrollador

5.6

LOV_GEN

Se han realizado pruebas con listas de valores(LOV) accediendo a tablas con un volumen importante de
registros obteniendose tiempos de respuesta bastante lentos.
Cuando ejecutamos una LOV lo que internamente realiza es una bajada de la totalidad de los registros que
obtiene la consulta al cliente con el consecuente coste de la accin, es decir si accedemos a una tabla, por
ejemplo, la de Interesados con un volumen aproximado de 100.000 registros la operacin se lleva un
tiempo ms que considerable (aproximadamente tarda el minuto).

Por lo tanto para este tipo de LOV sobre tablas de un volumen superior a los 2.000 registros se aconseja
emplear un form para este fin tomando como base del mismo un Form (plantilla) que se ha realizado
simulando el aspecto de la LOV estndar (de Web).

Este form acta con la lista de valores con un bloque asociado a tabla y la gestin del array de registros
que forms nos ofrece, en este caso al realizar una bsqueda (ExecuteQuery) tan solo se bajar al cliente
un array de registros igual al nmero de registros definidos para el multiregistro del bloque y
posteriormente segn bajamos por el grid nos va recuperando bloque a bloque de informacin pero nunca
se baja la totalidad del query de una vez.

Pgina 19 de 72

Forms v6 y v10
Manual del desarrollador
El template se encuentra disponible en la carpeta:
\plantillas

con el siguiente nombre:


LOV_GEN.fmb

dentro de la infraestructura disponible para Forms.


Modificaciones a realizar para personalizar el form Lista de Valores :
-En el objeto Ventana modificar la propiedad Titulo indicando el correspondiente valor.
-En el bloque BTABLA modificar la propiedad Nombre del Origen de datos de Consulta indicando
la tabla de la cual deseamos obtener la informacin.
-Dentro de los elementos del bloque BTABLA acceder a la propiedad Base de Datos - Nombre de
Columna e indicar el nombre del campo correspondiente a visualizar (debe de tener el mismo
nombre que el nombre del campo definido en base de datos para la tabla anteriormente
seleccionada).
Aqu se permite poner o el nombre del campo o bien una expresin compuesta por varios campos
de la tabla, por ejemplo para obtener el Cdigo de Expte. formateado:
cddeptno || '-' || cdtexp || '-' ||LPAD(cdnexp,5,'0') ||'.'||cddigito||'/'||cdaexp

-Tambin hay que modificar la etiqueta que queremos que aparezca como cabeceras de campos
de la lista para ello modificamos la propiedad Prompt de los elementos del Bloque.
- Y por ltimo cambiar las propiedades de los elementos del bloque BTABLA en cuanto al tamao
de y ancho de visualizacin de los mismos.
Ejemplo de llamada a un Form tipo Lista de valores :

Call ( 'LOV_INTE' , NO_HIDE , NO_REPLACE ) ;


--- Si se obtiene informacin de la lista de valores la siguiente global contendr S
-IF :GLOBAL.LOV_RESULT = 'S' THEN
-- se obtiene el valor de la lista sobre un campo de nuestro form
:B10.INTERESADO := :GLOBAL.LOV_V1;
END IF;

Pgina 20 de 72

Forms v6 y v10
Manual del desarrollador
6

FICHERO INI

El fichero ini de aplicaciones en Forms 10g contiene las siguientes opciones:

; ***
; *** Fichero de ini - Aplicacin XXX

(DD/MM/YYYY)

; ***
[General]
BaseDatos=icm21_xxxxx
; *** Tipo de Ejecucin, posibles valores: -Web

-Windows

TipoEjecucion=Web
; *** Variable ejemplo para cargar en cuadro de informacin en men inicial
Entorno=Consejera de xxxxxxxx
[Ayudas HTML]
; *** Ubicacin de las pginas html de ayuda
WebAyuda=/xxxx/Forms/
[ReportBuilder]
; *** Parmetros vlidos solamente para Reports bajo TipoEjecucion=Web
Report_cache=\\cifs04v3002\DESA_WEB\web_reps\
Report_mapping=/web_reps/
Cola1=REPLIGERAD01
;Cola2=REPMEDIANAD01
; *** Para realizar impresin directa de Pdf's desde el mdulo LIS_REP.fmx
Impresion_pdf=/impresionpdf/cgi-bin/ImpresionPDF.exe
[GLIS]
; *** Parmetros vlidos solamente para la ejecucin del GLIS
GlisHost=icmsvds003
GlisDir=\\cifs04v3002\DESA_WEB\web_reps\
GlisCola=NORMAL
GlisMapping=/web_reps/
GlisExe=\\cifs04v3002\DESA_OAS_GENERAL\general\etc\GlisBatchListado.exe
GlisExe_Cubo=\\cifs04v3002\DESA_OAS_GENERAL\general\etc\GlisBatchCubo.exe
GlisExe_Sql=\\cifs04v3002\DESA_OAS_GENERAL\general\etc\GlisBatchSql.exe
GlisTemp=d:\temp\
GlisAyuda=/Glis_Ayuda/Forms/

Pgina 21 de 72

Forms v6 y v10
Manual del desarrollador
[UPLOAD]
; *** Parmetros vlidos solamente para le ejecucin del Upload
Upload_Exe=/util/upload/servlet/Servidor
[DOCX]
; *** Parmetros vlidos solamente para la ejecucin de Fusin de documentos
DocCola=NORMAL
DocDir=\\cifs04v3002\DESA_WEB\web_reps\
DocMapping=/web_reps/
DocServlet=/impreofi/servlet/Servidor
DocHost=HOST_ACTIVEX
DocExe=impreofi
[BUSINESS OBJECTS]
bo_usuario=EJPL_Usu
bo_clave=C7FFB972B34AB66E2C45124586507E4F

7.1

SOLUCIONES

CALENDARIO

Se ha creado un form que actua como calendario contemplando los festivos segn la tabla catlogo
CATA_FESTIVOS.
La llamada a este se realiza a partir del procedimiento FCALENDARIO, incluido en la librera general de
PL/SQL ICM_PLL.

Pgina 22 de 72

Forms v6 y v10
Manual del desarrollador

Los parmetros de llamada son:


-FECHA_CAL ..: Devuelve la fecha seleccionada del calendario
-FIESTA_CAL..: Devuelve uno de los siguientes valores:
'L' - Da laboral
'F' - Da festivo
'D' - Domingo
-DIA_SEM_CAL.: Devuelve el nmero del da de la semana (1-Lunes ...7-Domingo)
-CAL_X ......: Coordenada x de visualizacin de la ventana del form Calendario
-CAL_Y ......: Coordenana y de visualizacin de la ventana del form Calendario

Un ejemplo de llamada a este sera:

FCALENDARIO(:B10.FECHA,:B10.FIESTA,:B10.DIA_SEM,
GET_ITEM_PROPERTY('FECHA',X_POS),
GET_ITEM_PROPERTY('FECHA',Y_POS) );

7.2

FUSION DE DOCUMENTOS

Pgina 23 de 72

Forms v6 y v10
Manual del desarrollador
La Visualizacin de Fusin de Documentos consiste en la Fusin de una Plantilla Word o WordPerfect
salvada en la base de datos con un fichero de datos. Desde forms se llama al programa delphi encargado
de generar un fichero zip que contiene la plantilla, el fichero de datos y un fichero ini indicando la operacin
a realizar, una vez generado ste fichero zip, desde Forms se abre ste fichero cargandose
automticamente el visor Word_WordPerfect que realiza la fusin.

La visualizacin de Fusin de Documentos consta de los siguientes Programas/Productos:

1. Visor Word_WordPerfect instalado en el Puesto Cliente

2. Programa Delphi:

- genera una serie de ficheros dentro de un fichero zip (con


extensin W2Z)

3. Programa Forms:

- Realiza la llamada al programa delphi

- Visualiza el Fichero (generado por el programa delphi)

1. Visor Word_WordPerfect instalado en el Puesto Cliente

La instalacin se puede realizar a travs de la intranet en la siguiente URL:


http://nticmdes01/Forms6/software_base/visor_de_wordperfect_word.htm o ejecutando el fichero de
instalacin visorwpword.exe .

El visor se carga automticamente al abrir cualquier documento con la extensin W2Z.


Se encarga de realizar la fusin de la plantilla con el fichero de datos dbf y realiza la operacin indicada en
elfichero ini (Visualizacin o Impresin del Documento, N de copias a imprimir)

2. Programa Delphi
Recibe del programa forms una cadena con los siguientes parmetros:
bd= Usuario, Password y Cadena de Conexin con el formato
Usuario/Password@cadena_conexion
operacion= Operacin a realizar, puede ser Visualizar (V) o Imprimir (I)
codigo= Cdigo de Plantilla
copias= N de copias
fichero= El path y nombre del fichero que se va a generar, el nombre del fichero debe llevar
la extensin W2Z.
dl= Directorio Temporal

Ejemplo: bd=ADMON/PASSWORD@imc21_denivel2 operacion=V codigo=2 copias=1


fichero=d:\icm\web\web_reps\ADMON_200021120_171106.W2Z dl=d:\temp\

Pgina 24 de 72

Forms v6 y v10
Manual del desarrollador

Va a generar un fichero zip (con extensin W2Z) que contiene los siguientes ficheros:
- Plantilla:

Plantilla Word o WordPerfect, es obtenida de base de datos consultando

un tabla por codigo de Plantilla, que hemos recibido como parmetro del programa Forms

- Fichero de datos:

Fichero dbf

- Fichero ini: Contiene los siguientes parmetros:


FORMULARIO= Nombre de la plantilla
DATOS= Nombre del fichero de datos (dbf)
OPERACION= Visualizar (V)o Imprimir (I)
COPIAS= N de copias.

Ejemplo:

FORMULARIO=W2ZP.doc
DATOS=W2ZP.dbf
OPERACION=V
COPIAS=1

(Estos datos los saca de los parmetros que le han llegado)

3. Programa Forms
Consta de las siguientes componentes:

Fichero Ini
Adems de los parmetros standard de una aplicacin Forms , el fichero ini de la aplicacin debe llevar los
parmetros predeterminados para la ejecucin de programas en batch, que son los siguientes:

DocxHost

= Mquina dnde va a correr el programa delphi.

DocxDir

= Direccin Fsica dnde el programa delphi depositar el fichero que

genera.
DocxCola

= Cola en la que se ejecutar el programa delphi.

DocxMapping =URL que apunta a la direcccin fsica dnde el programa delphi deposita el
fichero que genera.
DocxExe

= Direccin fsica del programa delphi.

DocxTemp

= Directorio temporal.

Ejecucin del programa Delphi


La ejecucin de un programa en batch desde forms se realiza a travs de las funciones del paquete
QUJB_PAQ_GENERAL:
PETICION

Obtiene un n de Peticin.

Pgina 25 de 72

Forms v6 y v10
Manual del desarrollador
EJECUCION

Se lanza la ejecucin del proceso.

ESTADO

Devuelve si ha finalizado el proceso.

Visualizacin del fichero (generado por el programa delphi)


Comprobado con la Funcin QUJB_PAQ_GENERAL.Estado que el proceso ha terminado se visualiza el
fichero generado realizando un WEB.Show_Document a la URL dnde se encuentra el fichero, el path del
fichero se captura del parmetro DocxMapping del fichero ini.

Ejemplo:

v_Url := http://nticmdes01/web_reps/ ADMON_200021120_171106.W2Z;


WEB.SHOW_DOCUMENT(v_Url,'_blank');

Pgina 26 de 72

Forms v6 y v10
Manual del desarrollador
7.3

TRATAMIENTO DE CAMPOS LOB

La carga y descarga de ficheros al Server (upload y download respectivamente) cada vez est siendo ms
habitual en los proyectos Forms en WEB. Para facilitar los desarrollos y la puesta en produccin de las
aplicaciones se ha desarrollado un Servlet genrico para realizar este tipo de operaciones.
Modelo de datos.-

Se han creado tres tablas en GAT donde el Servlet almacenar la informacin de los ficheros a tratar a
modo temporal para que las distintas aplicaciones puedan procesar esta informacin, de este modo el
Servlet depositar o recoger siempre la informacin de ficheros de estas tablas temporales, son las
siguientes

GAT_UPLOAD_FICHERO .-

contiene la informacin general de cada archivo.

GAT_UPLOAD_LINEA .-

dnde se almacenan los ficheros de texto a cargar, tendremos un

registro por cada lnea del archivo, aqu se almacenarn los campos de tipo CLOB.
GAT_UPLOAD_BLOB .-

dnde se almacenan los ficheros en binario a cargar/visualizar,

aqu se almacenarn los campos de tipo BLOB.

Conexin a base de datos.No nos hemos de preocupar de la conexin ya que existen una cuenta preestablecida para cada base de
datos con la cual se conecta el Servlet.

7.3.1

CARGA DE ARCHIVOS TEXTO A CLOB

Los archivos para hacer UPLOAD tendrn que ser archivos de texto, formato TXT y la estructura de cada
registro ser la que cada aplicacin defina y/o requiera.

Funcionamiento General:

Pgina 27 de 72

Forms v6 y v10
Manual del desarrollador
Desde un punto determinado de una aplicacin se realiza la llamada el servlet genrico de
upload.
Aparece una ventana de peticin de la localizacin del fichero a cargar.
El servlet sube el fichero al servidor y lo carga en las tablas temporales.
El archivo ya cargado ser tratado por nuestra aplicacin.
Una vez procesada esta informacin los datos se borrarn de las tablas temporales por
nuestra aplicacin.

Se realizarn los siguientes pasos:

1.- Generacin de una Clave Externa.

Se genera en nuestra aplicacin, desde el mdulo que llame al servlet con un criterio de clave
nica, por ejemplo del tipo: USER_YYYYMMDD_HH24:MI:SS

2.- Llamada al Servlet

La llamada al Servlet debe ser como se describe a continuacin:


http://desarrollo.madrid.org/upload/servlet/Servidor?bd=<bd>&user=<user>&apli=<apli>&clave=<cl
ave>
&plantilla=<plantilla>&opcclob=C

Los parmetros del querystring son los siguientes:


1. <bd> - base de datos donde se va a dejar la informacin del fichero
2. <user> - usuario que realiza la operacin (no se utiliza para la conexin)
3. <apli> - aplicacin que hace la carga
4. <clave> - clave de referencia para localizar el registro
5. <plantilla> - plantilla htm a utilizar (opcional, existe una plantilla por defecto)
6. <opcclob> - Valores vlidos:
C - Carga de Fichero de texto a campo CLOB
Por defecto si no aparece el parmetro opcclob tambin realiza la carga de fichero de texto a
campo clob
Ejemplos de llamadas:

http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm1003_orcl8&user=USU1&apli=USUG&clave=
USU1_20021217_101330&plantilla=defecto

http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm1003_orcl8&user=USU1&apli=USUG&clave=U
SU1_20021217_101330&plantilla=defecto&opcclob=C

Pgina 28 de 72

Forms v6 y v10
Manual del desarrollador
http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm21_denivel2&user=GAT1&apli=GAT&clave=
GAT1_20021217_101330&plantilla=azul

Una vez finalizado el Programa Servlet ya se han cargado las tablas Temporales y se ha generado un
registro por cada lnea del Fichero de texto en la tabla GAT_UPLOAD_LINEA

3.- Leer de la Tabla Temporal

A travs de un cursor se leen los registros(uno para cada lnea del fichero) generados por el programa
Servlet. El cursor nos permite operar con cada registro(lnea del fichero) y realizar la operacin que
necesitemos.
NOTA: No se debe realizar la lectura de los registros hasta que el programa Servlet no ha finalizado.

4.- Borrado de Registros de Tablas Temporales

Una vez finalizada la lectura de los registros en las tablas temporales GAT_UPLOAD_.... se realizar el
borrado de nuestros registros.

NOTA: Tanto en la carga de Blob como de Clob el nombre de Fichero que se indique debe ser nico
, para ello se puede utlizar la nomenclatura USER_DDMMYYYY_HHMMSS

7.3.2

DESCARGA Y VISUALIZACION DE CLOB

Funcionamiento General
Se realiza la transferencia de un Clob o conjunto de registros de mi aplicacin a tablas temporales
a travs de la funcin GAT_FUNC_CARGA_CLOB
Se ejecuta el programa servlet que descarga y visualiza del Clob o conjuntos de registros de la
tabla temporal
Finalizada la descarga-visualizacin, la aplicacin borrar de las tablas temporales la informacin
recin tratada.

Se realizarn los siguientes pasos:

1.- Generacin de una Clave Externa.

Se genera en nuestra aplicacin, desde el mdulo que llame al servlet con un criterio de clave nica, por
ejemplo del tipo: USER_YYYYMMDD_HH24:MI:SS

Pgina 29 de 72

Forms v6 y v10
Manual del desarrollador
2.- Paso de CLOB o del conjuntos de registros de nuestra aplicacin a tablas temporales

2.1- Paso de CLOB de nuestra aplicacin a tablas temporales


Se transfiere 1 registro a la tabla de nuestra aplicacin XXXX (XXXX_TABLA_CLOB) que contiene el
campo CLOB a tablas temporales GAT_UPLOAD_... mediante la ejecucin de la siguiente funcin de
carcter general del ncleo de Oracle
GAT_FUNC_CARGA_CLOB:
La funcin obtiene el n de registros que recupera la sentencia where que pasamos como
parmetro.

Parmetros de entrada de la Funcin:


w_Cod_Aplicacion:

Cdigo de aplicacin

w_Cd_Cl_Externa:

Clave generada por la aplicacin

w_Nom_Archivo:

Nombre del archivo a generar para su posterior descarga

w_Tabla_Apl:

Nombre de la tabla de la aplicacin (XXXX_TABLA_CLOB)

w_Clave_Tabla_Apl:

Sentencia where para localizar el registro nico que contiene el CLOB


Por ejemplo: WHERE ID_CLOB=9877 and CDTIPO=A

w_Campo_Clob:

Nombre del campo CLOB a extraer de la anterior tabla

Parmetros de salida de la Funcin:


z_Mensaje_Err:

Mensaje de Error si se produce.

En ste punto se debe realizar COMMIT; para confirmar la insercin del campo CLOB en las tablas
temporales y que el proceso externo Servlet pueda obtener sta informacin

2.2- Paso de un conjunto de registros de nuestra aplicacin a tablas temporales


Se transfiere el conjunto de registros a la tabla de nuestra aplicacin XXXX (XXXX_TABLA) a tablas
temporales GAT_UPLOAD_... mediante la ejecucin de la siguiente funcin de carcter general del ncleo
de Oracle
GAT_FUNC_CARGA_CLOB:
La funcin obtiene el n de registros que recupera la sentencia where que pasamos como
parmetro.

Parmetros de entrada de la Funcin:


w_Cod_Aplicacion:

Cdigo de aplicacin

Pgina 30 de 72

Forms v6 y v10
Manual del desarrollador
w_Cd_Cl_Externa:

Clave generada por la aplicacin

w_Nom_Archivo:

Nombre del archivo a generar para su posterior descarga

w_Tabla_Apl:

Nombre de la tabla de la aplicacin (XXXX_TABLA)

w_Clave_Tabla_Apl:

Sentencia where para localizar el registro nico que contiene el conjunto de

registros
Por ejemplo: WHERE ID_EXPETE=9877 and CDTIPO=A
w_Campo_Clob:

Nombre del campo a extraer de la anterior tabla

w_Campo_Nm_Linea: Nombre del Campo de la tabla que contiene el nmero de lnea

Parmetros de salida de la Funcin:


z_Mensaje_Err:

Mensaje de Error si se produce.

En ste punto se debe realizar COMMIT; para confirmar la insercin del conjunto de registros en
las tablas temporales y que el proceso externo Servlet pueda obtener sta informacin

3.- Ejecucin del Servlet para realizar la descarga-visualizacin del campo CLOB

La llamada al servlet debe ser como se describe a continuacin:


http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=<bd>&user=<user>&apli=<apli>&clave=<cla
ve>
&plantilla=<plantilla>&opcclob=V

Los parmetros del querystring son los siguientes:

1. <bd> - base de datos donde se va a dejar la informacin del fichero


2. <user> - usuario que realiza la operacin (no se utiliza para la conexin)
3. <apli> - aplicacin que hace la carga
4. <clave> - clave de referencia para localizar el registro
5. <plantilla> - plantilla htm a utilizar (opcional, existe una plantilla por defecto)
6. <opcclob> - Valores vlidos:
V - Descarga/Visualizacin de campos CLOB a fichero
para su posterior visualizacin

7. <zip> - Valores Vlidos:


S - El fichero se almacenar comprimido
N - El fichero no se almacenar comprimido. (Opcional,
ste parmetro, por defecto no se comprime).

Pgina 31 de 72

no es necesario aadir

Forms v6 y v10
Manual del desarrollador
Ejemplos de llamadas:

http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm1003_orcl8&user=USU1&apli=USUG&clave=US
U1_20021217_101858&plantilla=defecto&opcclob=V

http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm21_denivel2&user=GAT1&apli=GAT&clave=GA
T_20021217_101858&plantilla=azul&opcclob=V&zip=S

Automticamente el Servlet realizar la descarga del CLOB generando un archivo en disco y


posteriormente proceder a visualizar el documento correspondiente con su aplicacin asociada.

4.- Borrado de Registros de Tablas Temporales


Una vez visualizado el fichero debemos realizar el borrado de las tablas temporales GAT_UPLOAD para
el registro recin tratado.

NOTA: No se debe realizar el borrado hasta que el programa Servlet ha terminado

7.3.3

Carga de Archivo de Texto a campo CLOB y campo BLOB

Los archivos para hacer UPLOAD tendrn que ser archivos de texto, formato TXT y la estructura
de cada registro ser la que cada aplicacin defina y/o requiera.

Funcionamiento General:
Desde un punto determinado de una aplicacin se realiza la llamada el servlet genrico de
upload.
Aparece una ventana de peticin de la localizacin del fichero a cargar.
El servlet sube el fichero al servidor y lo carga en las tablas temporales tanto en lneas
como en fichero.
El archivo ya cargado ser tratado por nuestra aplicacin.
Una vez procesada esta informacin los datos se borrarn de las tablas temporales por
nuestra aplicacin.

Se realizarn los siguientes pasos:

1.- Generacin de una Clave Externa.

Pgina 32 de 72

Forms v6 y v10
Manual del desarrollador
Se genera en nuestra aplicacin, desde el mdulo que llame al servlet con un criterio de clave
nica, por ejemplo del tipo: USER_YYYYMMDD_HH24:MI:SS

2.- Llamada al Servlet

La llamada al Servlet debe ser como se describe a continuacin:


http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=<bd>&user=<user>&apli=<apli>&clave=<cla
ve>
&plantilla=<plantilla>&opcclob=T

Los parmetros del querystring son los siguientes:


1. <bd> - base de datos donde se va a dejar la informacin del fichero
2. <user> - usuario que realiza la operacin (no se utiliza para la conexin)
3. <apli> - aplicacin que hace la carga
4. <clave> - clave de referencia para localizar el registro
5. <plantilla> - plantilla htm a utilizar (opcional, existe una plantilla por defecto)
6. <opcclob> - Valores vlidos:
T - Carga de Fichero de texto a campo CLOB y campo BLOB

Ejemplos de llamadas:

http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm1003_orcl8&user=USU1&apli=USUG&clave=U
SU1_20021217_101330&plantilla=defecto&opcclob=T

http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm21_denivel2&user=GAT1&apli=GAT&clave=
GAT1_20021217_101330&plantilla=azul &opcclob=T

Una vez finalizado el Programa Servlet ya se han cargado las tablas Temporales y se ha generado un
registro por cada lnea del Fichero de texto en la tabla GAT_UPLOAD_LINEA y un registro en la tabla
GAT_UPLOAD_BLOB con el fichero blob

3.-Carga de Blob a tablas de nuestra aplicacin


Transferencia del registro recin insertado en tablas temporales a la tabla de nuestra aplicacin XXXX (
XXXX_TABLA_BLOB) con una sentencia insert del siguiente estilo:
insert into XXXX_TABLA_BLOB (pk1, ., campo_blob)
(select :pk1, , b.it_contenido from GAT_UPLOAD_BLOB b, GAT_UPLOAD_FICHERO a
where a.nm_fichero = b.nm_fichero and
a.cod_aplicacion = :global.cod_aplicacion and
a.cod_usuario = USER and

Pgina 33 de 72

Forms v6 y v10
Manual del desarrollador
b.cd_cl_externa = :cla)

siendo:
:pk1

campo clave de la tabla XXXX_TABLA_BLOB de la aplicacin XXXX.

:cla

campo clave externa que se envi en paso 2 en la llamada al Servlet upload.exe

(en caso de que la tabla contenga ms de un campo clave u otros campos se cumplimentarn
en la sentencia insert anterior)

En este pto. ya tenemos el archivo BLOB almacenado en la tabla de nuestra aplicacin


XXXX_TABLA_BLOB

4.- Leer de la Tabla Temporal

A travs de un cursor se leen los registros(uno para cada lnea del fichero de la tabla
GAT_UPLOAD_CLOB) generados por el programa Servlet. El cursor nos permite operar con cada
registro(lnea del fichero) y realizar la operacin que necesitemos.
NOTA: No se debe realizar la lectura de los registros hasta que el programa Servlet no ha finalizado.

5.- Borrado de Registros de Tablas Temporales

Una vez finalizada la lectura de los registros en las tablas temporales GAT_UPLOAD_.... se realizar el
borrado de nuestros registros.

NOTA: Tanto en la carga de Blob como de Clob el nombre de Fichero que se indique debe ser nico
, para ello se puede utlizar la nomenclatura USER_DDMMYYYY_HHMMSS

7.3.4

CARGA DE ARCHIVOS BINARIOS A BLOB

Funcionamiento General:
Desde un punto determinado de una aplicacin se realiza la llamada el servlet genrico de upload.
Aparece una ventana de peticin de la localizacin del fichero a cargar.
El servlet sube el fichero al servidor y carga las tablas temporales
Se transfiere el Blob de la tabla temporal a la tabla de mi aplicacin
Finalizada la transferencia se borra de las tablas temporales los registros asociados al fichero
cargado

Se realizarn los siguientes pasos:

1.- Generacin de una Clave Externa.

Pgina 34 de 72

Forms v6 y v10
Manual del desarrollador

Se genera en nuestra aplicacin, desde el mdulo que llame al servlet con un criterio de clave
nica, por ejemplo del tipo: USER_YYYYMMDD_HH24:MI:SS

2.- Ejecucin del Servlet de carga de ficheros con la opcin BLOB -opcblob-.

La llamada al servlet debe ser como se describe a continuacin:


http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=<bd>&user=<user>&apli=<apli>&clave=<cla
ve>
&plantilla=<plantilla>&opcblob=C

Los parmetros del querystring son los siguientes:

1. <bd> - base de datos donde se va a dejar la informacin del fichero


2. <user> - usuario que realiza la operacin (no se utiliza para la conexin)
3. <apli> - aplicacin que hace la carga
4. <clave> - clave de referencia para localizar el registro
5. <plantilla> - plantilla htm a utilizar (opcional, existe una plantilla por defecto)
6. <opcblob> - Valores vlidos:
C - Carga de archivos a tablas temporales
V - Descarga/Visualizacin de campos BLOB a fichero
para su posterior visualizacin

7. <zip> - Valores Vlidos


S - El fichero se almacenar comprimido
N - El fichero no se almacenar comprimido. (Opcional,

no es

necesario aadir ste parmetro, por defecto no se comprime).

Ejemplos de llamadas:

http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm1003_orcl8&user=USU1&apli=USUG&clave=U
SU1_20021217_101858&plantilla=defecto&opcblob=C

http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm21_denivel2&user=GAT1&apli=GAT&clave=GA
T_20021217_101858&plantilla=azul&opcblob=C&zip=S

En este pto. ya tenemos el archivo BLOB cargado en las tablas temporales GAT_UPLOAD_...

Pgina 35 de 72

Forms v6 y v10
Manual del desarrollador

3.- Carga de Blob a tablas de nuestra aplicacin


Transferencia del registro recin insertado en tablas temporales a la tabla de nuestra aplicacin
XXXX ( XXXX_TABLA_BLOB) con una sentencia insert del siguiente estilo:
insert into XXXX_TABLA_BLOB (pk1, ., campo_blob)
(select :pk1, , b.it_contenido from GAT_UPLOAD_BLOB b, GAT_UPLOAD_FICHERO a
where a.nm_fichero = b.nm_fichero and
a.cod_aplicacion = :global.cod_aplicacion and
a.cod_usuario = USER and
b.cd_cl_externa = :cla)

siendo:
:pk1

campo clave de la tabla XXXX_TABLA_BLOB de la aplicacin XXXX.

:cla

campo clave externa que se envi en paso 2 en la llamada al Servlet upload.exe

(en caso de que la tabla contenga ms de un campo clave u otros campos se cumplimentarn
en la sentencia insert anterior)

En este pto. ya tenemos el archivo BLOB almacenado en la tabla de nuestra aplicacin


XXXX_TABLA_BLOB

4.- Borrado de Registros de Tablas Temporales

Una vez almacenado el campo BLOB en nuestra aplicacin debemos realizar el borrado de las
tablas temporales GAT_UPLOAD para el registro recin tratado.

NOTA: No se debe realizar el borrado hasta que el programa Servlet ha terminado

NOTA: Tanto en la carga de Blob como de Clob el nombre de Fichero que se indique debe ser nico
, para ello se puede utlizar la nomenclatura USER_DDMMYYYY_HHMMSS

7.3.5

CARGA DE ARCHIVOS BINARIOS A BLOB DESDE URL

Funcionamiento General:

Pgina 36 de 72

Forms v6 y v10
Manual del desarrollador
Desde un punto determinado de una aplicacin se realiza la llamada el servlet genrico de
upload pasandole entre otros parmetros la url donde est ubicado el fichero. El servlet deposita el
fichero en la tabla gat_upload_blob
Se transfiere el Blob de la tabla temporal a la tabla de mi aplicacin
Finalizada la transferencia se borra de las tablas temporales los registros asociados al
fichero cargado

Se realizarn los siguientes pasos:

1.- Generacin de una Clave Externa.

Se genera en nuestra aplicacin, desde el mdulo que llame al servlet con un criterio de clave
nica, por ejemplo del tipo: USER_YYYYMMDD_HH24:MI:SS

2.- Ejecucin del Servlet de carga de ficheros con la opcin BLOB -opcblob-.

La llamada al servlet debe ser como se describe a continuacin:


http://desarrollo.madrid.org/upload/servlet/Servidor?opcion=CargarDeURL&bd=<bd>&user=<user>
&apli=<apli>&clave=<clave>&plantilla=<plantilla>&nombre_fich=<nombre_fich>&urlfichero=<urlfich
ero>&zip=<zip>

Los parmetros del querystring son los siguientes:


1. <opcion> CargarDeURL
2. <bd> - base de datos donde se va a dejar la informacin del fichero
3. <user> - usuario que realiza la operacin (no se utiliza para la conexin)
4. <apli> - aplicacin que hace la carga
5. <clave> - clave de referencia para localizar el registro
6. <plantilla> - plantilla htm a utilizar (opcional, existe una plantilla por defecto)
7. <nombre_fich> - Nombre del fichero a cargar
8. <urlfichero> - url del fichero a cargar
7. <zip> - Valores Vlidos
S - El fichero se almacenar comprimido
N - El fichero no se almacenar comprimido. (Opcional,
parmetro, por defecto no se comprime).

Ejemplos de llamadas:

Pgina 37 de 72

no es necesario aadir ste

Forms v6 y v10
Manual del desarrollador
http://desarrollo.madrid.org/upload/servlet/Servidor?opcion=CargarDeURL&bd=icm21_denivel2&user=ADM
ON&apli=USUI&clave=ADMON_20021217_101858&plantilla=&nombre_fich=ADMON_20071108_121949_
73.pdf&urlfichero=http://NTICMAPL11/web_reps/ADMON_20071108_121949_73.pdf&zip=N

En este pto. ya tenemos el archivo BLOB cargado en las tablas temporales GAT_UPLOAD_...

3.- Carga de Blob a tablas de nuestra aplicacin


Transferencia del registro recin insertado en tablas temporales a la tabla de nuestra aplicacin XXXX (
XXXX_TABLA_BLOB) con una sentencia insert del siguiente estilo:
insert into XXXX_TABLA_BLOB (pk1, ., campo_blob)
(select :pk1, , b.it_contenido from GAT_UPLOAD_BLOB b, GAT_UPLOAD_FICHERO a
where a.nm_fichero = b.nm_fichero and
a.cod_aplicacion = :global.cod_aplicacion and
a.cod_usuario = USER and
b.cd_cl_externa = :cla)

siendo:
:pk1

campo clave de la tabla XXXX_TABLA_BLOB de la aplicacin XXXX.

:cla

campo clave externa que se envi en paso 2 en la llamada al Servlet upload.exe

(en caso de que la tabla contenga ms de un campo clave u otros campos se cumplimentarn
en la sentencia insert anterior)

En este pto. ya tenemos el archivo BLOB almacenado en la tabla de nuestra aplicacin


XXXX_TABLA_BLOB

4.- Borrado de Registros de Tablas Temporales

Una vez almacenado el campo BLOB en nuestra aplicacin debemos realizar el borrado de las tablas
temporales GAT_UPLOAD para el registro recin tratado.

NOTA: No se debe realizar el borrado hasta que el programa Servlet ha terminado

NOTA: Tanto en la carga de Blob como de Clob el nombre de Fichero que se indique debe ser nico
, para ello se puede utlizar la nomenclatura USER_DDMMYYYY_HHMMSS

7.3.6

DESCARGA Y VISUALIZACION DE BLOB

Funcionamiento General

Pgina 38 de 72

Forms v6 y v10
Manual del desarrollador
Se realiza la transferencia de un Blob de mi aplicacin a tablas temporales a travs de la funcin
GAT_FUNC_CARGA_BLOB
Se ejecuta el programa servlet que descarga y visualiza el Blob de la tabla temporal
Finalizada la descarga-visualizacin la aplicacin borrar de las tablas temporales la informacin
recin tratada.

Se realizarn los siguientes pasos:

1.- Generacin de una Clave Externa.

Se genera en nuestra aplicacin, desde el mdulo que llame al servlet con un criterio de clave nica, por
ejemplo del tipo: USER_YYYYMMDD_HH24:MI:SS

2.- Paso de BLOB de nuestra aplicacin a tablas temporales


Se transfiere el registro de la tabla de nuestra aplicacin XXXX (XXXX_TABLA_BLOB) que contiene el
campo BLOB a tablas temporales GAT_UPLOAD_... mediante la ejecucin de la siguiente funcin de
carcter general del ncleo de Oracle
GAT_FUNC_CARGA_BLOB:
La funcin obtiene el n de registros que recupera la sentencia where que pasamos como parmetro.

Parmetros de entrada de la Funcin:


w_Cod_Aplicacion:

Cdigo de aplicacin

w_Cd_Cl_Externa:

Clave generada por la aplicacin

w_Nom_Archivo:

Nombre del archivo a generar para su posterior descarga

w_Tabla_Apl:

Nombre de la tabla de la aplicacin (XXXX_TABLA_BLOB)

w_Clave_Tabla_Apl:

Sentencia where para localizar el registro nico que contiene el BLOB


Por ejemplo: WHERE ID_BLOB=9877 and CDTIPO=A

w_Campo_Blob:

Nombre del campo BLOB a extraer de la anterior tabla

Parmetros de salida de la Funcin:


z_Mensaje_Err:

Mensaje de Error si se produce.

En ste punto se debe realizar COMMIT; para confirmar la insercin del campo BLOB en las tablas
temporales y que el proceso externo Servlet pueda obtener sta informacin

3.- Ejecucin del Servlet para realizar la descarga-visualizacin del campo BLOB

Pgina 39 de 72

Forms v6 y v10
Manual del desarrollador
La llamada al servlet debe ser como se describe a continuacin:
http://desarrollo.madrid.org/upload/servlet/Servidor?bd=<bd>&user=<user>&apli=<apli>&clave=<cl
ave>&plantilla=<plantilla>&opcblob=V

Los parmetros del querystring son los siguientes:

1. <bd> - base de datos donde se va a dejar la informacin del fichero


2. <user> - usuario que realiza la operacin (no se utiliza para la conexin)
3. <apli> - aplicacin que hace la carga
4. <clave> - clave de referencia para localizar el registro
5. <plantilla> - plantilla htm a utilizar (opcional, existe una plantilla por defecto)
6. <opcblob> - Valores vlidos:
C - Carga de archivos a tablas temporales
V - Descarga/Visualizacin de campos BLOB a fichero
para su posterior visualizacin

7. <zip> - Valores Vlidos:


S - El fichero se almacenar comprimido
N - El fichero no se almacenar comprimido. (Opcional,

no es necesario

aadir ste parmetro, por defecto no se comprime).

Ejemplos de llamadas:

http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm1003_orcl8&user=USU1&apli=USUG&clave=U
SU1_20021217_101858&plantilla=defecto&opcblob=V

http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm21_denivel2&user=GAT1&apli=GAT&clave=GA
T_20021217_101858&plantilla=azul&opcblob=V&zip=S

Automticamente el Servlet realizar la descarga del BLOB generando un archivo en disco y


posteriormente proceder a visualizar el documento correspondiente con su aplicacin asociada.

4.- Borrado de Registros de Tablas Temporales


Una vez visualizado el fichero debemos realizar el borrado de las tablas temporales GAT_UPLOAD para
el registro recin tratado.

NOTA: No se debe realizar el borrado hasta que el programa Servlet ha terminado

Pgina 40 de 72

Forms v6 y v10
Manual del desarrollador
7.3.7

Funciones GAT_FUNC_CARGA_BLOB y GAT_FUNC_CARGA_CLOB

CREATE OR REPLACE FUNCTION GAT_FUNC_CARGA_BLOB


(w_Cod_Aplicacion IN GAT_UPLOAD_FICHERO.Cod_Aplicacion%TYPE ,
w_Cd_Cl_Externa IN GAT_UPLOAD_FICHERO.Cd_Cl_Externa%TYPE,
w_Nom_Archivo GAT_UPLOAD_FICHERO.Nom_Archivo%TYPE,
w_Tabla_Apl IN Varchar2,
w_Clave_Tabla_Apl IN Varchar2,
w_Campo_Blob IN Varchar2,
z_Mensaje_Err OUT Varchar2) RETURN Integer IS
/*******************************************************************************************
FUNCIN:

GAT_FUNC_CARGA_BLOB

DESCRIPCIN: Realiza Descarga Blob desde la tabla Origen 'Tabla de la Aplicacin' a la tabla
de Trabajo.
La funcin obtiene el N de Registros que recupera la Clave de la Tabla de la Aplicacin
Se obtiene 1 la funcin ha funcionado correctamente
Se obtiene 0 >= 2 La Clave de la tabla de la Aplicacin es errnea no recupera 1 Registro
Si devuelve -1 se ha producido un error en la Funcin
Si devuelve -2 se ha detectado parmetros obligatorios de Entrada con valor Nulo
********************************************************************************************/

v_Nm_Fichero GAT_UPLOAD_FICHERO.Nm_Fichero%TYPE;
v_Cuenta Integer;
BEGIN
-- Validaciones de Parmetros
IF w_Cod_Aplicacion IS NULL OR w_Cd_Cl_Externa IS NULL OR w_Nom_Archivo IS NULL OR
w_Tabla_Apl IS NULL OR w_Campo_Blob IS NULL THEN
z_Mensaje_Err := 'Los parmetros de entrada de la Funcin no pueden ser Nulos.';
RETURN (-2);
END IF;
-Select GAT_SEQ_UPLOAD.NEXTVAL INTO v_Nm_Fichero FROM DUAL;
-INSERT INTO GAT_UPLOAD_FICHERO (Nm_Fichero, Cod_Aplicacion, Cod_Usuario, Fc_Carga,
Cd_Cl_Externa, Nom_Archivo)
VALUES(v_Nm_Fichero, w_Cod_Aplicacion, USER, SYSDATE, w_Cd_Cl_Externa,
w_Nom_Archivo);
EXECUTE IMMEDIATE 'INSERT INTO GAT_UPLOAD_BLOB (Nm_Fichero, It_Contenido) Select '||
v_Nm_Fichero||', '||w_Campo_Blob||' FROM '||w_Tabla_Apl||' '||w_Clave_Tabla_Apl;

Pgina 41 de 72

Forms v6 y v10
Manual del desarrollador
-- Valida que Clave Principal recupera un registro ----------v_Cuenta := SQL%ROWCOUNT;
IF v_Cuenta = 0 THEN z_Mensaje_Err := 'La Clave Principal No ha obtenido ningn registro.';
RETURN(v_Cuenta);
ELSIF v_Cuenta >= 2 THEN z_Mensaje_Err := 'La Clave Principal ha obtenido Ms de 1 registro.';
RETURN(v_Cuenta);
END IF;
-------------------------------------------------------------

RETURN(v_Cuenta);

EXCEPTION WHEN OTHERS THEN z_Mensaje_Err := SQLERRM;


RETURN(-1);

END;
/

CREATE OR REPLACE FUNCTION GAT_FUNC_CARGA_CLOB


(w_Cod_Aplicacion IN GAT_UPLOAD_FICHERO.Cod_Aplicacion%TYPE ,
w_Cd_Cl_Externa IN GAT_UPLOAD_FICHERO.Cd_Cl_Externa%TYPE,
w_Nom_Archivo GAT_UPLOAD_FICHERO.Nom_Archivo%TYPE,
w_Tabla_Apl IN Varchar2,
w_Clave_Tabla_Apl IN Varchar2,
w_Campo_Clob IN Varchar2,
z_Mensaje_Err OUT Varchar2,
w_Campo_Nm_Linea IN Varchar2 DEFAULT Null
) RETURN Integer IS
/*******************************************************************************************
FUNCIN:

GAT_FUNC_CARGA_CLOB

DESCRIPCIN: Realiza Descarga Clob desde la tabla Origen 'Tabla de la Aplicacin' a la tabla
de Trabajo.
La funcin obtiene el N de Registros que recupera la Clave de la Tabla de la Aplicacin
Se obtiene 1 la funcin ha funcionado correctamente
Se obtiene 0 >= 2 La Clave de la tabla de la Aplicacin es errnea no recupera 1 Registro
Si devuelve -1 se ha producido un error en la Funcin
Si devuelve -2 se ha detectado parmetros obligatorios de Entrada con valor Nulo
********************************************************************************************/

v_Nm_Fichero GAT_UPLOAD_FICHERO.Nm_Fichero%TYPE;

Pgina 42 de 72

Forms v6 y v10
Manual del desarrollador
v_Cuenta Integer;
BEGIN
-- Validaciones de Parmetros
IF w_Cod_Aplicacion IS NULL OR w_Cd_Cl_Externa IS NULL OR w_Nom_Archivo IS NULL OR
w_Tabla_Apl IS NULL OR w_Campo_Clob IS NULL THEN
z_Mensaje_Err := 'Los parmetros de entrada de la Funcin no pueden ser Nulos.';
RETURN (-2);
END IF;
--

-- Evalo si se va a procesar un Conjunto de Lneas o un CLOB


------------------------------------------------------------------------------------ Tratamiento de 1 CLOB -------------------------------------------------------------------------------------------------------------------------------------------IF w_Campo_Nm_Linea IS NULL THEN

Select GAT_SEQ_UPLOAD.NEXTVAL INTO v_Nm_Fichero FROM DUAL;


-INSERT INTO GAT_UPLOAD_FICHERO (Nm_Fichero, Cod_Aplicacion, Cod_Usuario, Fc_Carga,
Cd_Cl_Externa, Nom_Archivo, Nm_Lineas)
VALUES(v_Nm_Fichero, w_Cod_Aplicacion, USER, SYSDATE, w_Cd_Cl_Externa,
w_Nom_Archivo, 1);
EXECUTE IMMEDIATE 'INSERT INTO GAT_UPLOAD_LINEA (Nm_Fichero, Nm_Linea, It_Contenido)
SELECT '||
v_Nm_Fichero||', '||'1 ,'||w_Campo_Clob||' FROM '||w_Tabla_Apl||' '||w_Clave_Tabla_Apl;

-- Valida que Clave Principal recupera un registro ----------v_Cuenta := SQL%ROWCOUNT;


IF v_Cuenta = 0 THEN z_Mensaje_Err := 'La Clave Principal No ha obtenido ningn registro.';
RETURN(v_Cuenta);
ELSIF v_Cuenta >= 2 THEN z_Mensaje_Err := 'La Clave Principal ha obtenido Ms de 1 registro.';
RETURN(v_Cuenta);
END IF;

------------------------------------------------------------------------------------ Tratamiento de un Conjunto de Lneas ----------------------------------------------------------------------------------------------------------------------------ELSIF w_Campo_Nm_Linea IS NOT NULL THEN

Pgina 43 de 72

Forms v6 y v10
Manual del desarrollador
Select GAT_SEQ_UPLOAD.NEXTVAL INTO v_Nm_Fichero FROM DUAL;
-EXECUTE IMMEDIATE 'INSERT INTO GAT_UPLOAD_LINEA (Nm_Fichero, Nm_Linea, It_Contenido)
SELECT '||
v_Nm_Fichero||', '||w_Campo_Nm_Linea||', '||w_Campo_Clob||' FROM '||w_Tabla_Apl||'
'||w_Clave_Tabla_Apl;
-- Valida que Clave Principal recupera algn registro ----------v_Cuenta := SQL%ROWCOUNT;
IF v_Cuenta = 0 THEN z_Mensaje_Err := 'La Clave Principal No ha obtenido ningn registro.';
RETURN(v_Cuenta);
END IF;
INSERT INTO GAT_UPLOAD_FICHERO (Nm_Fichero, Cod_Aplicacion, Cod_Usuario, Fc_Carga,
Cd_Cl_Externa, Nom_Archivo, Nm_Lineas)
VALUES(v_Nm_Fichero, w_Cod_Aplicacion, USER, SYSDATE, w_Cd_Cl_Externa,
w_Nom_Archivo, v_Cuenta);

END IF;
-------------------------------------------------------------------------------------------

RETURN(v_Cuenta);

EXCEPTION WHEN OTHERS THEN z_Mensaje_Err := SQLERRM;


RETURN(-1);
END;
/

Pgina 44 de 72

Forms v6 y v10
Manual del desarrollador
7.4

ESCANEO DE DOCUMENTOS

PROCESO:
1. Forms ejecuta el Servlet pasndole los parmetros adecuados (bajo el frame 'oculto')
Ejemplo de Llamada al Servlet desde Forms:

1 - Es necesario incorporar en el fichero ini de la Aplicacin Forms el siguiente parmetro:

[LOAD]
; *** Parmetros vlidos solamente para la ejecucin de Upload y DownLoad y ActiveX de
Escaner
Upload_Exe=http://icmweb01.icm.es/util/upload/servlet/Servidor

2 - En el programa Forms incorporando el siguiente Cdigo de Ejecucin del Servlet:

DECLARE
WURL VARCHAR2(250);

-- almacena la URL de llamada al Servlet con los parmetros

necesarios
v_Upload_Exe VARCHAR2(200); -- almacena la direccin URL del Servlet obtenida del parmetro
Upload_Exe del fichero ini de la Aplicacin
-- Los posibles Valores de :BOTONES.Formato son:

JPG

--

TIF, TIFBN
PDF, PDFBN

-- Los posibles Valores de :BOTONES.Vis_Imagen son:

--

-- Los posibles Valores de :BOTONES.Vis_Interface son: S


--

BEGIN
v_Upload_Exe := LEER_FICH_INI(:GLOBAL.Fich_Ini ,'Upload_Exe');

:BOTONES.ID_CLAVE := USER||TO_CHAR(SYSDATE,'DDMMYYYYHH24MISS'); -- Generacin de


Clave nica dinmicamente

WURL :=
v_Upload_Exe||'?opcion=GeneraActiveX'||'&BD='||:GLOBAL.WBD||'&APL='||:GLOBAL.COD_APLICACION||
'&CLAVE='||:BOTONES.ID_CLAVE||'&USU='||USER||'&FORMATO='||:BOTONES.Formato||'&VIS_IMAG='||
:BOTONES.Vis_Imagen||'&VIS_INTF='||:BOTONES.Vis_Interface;

WEB.SHOW_DOCUMENT(WURL,'oculto'); -- Ejecucin del Servlet


END;

Pgina 45 de 72

Forms v6 y v10
Manual del desarrollador
2. El Servlet crea pgina -incrustando el ActiveX- y la invoca

3. Si es la 1 vez que se ejecuta esta opcin se solicitar la instalacin automtica del ActiveX
en el puesto

4. Se interacta con el ActiveX para realizar el escaneo


Requisitos:
- se ha de tener un escner homologado con los driver correctamente instalados

7.5

ENVIO DE CORREO

Como solucin al envo de correo electrnico desde Forms se han elaborado varias soluciones que a
continuacin se detallan en funcin de la versin de Oracle Forms a utilizar (Forms4.5 Forms6i) y del
tipo de envo a realizar:

7.5.1

Envo de correo desde Forms v4.5 (Unix)

Esta funcionalidad se realiza mediante la ejecucin de un mdulo genrico en Perl que es el encargado de
realizar el envo, cara a nuestros desarrollos es tan simple como realizar la ejecucin HOST del mdulo
sendmail.pl con los siguientes parmetros:
sendmail.pl f UsuarioRemitente t UsuarioDestino u Asunto m Mensaje s Servidor a
FicheroAdjunto cc UsuarioCopia q

siendo los parmetros siguientes:

-f

Usuario que enva el correo

-t

Usuario/s destinatario del correo (separados por espacio)

-u

Asunto del correo

-m

Texto del mensaje de correo

-s

Servidor, posibles valores:


I=Interno E=Externo (por defecto I)

-a

Fichero/s adjuntos (separados por espacio)

-cc

Con copia a

-q

se enviar siempre para obviar la salida

Un ejemplo de llamada sera el siguiente:

Pgina 46 de 72

Forms v6 y v10
Manual del desarrollador

sendemail.pl f usuario@madrid.org t UsuarioDestino1@madrid.org


UsuarioDestino2@madrid.org u Envio de correo m Este correo se enva como prueba de
correo desde Forms v4.5 s I a /tmp/fichero.txt q

7.5.2

Envo de correo desde Forms6i -sin archivos adjuntos-

Desde Forms6i en Web para poder enviar este tipo de correos sin archivos adjuntos- se ha creado una
funcin en el ncleo de Oracle SIS_FUNC_ENVIO_CORREO que nos permitir de modo rpido e
inmediato realizar el envo de correos.

Los parmetros utilizados en esta funcin son los siguientes:

Remitente

(IN) indica el usuario que enva el correo

Destinatario

(IN) indica el/los usuarios destinatarios del correo (separados por el

carcter ; )
Asunto

...:

(IN) asunto del correo

Mensaje

...:

(IN) texto del correo

TipoDestino

...:

(IN) tipo de destino

I Interno o Externo o Masivo , Nota: en caso de

envio masivo se debe informar al grupo de Servidores de Correo la periodicidad y cantidad en el


envio de correos para evitar diversos problemas (catalogacin de spam, saturacin,..
(por defecto I)
Salida

(Out)

Result

El resultado de la funcin es un campo numrico que devolver:

en caso de envo errneo, el texto del error

0 envio correcto
1 envo erroneo (el texto del error en el campo out Salida)

Un ejemplo de envo de este tipo de correo lo tenis disponible en la siguiente URL,


http://nticmdes01.icm.es/forms6/soporte.htm

7.5.3

Envo de correo desde Forms 6i -con archivos adjuntos

Se implementa la funcionadad de enviar archivos adjuntos que no existan en disco y que tengamos
almacenados en campos LOB de base de datos (hasta ahora tan solo se enviaban como adjuntos
normalmente el resultado de la ejecucin de un Report, un archivo .pdf que exista en el disco del servidor
de aplicaciones).

Pgina 47 de 72

Forms v6 y v10
Manual del desarrollador
Estos archivos que no existen en disco sern generados por el trabajo Batch icm_correo.exe como
resultado de la ejecucin de una consulta, esta consulta se debe de informar previamente en la tabla
XXXX_CORREO bajo el nuevo atributo QUERY que se ha de aadir a la estructura tipo que tenamos en
nuestra tabla correo de aplicacin (para los que utilizaban anteriormente esta funcionalidad, no obstante
no es obligatorio, el envo de correo seguir funcionando como hasta ahora sin aadir este atributo pero no
se dispondr de esta nueva funcionalidad).
Por tanto la definicin completa de la tabla tipo de cada aplicacin XXXX_CORREO se debe de ajustar a
la siguiente estructura:

Desc XXXX_CORREO
CD_CLAVE

VARCHAR2(30)

(clave nica)

REMITENTE

VARCHAR2(30)

(quien enva el correo)

DESTINATARIO

VARCHAR2(2000) (destinatario/s del correo, separado por el caract ;

)
TITULO

VARCHAR2(250)

(asunto del correo)

MENSAJE

CLOB

(cuerpo del correo)

ADJUNTOS

VARCHAR2(250)

(archivos adjuntos separados con el caract. ; )

TP_ENVIO

VARCHAR2(1)

(tipo de envio I-Individual , M-Masivo defecto

TP_DESTINO

VARCHAR2(1)

(tipo de envio I-Interno , E-Externo defecto I-)

FC_SOLICITUD

DATE

(fecha de solicitud de envo)

FC_ENVIO

DATE

(no cumplimentar, lo hace el proceso de envo de

VARCHAR2(250)

(no cumplimentar, lo hace el proceso de envo de

CLOB

nuevo atributo (cumplimentar en el caso de

M-)

correo)
RESULTADO
correo)
QUERY

generar archivo/s adjunto a partir de una consulta en B.D.)


Con este nuevo atributo QUERY podremos establecer una correspondencia con el atributo ya existente
ADJUNTOS para obtener el archivo de la base de datos del siguiente modo:
ADJUNTOS = Archivo_Prueba1.doc ;
QUERY = SELECT CAMPO_BLOB FROM XXXX_DOCUMENTOS_CORREO WHERE
IDCOD = 9883 ;

Si no se cumplimenta el atributo QUERY (=null o no existe en la tabla) siempre se obtendrn el/los


archivos contenidos en ADJUNTOS del disco del servidor.

Pgina 48 de 72

Forms v6 y v10
Manual del desarrollador
Desde el programa Forms, al hacer insert en la tabla XXXX_CORREO y antes de hacer COMMIT, se
llamar a un procedimiento XXXX_PROC_CORREO_AUX creado con anterioridad en la B.D con el
siguiente cdigo:

CREATE OR REPLACE PROCEDURE XXXX_PROC_CORREO_AUX (w_Id_Correo IN Varchar2,


w_Bufer IN Varchar2) IS

v_ClobLocator Clob;

BEGIN
Select mensaje INTO v_ClobLocator FROM XXXX_CORREO
WHERE cd_clave = w_Id_Correo;

DBMS_LOB.WRITEAPPEND(v_ClobLocator, Length(w_Bufer), w_bufer);

END;

A continuacin unos ejemplos con distintas posibilidades en el envo:

1.- Envo de 1 archivo adjunto obtenido de base de datos


ADJUNTOS = Archivo_Prueba1.doc ;
QUERY = SELECT CAMPO_BLOB FROM XXXX_DOCUMENTOS_CORREO WHERE
IDDOC = 9883 ;

2.- Envo de 2 archivos adjuntos obtenidos de base de datos


ADJUNTOS = Archivo_Prueba1.doc ; Archivo_Prueba2.xls ;
QUERY = SELECT CAMPO_BLOB FROM XXXX_DOCUMENTOS_CORREO WHERE
IDDOC = 9883 ; SELECT CAMPO_BLOB FROM XXXX_DOCUMENTOS_CORREO WHERE
IDDOC= 998 ;

3.- Envo de 3 archivos adjuntos, dos de ellos obtenidos de disco, y el tercero obtenido de base de
datos:
ADJUNTOS = d:\icm\web\web_reps\USU1_20031222_102307_98.pdf ;
d:\icm\web\web_reps\USU1_20031222_102407_14.pdf ; Archivo_Prueba2.xls ;
QUERY = ; ; SELECT CAMPO_BLOB FROM XXXX_DOCUMENTOS_CORREO WHERE
IDDOC = 9883 ;

(como se puede ver los dos primeros archivos no tienen select asociada en el atributo
QUERY)

Pgina 49 de 72

Forms v6 y v10
Manual del desarrollador

Una prueba de integracin de esta funcionalidad la podis comprobar desde la siguiente URL:
http://nticmdes01/forms6/lanza_ejemplos/envio_correo_forms.htm

Pgina 50 de 72

Forms v6 y v10
Manual del desarrollador

7.6

INFORMES CRYSTAL REPORTS

7.6.1

Obtener el token de business Objects


Esto se realiza ejecutando la funcin de base de datos

WS_PACK_CRYSTALR_0001.OBTENER_TOKEN

/*******************************************************************************************
* FUNCTION: OBTENER_TOKEN
*
* DESCRIPCIN: Para un cod. usuario y clave (Business Objects) obtiene el token de crystal report
*
* PARMETROS:
*

w_usuario: Parmetro Obligatorio. Cdigo de Usuario (Business Objects)

w_clave: Parmetro Obligatorio. Clave encriptada (Business Objects)

z_Token: Parmetro de salida. token para ejecucion informe crystal report

z_Cd_Mensaje_Err: Parmetro de salida. Codigo de Mensaje de Error

z_Ds_Mensaje_Err: Parmetro de Salida. Descripcin de Mensaje de Error

*
* VALORES DE RETORNO DE LA FUNCIN: True
*

False

*
* CODIGOS Y DESCRIPCIONES DE ERROR:
*

Codigo de Error

---------------

100

Descripcin
------------

'Los parmetros w_usuario, w_clave son obligatorios'


Cualquier error o excepcin de Oracle: SQLERRM

*
********************************************************************************************/

A la funcin se le pasarn como parmetros el Usuario y Clave (de business Objects) . stos
parmetros se almacenan en el fichero ini, ejemplo:

[BUSINESS OBJECTS]
;*** Parmetros vlidos solamente para obtener token de B.O
bo_usuario=EJPL_Usu
bo_clave=C7FFB972B34AB66E2C45124586507E4F

7.6.2

Ejecucin de Informe Crystal Report

Pgina 51 de 72

Forms v6 y v10
Manual del desarrollador
Una vez obtenido el token se compone la url de ejecucin del informe (incluyenndo el token) y
se ejecuta con la built-in WEB.SHOW_DOCUMENT , con target _blank

Ejemplo:
WEB.SHOW_DOCUMENT(http://icmdesbi01:8080/OpenDocument/opendoc/openDocument.jsp?sType=rpt&sDocN
ame=EJPLListadoEmpleados&sOutputFormat=P&token=icmdesbi01:6400@34236JClHcPZDmlET75s534235JBAqEg6
vt8ePfmgE, _blank);

7.7

ICONOS

Tratamiento de Iconos - Gif mediante el programa de diseo de imgenes Microangelo

Inicialmente y como recordatorio simplemente comentaros que en aplicaciones forms en tipo de


ejecucin Cliente/Servidor Windows las imgenes asociadas a los botones han de ser ficheros de iconos
(.ico) y sin embargo cuando ejecutamos nuestras aplicaciones en modo Web las imgenes asociadas a los
botones han de ser ficheros Gif (.gif). Por lo tanto se necesita una herramienta de fcil manejo que permita
disear este tipo de imgenes y establecer de modo rpido el cambio entre ambos formatos (en versin
v10g al no existir ejecucin Cliente/Servidor solamente necesitamos gif).
Con el empleo del programa Microangelo se permiten crear nuevos iconos y una vez creados estos pasar
a formato Gif realizando los siguientes pasos:
Creacin de un nuevo icono

- accedemos mediante el men:


File - New y seleccionamos Icon como en la figura siguiente:

Se aconseja como estandar de Developer v10g la definicin de los botones con un ancho-alto de
18X18 por lo tanto a la hora de crear el icono no se han de superar estas coordendas (aunque las
coordenadas que nos aparezcan sean de 32X32) para no perder imagen a la hora de cargar esta
sobre el botn.
Al grabar el fichero creado se recuerda que el nombre ha de contener el prefijo de la aplicacin y
no superar los 8 caract. ( por ejem. usu_xxxx.ico)

Creacin de ficheros Gif (.gif) a partir de ficheros de Iconos (.ico)

Pgina 52 de 72

Forms v6 y v10
Manual del desarrollador
- en una ventana abrimos el fichero de icono y seleccionamos el area de imagen ( 18X18 de
mximo) para ello con la porcin seleccionada realizaremos un Copy de la misma.

- abrimos una nueva ventana (File - New Windows) en la que definimos una imagen con unos
valores predeterminados en cuanto a color y tamao, para ello accedemos a:
Tools - New Image Format y nos aparece la siguiente ventana en la que indicaremos los valores
que a continuacin se han fijado:

- automticamente la herramienta nos genera una pantalla con las dimensiones establecidas
dispuesta a alojar la nueva imagen, para ello y sobre esta nueva ventana hacemos Paste de la
seleccin anterior.
Se aconseja ajustar la imagen al borde izquierdo de la ventana ya que al cargar esta en el botn
en la ejecucin en Web automticamente nos deja un pequeo margen vertical en la izquierda.
Este margen automtico hace que perdamos las 2 ltimas coordenadas a nivel de columna del
fichero por lo tanto se aconseja que sobre estas no haya porcin de imagen alguna.
En la figura siguiente se muestra en gris la porcin de imagen que se mostrar sobre el botn y en
blanco la que nunca se visualizar:

Pgina 53 de 72

Forms v6 y v10
Manual del desarrollador

- una vez realizadas estas consideraciones se pasar a salvar, en este momento se define el
formato de la nueva imagen que ser del tipo Gif.

Se ha realizado la solicitud de adquisicin del programa Microangelo hasta que lo que tengamos el que
este interesado en la herramienta poneros en contacto con nosotros y os dejamos una versin de
evaluacin del mismo.

Nota: a nivel de diseo con Forms se han encontrado casos en los que al asociar un icono a un botn lo
alinea incorrectamente (alineamiento inferior) y por mucho que intentemos solucionarlo no se consigue
dejar correctamente, en estos casos la solucin que hemos observado es, y aunque parezca un poco
estrao, renombrar simplemente el fichero .ico y asociando el nuevo fichero al botn lo alinea
correctamente (Forms debe de heredar alguna propiedad de alineamiento del fichero que caus el

Pgina 54 de 72

Forms v6 y v10
Manual del desarrollador
problema inicialmente que por mucho que lo intentemos asociar a otro botn nos repite el alineaminento
incorrecto).

7.8

PROCESOS BATCH

Para la ejecucin de procesos en batch desde Forms6i bajo Web se ha implementando unos paquetes en
el nucleo de Oracle mediante los cuales se permite realizar una peticin de trabajo e inmediatamente se
puede consultar el estado de la misma.

Los siguientes procedimientos se utilizan para:

-Peticin de un proceso:

- QUJB_PAQ_GENERAL.PETICION(Parametros)
Parmetros:
- Host:mquina donde va a correr el trabajo
- Cola: cola que gestionar el trabajo -Shell: ejecutable a lanzar -Param: parmetros a pasar al ejecutable
-Usuario: usuario que encarga el trabajo
-Mensaje: (salida) mensaje de error en una peticin errnea
Devuelve:
-el numero de peticin (WPETI) que nos ha generado
-en el caso de ERROR devuelve -1

-Ejecucin del mismo:

- QUJB_PAQ_GENERAL.EJECUCION(WPETI,WHOST)
Parmetros:
- N.Peticin:que hemos obtenido en la funcin QUJB_PAQ_GENERAL.PETICION.
-Host:- Host:mquina donde va a correr el trabajo
Devuelve:
-el el caso de ejecucin correcta devuelve 0 .
-en el caso de ERROR devuelve -1.

-Consultar el estado de la peticin

QUJB_PAQ_GENERAL.ESTADO(WPETI)

Parmetros:
-N.peticin: num. de peticin que vamos a comprobar.

Pgina 55 de 72

Forms v6 y v10
Manual del desarrollador
Devuelve:
Uno de los siguientes literales:
- En cola
- En ejecucin
- Terminada
- Peticin desconocida

7.8.1

EJECUCION DE TRABAJOS

Ejemplo de cmo Realizar Una Peticin al Servicio Pipe_Batch

1.- Realizar Peticin

PROCEDURE EJECUTA_BATCH IS
WPARAM

VARCHAR2(250);

WMENS

VARCHAR2(250);

WHOST

VARCHAR2(25);

WCOLA

VARCHAR2(25);

WSHELL

VARCHAR2(99);

WUSER

VARCHAR2(12);

WLIN1

VARCHAR2(50);

WLIN2

VARCHAR2(50);

WLIN3

VARCHAR2(50);

timer_id

Timer;

un_segundo NUMBER(5) := 1000;


BEGIN
-- Extensin ".w2z" para el nuevo visor WordPerfect/Word (anterior extension ".wpz")
:GLOBAL.FICH_DOC := to_char(sysdate,'YYYYMMDDHH24MISS')||'_'||:B20.CDDOCUM||'.w2z';

-- Se rellenan los parmetros de ejecucin del ejecutable (b.d. del fich.ini)


WPARAM := 'bd='||USER||'/'||:GLOBAL.PASSWD||'@icm21_denivel2 operacion='||:B30.RG_OPC||' '||
'codigo='||:B20.CDDOCUM||' '||
'copias='||NVL(TO_CHAR(:B30.COPIAS),'1')||' '||
'fichero='||LEER_FICH_INI(:GLOBAL.FICH_INI,'DocDir')||:GLOBAL.FICH_DOC;

-- Parmetros requeridos para el lanzamiento del trabajo en PipeBatch


WHOST := LEER_FICH_INI(:GLOBAL.FICH_INI,'DocHost');-- Host que ejecutar el trabajo
WCOLA := LEER_FICH_INI(:GLOBAL.FICH_INI,'DocCola');-- Cola dedicada a este
WSHELL := LEER_FICH_INI(:GLOBAl.FICH_INI,'DocExe');

Pgina 56 de 72

-- Nombre del ejecutable a lanzar

Forms v6 y v10
Manual del desarrollador
WUSER := USER;

-- Usuario peticionario

-- Se realiza la Peticin
:B00.WNUMPET := QUJB_PAQ_GENERAL.PETICION(
WHOST,
WCOLA,
WSHELL,
WPARAM,
WUSER,
WLIN1,
WLIN2,
WLIN3,
WMENS);

-- Control de la peticin solicitada


IF :B00.WNUMPET < 0 THEN
MENSAJE('Error al realizar la peticin de impresin del documento');
ELSE
-- Si la peticin es correcta es necesario realizar Commit
-- (el Servicio PipeBatch es un proceso externo)
COMMIT;

-- Se realiza la Ejecucin de la peticin anterior


IF QUJB_PAQ_GENERAL.EJECUCION(:B00.WNUMPET,WHOST) < 0 THEN
MENSAJE('Error al ejecutar la peticin QUJB_PAQ_GENERAL.MENSAJE');
END IF;
END IF;

-- Control de la existencia del Timer


IF Not Id_Null(Find_Timer('MI_TIMER')) THEN
Delete_Timer('MI_TIMER');
END IF;

-- Creacin del Timer para controlar cuando finaliza el programa ejecutado


-- desde el Trigger "When-Timer-Expired"
Timer_Id := CREATE_TIMER('MI_TIMER', un_segundo, REPEAT);

END;

Pgina 57 de 72

Forms v6 y v10
Manual del desarrollador

2.- Controlar el Estado de una Peticin [Trigger When-Timer-Expired]

DECLARE
WESTAD VARCHAR2(25);
WURL VARCHAR2(100);
tm_id Timer;
wmaxtime number(3) := 60;

-- 1 minutos

BORRAR_TIMER EXCEPTION;

BEGIN
--- El Timer se activa cada 1seg. Si se ejecuta mas de wmaxtime(60 veces) (60 * 1seg. = 1min.)
-- automticamente se desactivar el Timer
-:b00.nm_veces := :b00.nm_veces + 1;

IF UPPER( QUJB_PAQ_GENERAL.ESTADO(:B00.WNUMPET) ) = 'TERMINADA' THEN


-- Se construye la URL a visualizar
-- (DocMapping, definido en el ini invoca un VirtualPath donde se depositan los fich.de
salida)
WURL := LEER_FICH_INI(:GLOBAL.FICH_INI,'DocMapping')||:GLOBAL.FICH_DOC;
-- Se invoca la URL
WEB.SHOW_DOCUMENT(WURL,'_blank');
RAISE BORRAR_TIMER;
END IF;

--- El Timer bien finaliza por peticion 'TERMINADA' o por maxtime


-IF :b00.nm_veces > wmaxtime THEN
RAISE BORRAR_TIMER;
END IF;

EXCEPTION
WHEN BORRAR_TIMER THEN
Delete_Timer('MI_TIMER');
END;

Pgina 58 de 72

Forms v6 y v10
Manual del desarrollador

Ejemplo de fich. de configuracin (Seccin "Documentos")

[Documentos]
DocHost=nticmdesXX
DocCola=NORMAL
DocDir=D:\icm\web\web_reps\
DocMapping=http://nticmdes01/web_reps/
DocExe=d:\icm\oas\general\etc\ImpreOfi_Batch_New.exe

Nota:

Cuando el servicio PipeBatch ejecuta una peticin le aade a la lista de parmetros propia del ejecutable
los siguientes parmetros:
Np = 99999

(Nmero de proceso)

Lg = c:\temporal\

(Carpeta de Log.)

(es decir cuando se lanze un ejecutable fuera del entorno de ejecucin del servicio PipeBatch es necesario
el aadirle estos dos parmetros al final)

Pruebas en vuestra instalacin (empresas externas)

Para probar la ejecucin de los paquetes QUJB.* es necesario insertar la informacin bsica en los
catlogos:

QUJB_HOST
QUJB_COLAS (NORMAL,URGENTE)

7.8.2

VISUALIZACION DE TRABAJOS

Haciendo una llamada a la pantalla general ICM_TRABAJOS, sta nos mostrar informacin de todos los
trabajos lanzados con el Pipe_Batch por el usuario conectado.

La pantalla permite hacer bsquedas de trabajos filtrando los campos Consulta 1 y Consulta2 que
contienen una breve descripcin del Trabajo lanzado.

Pgina 59 de 72

Forms v6 y v10
Manual del desarrollador
Con el botn ver Detalle adems de los campos que aparecen en la pantalla con la informacin de
Peticin, Fecha de Solicitud, Fecha de Lanzamiento, Estado, Consulta 1, Consulta 2, nos permite
visualizar informacin adicional del trabajo seleccionado.

El botn Ver Documento abre con el navegador el fichero indicado en el campo Documento (ste campo
se visualiza a travs de la opcin de men Detalle citada anteriormente).

El botn Borrar elimina el trabajo seleccionado de la tabla de Histrico y realiza el borrado del fichero
asociado al trabajo siempre y cuando en el campo Documento est inidicada la URL al fichero,

Ejemplo de llamada:
CALL_FORM(ICM_TRABAJOS, NO_HIDE, NO_REPLACE););

Pantalla ICM_TRABAJOS:

7.8.3

VISUALIZACION DE TRABAJOS EN UNIX

Pgina 60 de 72

Forms v6 y v10
Manual del desarrollador
Haciendo una llamada a la pantalla general ICM_TRBUNIX, sta nos mostrar informacin de los trabajos
lanzados por el Usuario en mquina Unix. sta informacin se recoge de la tabla GAT_SEG_PETICION .

La pantalla permite visualizar los trabajos lanzados en el da , los trabajos lanzados desde hace 7 das o
todos los trabajos.

Con el botn ver Detalle adems de los campos que aparecen en la pantalla con la informacin de
Peticin, Fecha de Solicitud, Fecha de Lanzamiento, Fecha de Inicio, Fecha de Finalizacin y el Estado
nos permite visualizar informacin adicional del trabajo seleccionado.

Ejemplo de llamada:
CALL_FORM(ICM_TRBUNIX, NO_HIDE, NO_REPLACE););

Pantalla ICM_TRBUNIX:

Pgina 61 de 72

Forms v6 y v10
Manual del desarrollador
8

GESTION DE PERFILES

Este es un mdulo estndar para aplicaciones desarrolladas en Developer v10g que se puede utilizar
solamente en en el entorno de Desarrollo que permite realizar:

Gestin de Perfiles, Opciones de Men y Acciones


Gestin de Usuarios

Para el resto de Entornos (PREPRODUCCIN, PRODUCCION, ..)


El paso de la Gestin de Perfiles, Opciones de Men y Acciones debe realizarse de acuerdo a la
normativa especfica con Paso a Produccin a travs de la aplicacin GPAP

La Gestin de Usuarios debe realizarse de acuerdo a la normativa especfica con el grupo de Gestin
de Accesos

Cuando el mdulo se incorpora a una aplicacin con el mtodo anteriormente indicado tan solo se permite
la modificacin de perfiles para la aplicacin en curso no pudiendo modificar perfiles de otras aplicaciones.
La aplicacin con la que se actuar ser la definida en la variable global GLOBAL.COD_APLICACION
definida en el form de identificacin de entrada a la aplicacin APL_XXX.

Pgina 62 de 72

Forms v6 y v10
Manual del desarrollador
sta pantalla va a permitir :
Crear Grupos (perfiles) de Aplicacin
Asignar y desasignar Usuarios a los Grupos
Crear Opciones de Men en las que se indicar:
Cod. Men: el codigo de item men
Desc. Men: Descripcin de la Opcin de Men
Tipo de Accin: Visible, Oculto y Desactivado
Asignar Opciones de Men a los Perfiles
Dar de Alta Programas: Dar de alta un form. Esto nos permitir posteriormente crear acciones
sobre stos programas (forms).
Crear Acciones de Programa. Las acciones de programa son aquellos objetos de un form
susceptibles de ser modificados sus propiedades de visibilidad, activacion,
Antes de crear una accin de Programa se debe seleccionar siempre el programa (form) al que
va a pertener la accin (objeto).
Tambin cuando se desea consultar las acciones de los perfiles se debe seleccionar siempre
el programa (form)
Para crear una accin se indicar:
Cod. Accin: el objeto que se desea restringir por ejemplo:
BLOQUE.BT_ALTA
Desc. Accin: Descripcin del objeto
Tipo de Accin: Desactivado
Oculto
No modificable
No permitida la insercin
No permitida la consulta
No modificable No permitida la insercin
Entre los tipos de objeto que se pueden restringir estn:
Items , botones, radiogroup, pestaas,

Por defecto todos los objetos de la Aplicacin (mens, Acciones) estn accesibles. Por lo tanto, lo habitual
va a ser aadir restricciones de Opciones de men y Acciones.

REPORT BUILDER

Los informes de Aplicacions Forms se construirn con la herramienta Oracle Reports.


La documentacin para la construccin de Informes est en el documento
REPORTS_MUS_Metodologia.doc
10

WEBS DE LA APLICACIN

Pgina 63 de 72

Forms v6 y v10
Manual del desarrollador
10.1 WEB PARA ALOJAR PGINA ESTTICA INICIAL DE LA APLICACIN
La pgina esttica inicial de la Aplicacin contiene informacin ,descripcin o presentacin de la Aplicacin
y un enlace de ejecucin de la Aplicacin,
se incluir cuando sea necesaria.

Si nuestra aplicacin contiene una pgina esttica inicial de aplicacin:

Creacin del web


Se crear un web con FrontPage con la siguiente estructura:
http://Host/nombre_del_modulo
Estructura del web que aloja la pgina esttica inicial de la aplicacin
Colgando directamente del web estar la pgina esttica html index.htm
Si lleva imgenes se crear una carpeta images para contenerlas
http://host/modulo ---------------------- index.htm
/images------------- imgenes que pertenecen a index.htm
10.1.1 FRAMES
Un frame es un rea de visualizacin de la ventana del navegador, se puede definir una zona horizontal o
vertical, la definicin de estos la realizaremos desde la herramienta Front-Page de un modo muy sencillo.

Frame_A

Frame_B

por que utilizar frames en forms ?

El uso de frames en forms principalmente lo hacemos para enviar a una zona de ventana una pgina que no
queremos que sea visualizada en ningn momento. Para ello lo que hacemos es definirnos un determinado
frame con unas caractersticas especiales de tamao y visualizacin cero de modo que el resultado del mismo
sea un frame oculto.
como definimos una pgina con frames ?
La definicin de los frames la hacemos en la pgina principal index.htm de acceso a nuestra aplicacin:

http://nticmdes01.icm.es/XXXX

Pgina 64 de 72

Forms v6 y v10
Manual del desarrollador

Para crear una pgina de estas caractersticas, desde Front-Page, seguimos los siguientes pasos:

Archivo -> Nuevo -> Pagina o Web -> Nuevo a partir de una plantilla -> Divisin horizontal

En este momento nos aparece una pgina donde podemos ubicar nuestras pginas ya existentes, en la zona
superior la pgina con el contenido (texto, logo, enlace a la aplicacin ) y en la zona inferior el nombre de
una pgina en blanco (no contiene nada ya que ser esta la zona de frame oculto).

Una vez creada la pgina index.htm de este modo, pasamos a personalizar las caractersticas de los frames
contenidos, por tanto nos iremos a la solapa inferior HTML de pgina de marcos- para dejar los frames con
los siguientes atributos:

<frameset rows="100%,0%">
<frame name="enlace" scrolling="auto" src="enlace.htm">
<frame name="oculto" src="oculto.htm" noresize scrolling="no">
<noframes>

Como se puede observar hay dos frames con los nombres:


frame name=enlace
frame name=oculto
al primero de ellos se le puede nombrar como se quiera al segundo hay que hacerlo con el nombre oculto definido este nombre como estandar para esta funcionalidad-, cada uno de ellos estar asociado a la pgina
que le hemos indicado.
De este modo quedara as la pgina:
enlace

oculto no se visualizara (0% de visualizacin)

como hacemos uso de los frames en forms ?


Desde nuestros forms y atravs de la built-in WEB.SHOW_DOCUMENT la cual nos permite invocar una
determinada URL- utilizaremos el frame definido como en el siguiente ejemplo:

Pgina 65 de 72

Forms v6 y v10
Manual del desarrollador
BEGIN
..
Wurl := 'http://
icmweb01.icm.es/util/upload/servlet/Servidor?opcion=GeneraActiveX'|| '&BD=ICM21_DENIVEL2&APL='
||:GLOBAL.COD_APLICACION||'&CLAVE='||:BLO.ID_CLAVE||'&USU='||USER||'&FORMATO=TIF&VIS_IM
AG=N';
WEB.SHOW_DOCUMENT(Wurl,'oculto); -- se realiza la llamada al servlet bajo el frame oculto
..
END;

Consideraciones
1.- _blank
el utilizar el nombre de frame _blank con la finalidad de oculto nos puede producir efectos colaterales como
pueden ser:
-

la visualizacin de ayudas se realiza sobre este frame y al ser oculto jams conseguiramos verlas

la visualizacin de los pdfs de la aplicacin a travs del mdulo gral. LIS_REP- sufriran el mismo
efect, no se visualizaran

por lo tanto no se debe de utilizar este nombre de frame para la funcionalidad de ocultar una llamada.

2.- dominios
se han detectados problemas al pasar aplicaciones a produccin que de repente una llamada a Servlet que
siempre nos ha funcionado nos deja de funcionar, no hace nada, ni siquiera se ejecuta.

Tras pruebas se detecta la siguiente situacin:

- cuando accedemos a la pgina principal de la aplicacin lo hacemos con dominio, por ejemplo
http://nticmpro32.icm.es/XXXX/
y dentro de esta pgina principal invocamos a Forms Server sin dominio como por ejemplo:
http://nticmpro32/dev60cgi/ifcgi60.exe?form=XXXX_APL.fmx
esta diferencia en dominios es la que provoca que no se ejecute el Servlet por seguridad bajo el applet de
forms Jinitiator.

Por tanto tenemos que utilizar el uso de dominio incluso en las pruebas que realicemos en el entorno de
desarrollo, del siguiente modo:
http://nticmdes01.icm.es/XXXX
y dentro de la pgina web principal de acceso a la aplicacin incluiremos la llamada tambin con
dominio:
http://nticmdes01.icm.es:8080/dev60cgi/ifcgi60.exe?form=XXXX_APL.fmx

Pgina 66 de 72

Forms v6 y v10
Manual del desarrollador
de este modo nos evitaremos problemas en el posterior paso de la aplicacin a produccin.

10.1.2 FRAME OCULTO


Partimos de sta Situacin, una pgina principal.htm, que contiene 2 Marcos Horizontales:
lateral apunta a la pgina lateral.htm
central apunta a la pgina central.htm

En el marco Central se encuentran los hipervnculos a las aplicaciones Forms con Marco de Destino: Toda
la pgina (_top)
Pgina Principal.htm

LATERAL

CENTRAL

Hipervinculo a aplicacin Forms _top

Para evitar la visualizacin de la URL en las llamadas al Servlet desde Forms, sera necesario incorporar
una pgina inicial.htm que va a contener 2 Marcos Verticales:
principal apunta a la pgina principal.htm
oculto apunta a la pgina oculto.htm
y modificar en los hipervinculos a Aplicaciones Forms que se se encuentran en el marco Central que el
Marco de Destino sea Marco Primario (_parent)
Pgina Inicial.htm

PRINCIPAL

OCULTO
Ejemplo: http://nticmdes01.icm.es/forms6/lanza_ejemplos/inicial.htm

Pgina 67 de 72

Forms v6 y v10
Manual del desarrollador
10.2 WEB PARA AYUDA
Si nuestra aplicacin incorpora ayuda :
Creacin del web
Se crear un web con FrontPage con la siguiente estructura:
http://Host/Nombre_del_Modulo

No es necesario crear el web si ya existe un web que contiene la pgina esttica inicial de la
aplicacin . Se utilizar el ya existente
Estructura de ayuda de la aplicacin en el web
Debajo del web se crea una carpeta ayuda que contendr las pginas htm
Debajo de la carpeta ayuda una subcarpeta images, que contiene todas las imgenes de la ayuda

http://Host/Modulo
/ayuda/ ------------- pginas htm de ayuda
/ayuda/images--- imgenes que pertenecen a las pginas htm de
ayuda

NOTA: Independientemente del tipo de ejecucin la ayuda se realizar en pginas html y se


mostrar con el navegador que tenga el puesto definido por defecto.

10.2.1 VISUALIZAR LA AYUDA


Se ha modificado la librera general de Procedimientos/Funciones ICM_PLL.pll para implementar en el
procedimiento de visualizacin de ayudas PROC_AYUDA la posibilidad de mostrar estas tanto ejecutando
nuestras aplicaciones desde un entorno Web como en ejecuciones en Cliente/Servidor Windows (este caso
solamente para versin Forms6i, en 10g ya no existe cliente/servidor).

Independientemente del tipo de ejecucin la ayuda se realizar en pginas html y se mostrar con el
navegador que tenga el puesto definido por defecto.
Para implementar el tipo de ejecucin en que nos encontramos se ha de incluir en el fichero .ini de la
aplicacin el siguiente parmetro:

TipoEjecucion=XXXX

Pudiendo tomar los siguientes:


- Web - para ejecuciones en OAS bajo Web
- Windows - para ejecuciones en Cliente/Servidor Windows

Pgina 68 de 72

Forms v6 y v10
Manual del desarrollador
Para ubicar el Web en el que se van a buscar las pginas htm de ayuda para nuestra aplicacin se utilizar
el siguiente parmetro en el fichero .ini de la aplicacin:

; por ejem.
WebAyuda=http://host/Modulo/

Para poder realizar la visualizacin de la ayuda en ejecuciones tipo Cliente/Servidor Windows se ha de


tener el programa lanzador de las mismas:
-ShowHtml.exe
en el directorio en donde se encuentren el resto de los forms de la aplicacin.
El procedimiento de llamada para las ayudas PROC_AYUDA no ha cambiado la Interface, tan solo a nivel
de cdigo interno, aprovecho para recordar la llamada al mismo:

PROC_AYUDA( XXXXX IN VARCHAR2) ;

El parmetro de entrada puede tener los siguientes valores:


- NULL, la ayuda a mostrar ser la del form activo en ese momento
- Nombre_de_Form, se visualizar la ayuda del form indicado en el parmetro.
Os recuerdo que para poder recoger el cdigo actualizado de la librera ICM_PLL.pll tenis la ltima
versin en la carpeta:
\Pll
donde se encuentran el resto de forms de infraestructura de Forms.

NOTA: Independientemente del tipo de ejecucin la ayuda se realizar en pginas html y se mostrar con
el navegador que tenga el puesto definido por defecto.

11

UTILIDADES

11.1 CONV_F10G

Conversor de Forms6i -> Forms10g


Nos facilitar el paso de nuestros forms de versin 6i a 10g, entre otros realiz:
- actualizacin de built-in no soportadas en la nueva versin
- cambio de referencias de libreras de acceso a b.d. por acceso a fichero
- cambio en las llamadas a forms (lower -> upper) como establecimiento en el estndar de nomenclatura
para plataforma Linux (ejem: XXXX_FORM1.fmx)
- cambio en los nombres de imgenes (lower -> upper) iden del pto. anterior
- cambio de formato de versin 6i a 10g

Pgina 69 de 72

Forms v6 y v10
Manual del desarrollador

Est disponible:
-

en la maqueta de desarrollo en D:\Aplicaci\

en la url: http://publicacion.madrid.org/web_soporte/forms10g/utilidades.htm

11.2 COMP_F6

Utilidad de compilacin masiva


De este modo podemos realizar una compilacin de todos los programas de un mdulo de un modo rpido
y sencillo sin necesidad de acceder con la herramienta de desarrollo a realizar la compilacin de uno en
uno.
La utilidad se ha adaptado de manera que se puede seleccionar mediante un Combo la versin bajo la cual
deseamos compilar nuestros programas (v6 / v10g).

Est disponible:
-

en la maqueta de desarrollo en D:\Aplicaci\

en la url: http://publicacion.madrid.org/web_soporte/forms10g/utilidades.htm

11.3 CONTROL FICHEROS

Utilidad que nos permite subir ficheros compilados de Forms 6 al servidor de Desarrollo, Preproduccin y
Validacin desde nuestro PC

Est disponible:

- En la maqueta de desarrollo en D:\Aplicaci\


- En la url: http://intranet.madrid.org/ppro/SistemasDistribucion.htm

Nueva versin de 'Control_Ficheros', permite subir archivos de Forms desde MiPc al


Servidor directamente (sin FrontPage)

Acceso a una Gua rpida del uso de Control_Ficheros

11.4 COMPLINUX
Paso y compilacin de archivos en Linux
Ahora con una plataforma de ejecucin distinta a la de desarrollo surge la problemtica de tener que
compilar en la plataforma de ejecucin antes de poder probar nuestros programas bajo Linux.
CompLinux realizar las labores del paso de archivos fuentes al equipo configurado como destino,

Pgina 70 de 72

Forms v6 y v10
Manual del desarrollador
compilar en la nueva plataforma (el fuente ser borrado) y depositar el compilado en la ubicacin
indicada en la configuracin listo para ser probado.

Est disponible:
-

en la maqueta de desarrollo en D:\Aplicaci\

en la url: http://publicacion.madrid.org/web_soporte/forms10g/utilidades.htm

12

MIGRACION de APLICACIN de FORMS V6 a FORMS V10

En principio la migracin de aplicaciones de versin es muy simple tan slo es necesario recompilar todos
los elementos que componen la aplicacin con la nueva versin y ya es suficiente -en teora-, la
compilacin se ha de realizar en el siguiente orden:
- Libreras
- Forms
- Reports
Debido a una serie de puntos que a continuacin se detallan, para nuestra migracin de versin no es
suficiente tan slo con lo expuesto en el prrafo anterior, esto es debido por un lado a:
1.- cambios producidos por la nueva versin
2.- cambios producidos por la nueva plataforma de ejecucin (pasamos de plataforma WinXX a plataforma
Linux)

1.- Cambios producidos por la nueva versin

- Ahora con Forms10g no existe la posiblidad de salvar en base de datos ningn tipo de objeto. Os
recuerdo que determinados objetos que utilizamos en todos los forms como infraestructura base de
programas- se encuentran referenciados bajo una librera de objetos:
ICM_OBJ.olb
que se encuentra salvada en base de datos.
Ante esta circunstancia nos vemos obligados a romper estas referencias de objetos a librera de base de
datos para crear la referencia de los mismos a librera en disco.
- Existen una serie de built-in que mantienen por compatibilidad y otras que directamente producen errores
de compilacin, del documento donde se indican he entresacado las que realmente utilizamos en nuestros
programas:

- llamadas CALL
- ROLLBACK_FORM

pasa a utilizarse la built-in CALL_FORM


aconsejan el uso de CLEAR_FORM(NO_COMMIT, FULL_ROLLBACK);

entre otras muchas soportadas se encuentras las que hacen referencia a controles ActiveX y OLE que por
nuestra arquitectura de ejecucin no estbamos utilizando u otras como RUN_PRODUCT que ya
habamos aconsejado su no utilizacin.

Pgina 71 de 72

Forms v6 y v10
Manual del desarrollador
Hay una utilidad de Oracle Forms ifplsqlconv que trata estos casos la cual utilizaremos para reflejar estas
actualizaciones en nuestros fuentes.
2.- Cambios producidos por la nueva plataforma de ejecucin

- Ahora la plataforma de ejecucin de nuestro cdigo ser Linux, abandonamos Windows y esto supone
tener en cuenta una serie de aspectos que hasta ahora pasbamos por alto, en concreto nos referimos a
los nombres de archivo ahora son case sensitive, es decir un archivo es distinto si se encuentra en
maysculas o minsculas.
Por lo tanto en nuestros fuentes tenemos que tener en cuenta este tipo de nombre en:
- iconos
- llamadas a forms
en los que se ha llegado a una convencin por la cual se han de nombrar en mayscula el nombre y en
minscula la extensin, por ejemplo:
XXXX_FORM1.fmx
XXXX_ICONO_UP.gif
- No podremos subir tal cual nuestros archivos compilados en el entorno de desarrollo FormBuilder desde
Windows a Linux como venamos haciendo hasta ahora.
Ahora es necesario realizar una compilacin en la mquina de destino para poder probar nuestros
programas en Linux.

En ICM hemos realizado un conjunto de utilidades que nos van a facilitar este tipo de labores en todas las
fases del proyecto:
- Conversin de fuentes de Forms6i a Forms10g
- Compilaciones masivas en local
- Paso de archivos a plataforma Linux de ejecucin

Pgina 72 de 72

You might also like