Está en la página 1de 73

Nombre del manual TODO SOBRE FORMS 1OG

TODO SOBRE FORMS 10G

Fecha Versión Cambios


01/11/2007 1.0 Versión Inicial

Área de Integración y Arquitectura de Aplicaciones Página: 1


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

1 TABLA DE CONTENIDO

1 TABLA DE CONTENIDO............................................................................ 2
2 FICHERO INI GENERAL ............................................................................ 4
3 INFRAESTRUCTURA PARA DESARROLLOS EN ICM BAJO FORMS
10G 5
3.1 Sentencias DDL ........................................................................................... 5
3.2 Estandar General de Fuentes y Colores .................................................... 5
3.3 Documentación ........................................................................................... 6
3.4 Nomenclatura estandar de Directorios y Ficheros ................................... 6
3.5 Librería de Objetos...................................................................................... 6
3.6 Librería de PL/SQL ...................................................................................... 8
3.7 Templates (plantillas) a partir de Librerías de Objetos............................. 9
3.7.1 MENU BASE.......................................................................................................... 10
3.7.2 APL_BASE ............................................................................................................ 11
3.7.3 FORM_BASE......................................................................................................... 12
3.7.4 F60_MANT1 .......................................................................................................... 14
3.7.5 F60_MANT2 .......................................................................................................... 15
3.8 Plantilla Lista de Valores .......................................................................... 18
4 EMPLEO DE LAS PLANTILLAS.............................................................. 19
4.1 Form de Gestión de Perfiles - F60_USU .................................................. 20
4.2 Form Calendario........................................................................................ 21
5 ADAPTACIÓN DE PROCEDIMIENTOO - MENSAJE – DE LIBRERÍA
PL/SQL DE FORMS 10G - ICM_PLL.pll ......................................................... 23
6 CREACIÓN DE WEB PARA ALOJAR PÁGINA ESTÁTICA INICIAL DE
LA APLICACIÓN ............................................................................................. 25
6.1 Creación del web....................................................................................... 26
6.2 Estructura del web que aloja la página estática inicial de la aplicación 26
7 CREACIÓN DE WEB PARA AYUDA ....................................................... 26
7.1 Creación del web....................................................................................... 26
7.2 Estructura de ayuda de la aplicación en el web...................................... 26
8 VISUALIZACIÓN DE AYUDA EN DEVELOPER 10G............................. 27
9 TRATAMIENTO DE IMÁGENES EN DEVELOPER 10G ......................... 28
10 EJECUCIÓN DE PROCESOS EN BATCH ........................................... 31
11 VISUALIZACIÓN DE TRABAJOS BATCH........................................... 36
12 VISUALIZACIÓN DE TRABAJOS BATCH EN MÁQUINAS UNIX....... 37

Área de Integración y Arquitectura de Aplicaciones Página: 2


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

13 FUSIÓN DE DOCUMENTOS DESDE FORMS 10G ............................. 38


14 TRATAMIENTO DE CAMPOS LOB ..................................................... 41
14.1 Carga de Archivos de Texto a campos CLOB -upload- .......................... 42
14.2 Carga de Archivo de Texto a campo CLOB y campo BLOB................... 44
14.3 DESCARGA y VISUALIZACION de campos CLOB .................................. 46
14.4 CARGA de cualquier tipo de Archivo a campos BLOB -upload- ........... 49
14.5 DESCARGA y VISUALIZACION de campos BLOB .................................. 51
14.6 CARGA DE BLOB DESDE URL................................................................. 53
15 CREACIÓN DE TABLA ORACLE CON CAMPOS BLOB.................... 60
16 ACCESO A ESTACIÓN DE ESCANER................................................ 61
17 ENVÍO DE CORREO DESDE FORMS.................................................. 62
17.1 Envío de correo desde Forms v4.5 (Unix) ............................................... 62
17.2 Envío de correo desde Forms6i -sin archivos adjuntos-........................ 63
17.3 Envío de correo desde Forms 6i -con archivos adjuntos....................... 64
18 Empleo de Frames en Aplicaciones Forms....................................... 67
19 UTILIZACIÓN DE FRAME OCULTO EN PÁGINA HTML CON FRAMES
VERTICALES................................................................................................... 70
20 EJECUCIÓN DE INFORMES CRYSTAL REPORTS............................ 72
20.1 Obtener el token de business Objects..................................................... 72
20.2 Ejecución de Informe Crystal Report ....................................................... 72

Área de Integración y Arquitectura de Aplicaciones Página: 3


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

2 FICHERO INI GENERAL


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

[General]
BaseDatos=icm21_dexxxxx
; *** Tipo de Ejecución, posibles valores: -Web -Windows
TipoEjecucion=Web
; *** Variable ejemplo para cargar en cuadro de información en menú inicial
Entorno=Consejería de xxxxxxxx

[Ayudas HTML]
; *** Ubicación de las páginas html de ayuda
WebAyuda=http://icmaplicd01/xxxx/Forms/

[ReportBuilder]
; *** Parámetros válidos solamente para Reports bajo TipoEjecucion=Web
Report_cache=d:\icm\web\web_reps\
Report_mapping=http://NTICMAPL11/web_reps/
Cola1=REPLIGERAD01
;Cola2=REPMEDIANAD01
; *** Para realizar impresión directa de Pdf's desde el módulo LIS_REP.fmx
Impresion_pdf=http://nticmapl11.icm.es/impresionpdf/cgi-bin/ImpresionPDF.exe

[GLIS]
; *** Parámetros válidos solamente para la ejecución del GLIS
GlisHost=nticmdes01
GlisDir=d:\icm\web\web_reps\
GlisCola=NORMAL
GlisMapping=http://nticmdes01/web_reps/
GlisExe=d:\icm\oas\general\etc\GlisBatchListado.exe
GlisExe_Cubo=d:\icm\oas\general\etc\GlisBatchCubo.exe
GlisExe_Sql=d:\icm\oas\general\etc\GlisBatchSql.exe
GlisTemp=d:\temp\
GlisAyuda=http://nticmdes01/Glis_Ayuda/Forms/

[UPLOAD]
; *** Parámetros válidos solamente para le ejecución del Servlet Upload
Upload_Exe= http://icmweb01.icm.es/util/upload/servlet/Servidor

[DOCX]
; *** Parámetros válidos solamente para la ejecución de Fusión de documentos
DocxHost=nticmdes01
DocxDir=d:\icm\web\web_reps\
DocxCola=NORMAL
DocxMapping=http://nticmdes01/web_reps/
DocxExe=d:\icm\oas\general\etc\docx.exe

Área de Integración y Arquitectura de Aplicaciones Página: 4


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

DocxTemp=d:\temp\

[BUSINESS OBJECTS]
;*** Parámetros válidos solamente para obtener token de B.O
bo_usuario=EJPL_Usu
bo_clave=C7FFB972B34AB66E2C45124586507E4F

3 INFRAESTRUCTURA PARA DESARROLLOS EN ICM BAJO


FORMS 10G
La ubicación donde podemos encontrar todos los componentes que a
continuación se detallan para su posterior localización es la siguiente:
- \\nwicmofi01\Vol2\Formsv10g

(para las empresas que van a realizar desarrollos para ICM se les faciltará un
CDROM con idéntico contenido y con posteriores entregas en caso de
actualizaciones posteriores)

Por otro lado documentación y ejemplos se encuentran accesibles en la


siguiente URL:
http://icmweb01.icm.es/soporte/entornos_desarrollo.htm

3.1 Sentencias DDL


No se podrán utilizar sentencias SQL- DDL desde el código.

3.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, Tamaño, Grosor, estilo,
espaciado, color,..)
deben ser: <No especificado> . Esto se consigue posicionandose en la
Propiedad y pulsar el botón heredar . Ésta operación aplica los valores por
defecto que normalmente dáran 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 Gráfico tipo Marco (Rectángulo con Texto) también se
aplica ésta Norma excepto en las siguientes propiedades:
Nombre de Fuente de Título del Marco : MS Sans Serif
Tamaño de Fuente de Título de Marco : 9

En los Tipos de Gráfico como (Rectángulo, Marco,..) el bisel debe ser ‘Sin
Relieve’ y como Color de Fondo ‘Ningún Relleno’.

Área de Integración y Arquitectura de Aplicaciones Página: 5


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Los Colores de Fondo de las ventanas ,Lienzos y botones deberán llevar el


valor <No especificado> teniendo en cuenta que al realizar ésta operación
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 vsiualización

En los bloques multiregistro para resaltar el registro sobre el que estamos


posicionados durante la navegación se consigue aplicando el atributo visual
REGISTRO_CURRENT (disponible en las plantillas) sobre la propiedad
CURRENT_RECORD_ATTRIBUTE del bloque.

Los botones Icónicos como norma general tienen una dimensión de 18x18

En la configuración del Forms Server hay que indicar que se va a trabajar con
unas dimensiones del AppletViewer del modo siguiente, en los parámetros
del fichero formsweb.cfg :
widht=800
height=600

3.3 Documentación

Además de la documentación específica de los diferentes unidades de


programa, triggers, objetos, ..
La Documentación a nivel general de la Pantalla (que función 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

3.4 Nomenclatura estandar de Directorios y Ficheros

Los Directorios deben ir en Minúscula


El Nombre de Fichero debe ir en Mayúscula y la extensión en Minúscula

3.5 Librería de Objetos

- ICM_OBJ, librería de Objetos que contiene los objetos comunes que


componen los distintos módulos genéricos o plantillas a partir de las cuales
iniciaremos nuestros programas.

Esta librería ha de encontrarse almacenada en una ubicación que sea


accesible en todo momento a través del contenido de la variable
FORMS90_PATH, de este modo los módulos serán cargados correctamente
a la hora de ser abiertos desde FormBuilder.

Área de Integración y Arquitectura de Aplicaciones Página: 6


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Contiene entre otros:


- Grupo de objetos GRP_FORM_BASE compuesto de Trigger de carácter
general que realizan los distintos controles de activación 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 carácter
general para la interceptación de conexión a Oracle, perfiles para opciones de
menú etc.
(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 genéricos para campos de entrada, prompt, campos de
display y de opciones de menú.
- Alarma de carácter general.

Área de Integración y Arquitectura de Aplicaciones Página: 7


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

NOTA: Están Prohibidas la utiización de referencias de objetos de un


Form a otro Form, cuando se nececsiten realizar referencias a objetos se
utilizará una librería de objteos (olb)

3.6 Librería de PL/SQL

- ICM_PLL, librería de PL/SQL que contiene procedimientos de carácter


general.
Contiene entre otros:

- APLICAR_PERFIL, para habilitar/deshabilitar objetos dentro de un form en


función del perfil del usuario de entrada a la aplicación.
- GENERAR_MENU, iden. a nivel de opciones del menú activo para la
aplicación.
- CIFRA, para realizar la encriptación de la password del usuario de entrada.
- LEER_FICH_INI, utilidad para leer claves incluidas en el ficheros de .ini para
la aplicación
- y otras de carácter 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 librería ya que al abrir


cualquiera de los módulos que contengan referencias a la misma nos obligará
a que esté localizada, bien en el directorio en donde vamos a desarrollar
nuestra aplicación, bien en la carpeta de red donde se encuentran los
archivos generales de infraestructura, opción esta última la más aconsejada
ya que así no nos tendremos que ocupar de actualizar los cambios que se
realicen sobre la misma.

(La correcta localización de esta librería será el primer paso que hagamos
antes de crearnos alguno de los siguientes forms desde plantilla)

Área de Integración y Arquitectura de Aplicaciones Página: 8


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

NOTA: Hay que tener encuenta que la librería ICM_PLL ya tiene incorporada
la librería F6_PROCS_SIS.pll . Por lo tanto al atachar a nuestro form la
librería ICM_PLL automáticamente tendremos también la librería
F6_PROCS_SIS.pll . Posteriormente no se debe atachar la librería
F6_PROCS_SIS.pll
No deben atacharse las librerías generales a las Librerías de Aplicación .

3.7 Templates (plantillas) a partir de Librerías de Objetos

Se han creado una serie de módulos genéricos o plantillas los cuales ya


contienen objetos referenciados a la librería de objetos ICM_OBJ, también
llevan incorporadas referencias a la librería de PL/SQL ICM_PLL (localizada
en disco).

Estos módulos se encuentran disponibles en la carpeta general de


infraestructura y son los siguientes:

Área de Integración y Arquitectura de Aplicaciones Página: 9


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

3.7.1 MENU BASE


Se utilizará para la creación del menú inicial de la aplicación.

Contiene:

- Unas opciones de menú de prueba simulando una llamada a un


programa como estándar de llamada, vía CALL_FORM(‘XXX’,NO_HIDE,
NO_REPLACE);
- Incorporación de opciones de ayuda con acceso dinámico a páginas
HTML
- Opción de abandono de aplicación
- Código de ejecución inicial ‘Startup Code’ para controlar la ejecución de
las llamadas a programas (para evitar el actual bug de la actual versión
cuando ejecutamos más de un Form a la vez desde el menú y se nos
cuelga al realizar un acceso a base de datos).
- Incorporación de la librería de utilidades generales ‘ICM_PLL.pll’

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


’nombre_de_aplicación’_MENU.mmb (Por ejem: PRY1_MENU.mmb)

Área de Integración y Arquitectura de Aplicaciones Página: 10


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

3.7.2 APL_BASE
Para la creación del form de entrada a la aplicación, en este form lo primero
que se ha de hacer es modificar el Trigger When-New-Form-Instance
personalizándolo para la nueva aplicación, se modificará:
:GLOBAL.COD_APLICACION := 'XXXX'; -- con el valor de
nuestra aplicación
:GLOBAL.FICH_INI := 'XXXX.ini'; -- con el nombre del fich. de ini
de la aplicación.

Igualmente se modificará el nombre de menú asociado indicando el menú


anteriormente generado:
‘nombre_de_aplicacion’_MENU

Contiene los siguientes puntos de interés:

- Se intercepta la conexión inicial a Oracle (ON-LOGON) para posteriormente


realizar por programa el control de dicha conexión.
- Lectura del fichero de .ini para la aplicación especificando entre otros datos
la base de datos a la cual realizaremos la conexión.
- Actualización de opciones de menú según el perfil del usuario de entrada
(PROC. GENERAR_MENU).
- Incorporación de la librería de utilidades generales ‘ICM_PLL.pll’
- Muchos de los objetos aquí creados se encuentran referenciados mediante
un grupo de objetos de la librería de Objetos general ‘ICM_OBJ.olb’
Este módulo 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
Procdure PROC_BACEPTAR
Si fuera necesario introducir código adicional en la conexión se
deberá meter en el Trigger WHEN-BUTTON-PRESSED del botón
BACEPTAR
- En el trigger WHEN-NEW-FORM-INSTANCE no debe tocarse el Bloque de código
relativo a la conexión

Área de Integración y Arquitectura de Aplicaciones Página: 11


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

NOTA: - Se permite realizar conexiones con distintas aplicaciones –


incluso entre distintas bases de datos- sin necesidad de autentificación por
parte del usuario, no se mostraría la ventana inicial de autentificación. Esta
funcionalidad requiere, por supuesto, que el usuario y la password de acceso
para conectar con otra aplicación 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);

3.7.3 FORM_BASE
Para la creación del resto de programas de nuestra aplicación, contiene:

-Procedimiento para realizar la actualización de objetos del programa en base


al perfil del usuario de entrada a la aplicación (PROC. APLICAR_PERFIL)
- Procedimiento para la interceptar los mensajes no controlados por
aplicación y obtenerlos mediante una ventana de diálogo en lugar de
mostrarlos en la linea de estado, muchas veces inapreciable.
- Incorporación de la librería de utilidades generales ‘ICM_PLL.pll’
- Contiene alarma general, atributos visuales etc.referenciados mediante un
grupo de objetos de la librería de objetos generales ‘ICM_OBJ.olb’

Área de Integración y Arquitectura de Aplicaciones Página: 12


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Inicialmente no se ha incluido ningún bloque en el módulo de modo que para


poder ejecutarlo lo primero que se requiere es la creación 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)

Área de Integración y Arquitectura de Aplicaciones Página: 13


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

3.7.4 F60_MANT1

Se utilizará como plantilla para la creación de forms de mantenimiento de


catálogos.

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 creación del Form de Mantenimiento 1:

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 programación


de los mismos en el procedimiento 'PROC_FILTRO'.

6.- Incluir las validaciones necesarias para la actualización 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 incorporación de pll’s al igual
que el form anterior Form_Base.fmb.

Área de Integración y Arquitectura de Aplicaciones Página: 14


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

3.7.5 F60_MANT2

Se utilizará como plantilla para la creación de forms de mantenimiento de


catálogos.

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 creación 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).

Área de Integración y Arquitectura de Aplicaciones Página: 15


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

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 programación


de los mismos en el procedimiento 'PROC_FILTRO'.

7.- Incluir las validaciones necesarias para la actualización de los registros


del nuevo bloque en el procedimiento 'PROC_VALIDACIONES'.
Es similar al form anterior tan solo que para el mantenimiento del catálogo se
tienen dos ventanas en lugar de una como el anterior, de manera que cuando
entramos por las opciones de actualización de información nos aparecerá una
nueva ventana mostrándonos tan sólo la información del registro a procesar y
cuando aceptamos o cancelamos los cambios regresamos a la ventana
principal.

Área de Integración y Arquitectura de Aplicaciones Página: 16


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Área de Integración y Arquitectura de Aplicaciones Página: 17


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

3.8 Plantilla Lista de Valores

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 acción, es decir si accedemos a una tabla, por ejemplo, la de
Interesados con un volumen aproximado de 100.000 registros la operación se
lleva un tiempo más 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 estándar (de Web).

Este form actúa con la lista de valores con un bloque asociado a tabla y la
gestión del array de registros que forms nos ofrece, en este caso al realizar una
búsqueda (ExecuteQuery) tan solo se bajará al cliente un array de registros
igual al número de registros definidos para el multiregistro del bloque y
posteriormente según bajamos por el grid nos va recuperando bloque a bloque
de información pero nunca se baja la totalidad del query de una vez.

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
información.

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

Área de Integración y Arquitectura de Aplicaciones Página: 18


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Aquí se permite poner o el nombre del campo o bien una expresión


compuesta por varios campos de la tabla, por ejemplo para obtener el
Código de Expte. formateado:
cddeptno || '-' || cdtexp || '-' ||LPAD(cdnexp,5,'0') ||'.'||cddigito||'/'||cdaexp

-También 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 tamaño de y ancho de visualización de los
mismos.

Ejemplo de llamada a un Form tipo ‘Lista de valores’ :

Call ( 'LOV_INTE' , NO_HIDE , NO_REPLACE ) ;


--
-- Si se obtiene información 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;

4 EMPLEO DE LAS PLANTILLAS

La utilización de cualquiera de estas plantillas para los nuevos desarrollos se


realizará del siguiente modo:
- seleccionar la opción del menú principal:
Nuevo Form con Plantilla Acceso a módulo de fichero
navegaremos a nivel de carpetas hasta posicionarnos en la ubicación donde se
encuentran los forms de infraestructura y seleccionaremos el módulo del que
se desea partir.

Por el hecho de que estas plantillas contienen referencias a módulos, cualquier


modificación que se realice sobre ellos quedará reflejada en el momento de
abrir de nuevo el módulo -en caso de modificaciones en la librería de objetos
lCM_OBJ- y tan sólo tendremos que compilar y automáticamente en el caso de
modificación de cualquier procedimiento/función de la librería PL/SQL
ICM_PLL.

Área de Integración y Arquitectura de Aplicaciones Página: 19


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

4.1 Form de Gestión de Perfiles - F60_USU

Este es un módulo estándar que permite realizar la gestión de perfiles para


aplicaciones desarrolladas en Developer v10g y que se puede incorporar a
cualquier aplicación simplemente con la implementación de una opción de
menú dedicada a tal efecto que realice una llamada al form:
- F60_USU

En el siguiente menú de ejemplo:

Opcion1 Opcion2 Opcion3 Acceso


Autorizaciones

la llamada CALL al form F60_USU se realizará desde el punto de menú


‘Autorizaciones’.

Cuando el módulo se incorpora a una aplicación con el método anteriormente


indicado tan solo se permite la modificación de perfiles para la aplicación en
curso no pudiendo modificar perfiles de otras aplicaciones.
La aplicación con la que se actuará será la definida en la variable global
‘GLOBAL.COD_APLICACION’ definida en el form de identificación de entrada a
la aplicación ‘APL_XXX’.

Área de Integración y Arquitectura de Aplicaciones Página: 20


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Ésta pantalla va a permitir :


 Crear Grupos (perfiles) de Aplicación
 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ú: Descripción de la Opción de Menú
Tipo de Acción: 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 acción de Programa se debe seleccionar siempre
el programa (form) al que va a pertener la acción (objeto).
También cuando se desea consultar las acciones de los perfiles se
debe seleccionar siempre el programa (form)
Para crear una acción se indicará:
Cod. Acción: el objeto que se desea restringir por ejemplo:
BLOQUE.BT_ALTA
Desc. Acción: Descripción del objeto
Tipo de Acción: Desactivado
Oculto
No modificable
No permitida la inserción
No permitida la consulta
No modificable – No permitida la inserción
Entre los tipos de objeto que se pueden restringir están:
Items , botones, radiogroup, pestañas,…

Por defecto todos los objetos de la Aplicación (menús, Acciones) están


accesibles. Por lo tanto, lo habitual va a ser añadir restricciones de Opciones
de menú y Acciones.

4.2 Form Calendario

Se ha creado un form que actua como calendario contemplando los festivos


según la tabla catálogo CATA_FESTIVOS.
La llamada a este se realiza a partir del procedimiento FCALENDARIO, incluido
en la librería general de PL/SQL ICM_PLL.

Área de Integración y Arquitectura de Aplicaciones Página: 21


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Los parámetros de llamada son:


-FECHA_CAL ..: Devuelve la fecha seleccionada del calendario
-FIESTA_CAL..: Devuelve uno de los siguientes valores:
'L' - Día laboral
'F' - Día festivo
'D' - Domingo
-DIA_SEM_CAL.: Devuelve el número del día de la semana (1-Lunes
...7-Domingo)
-CAL_X ......: Coordenada x de visualización de la ventana del form
Calendario
-CAL_Y ......: Coordenana y de visualización de la ventana del form
Calendario

Un ejemplo de llamada a este sería:

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

Área de Integración y Arquitectura de Aplicaciones Página: 22


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

5 ADAPTACIÓN DE PROCEDIMIENTOO - MENSAJE – DE


LIBRERÍA PL/SQL DE FORMS 10G - ICM_PLL.pll

Solamente para la migración de los forms (v3) de procedimientos de carácter


general se ha producido la situación de encontrarnos con dos procedimientos
que se llaman de igual nombre contenidos en dos PLL’s distintas ambas de
carácter general.

- MENSAJE perteneciente a F6_PROCS_SIS.pll


- MENSAJE perteneciente a ICM_PLL.pll

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 ejecución


de la built-in ‘message’ por lo tanto este aparecerá en la linea de estatus de
pantalla y además el texto a mostrar lo obtiene de base de datos en función de
los parámetros recibidos en la llamada.
La llamada actual es del tipo:
MENSAJE(‘I’,9999);

- el segundo también 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 parámetro.
La llamada actual es del tipo:
MENSAJE(‘Texto’);

Entonces para evitar tener dos procedimientos con idéntica nomenclatura y


tomar de cada uno de estos su máxima funcionalidad se han realizado los
siguientes cambios:

F6_PROCS_SIS.MENSAJE cambia de nombre y pasa a llamarse


F6_PROCS_SIS.MENSAJE_BD y además pasa a ser una función en lugar de
un procedimiento con lo cual se obtiene el texto del mensaje de base de datos
(a partir de ahora esta función no se llamará directamente, será llamada desde
ICM_PLL.MENSAJE)

ICM_PLL.MENSAJE cambia el interface de llamada, pero no hace falta


adaptación alguna en los programas que actualmente utilizan dicho
procedimiento, añadiendole un nuevo parámetro y queda del siguiente modo:

MENSAJE(TEXTO, [NUMERO] );

Área de Integración y Arquitectura de Aplicaciones Página: 23


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

siendo este último parámetro 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 número de parámetros recibidos que en este caso ha de realizar
una llamada a PROCS_SIS.MENSAJE_BD para obtener el texto final a
mostrar):

MENSAJE(‘I’,9999);

- todos los procedimientos migrados de Forms v3 a PLL’s a la hora de


mostrar mensajes no utilizarán la antigua procedure MENSAJE utilizarán
esta nueva de ICM_PLL y por lo tanto los textos se mostrarán siempre
bajo una ventana de mensaje utilizando el interface de siempre.

MENSAJE(‘I’,9999);

Además aprovechando que se modificaban las librerías se borran de


ICM_PLL.pll los siguientes procedimientos:
- GLOBALES_MONEDA
- N2EDITAMONEDA
- N2EDITANUM2
ya que actualmente están disponibles en la librería F6_PROCS_GENERAL.

En la librería ICM_PLL.pll se encuentra disponible el procedimiento


MENSAJE_I que proporciona la
siguiente funcionalidad:

MENSAJE_I
Tiene la misma funcionalidad que MENSAJE y además permite escoger
el Estilo(Icono) de Alerta que se va a visualizar indicandole el estilo en el
parámetro Tipo_Alerta

Parámetros 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

Área de Integración y Arquitectura de Aplicaciones Página: 24


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

2- Estilo: Nota
3- Estilo: Precaución

EJEMPLOS: Las siguientes llamadas al Procedimiento generarán una


visualización de la Alerta como sigue:

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


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

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

MENSAJE_I('Mensaje visualizado con Estilo de Alerta


PRECAUCIÓN', 3);

6 CREACIÓN DE WEB PARA ALOJAR PÁGINA ESTÁTICA


INICIAL DE LA APLICACIÓN

Área de Integración y Arquitectura de Aplicaciones Página: 25


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

La página estática inicial de la Aplicación contiene información ,descripción o


presentación de la Aplicación y un enlace de ejecución de la Aplicación,
se incluirá cuando sea necesaria.

Si nuestra aplicación contiene una página estática inicial de aplicación:

6.1 Creación del web


Se creará un web con FrontPage con la siguiente estructura:
http://Host/nombre_del_modulo

6.2 Estructura del web que aloja la página estática inicial de


la aplicación
Colgando directamente del web estará la página estática html
index.htm
Si lleva imágenes se creará una carpeta images para contenerlas
http://host/modulo ---------------------- index.htm
/images------------- imágenes que pertenecen a
index.htm

7 CREACIÓN DE WEB PARA AYUDA


Si nuestra aplicación incorpora ayuda :

7.1 Creación 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 página


estática inicial de la aplicación . Se utilizará el ya existente

7.2 Estructura de ayuda de la aplicación en el web


Debajo del web se crea una carpeta ayuda que contendrá las páginas
htm
Debajo de la carpeta ayuda una subcarpeta images, que contiene todas
las imágenes de la ayuda

http://Host/Modulo
/ayuda/ ------------- páginas htm de ayuda
/ayuda/images--- imágenes que pertenecen a
las páginas htm de ayuda

NOTA: Independientemente del tipo de ejecución la ayuda se realizará


en páginas html y se mostrará con el navegador que tenga el puesto definido
por defecto.

Área de Integración y Arquitectura de Aplicaciones Página: 26


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

8 VISUALIZACIÓN DE AYUDA EN DEVELOPER 10G

Se ha modificado la librería general de Procedimientos/Funciones ‘ICM_PLL.pll’


para implementar en el procedimiento de visualización 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 versión Forms6i, en 10g ya no existe
cliente/servidor).

Independientemente del tipo de ejecución la ayuda se realizará en páginas html


y se mostrará con el navegador que tenga el puesto definido por defecto.

Para implementar el tipo de ejecución en que nos encontramos se ha de incluir


en el fichero ‘.ini’ de la aplicación el siguiente parámetro:

TipoEjecucion=XXXX

Pudiendo tomar los siguientes:


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

Para ubicar el Web en el que se van a buscar las páginas htm de ayuda para
nuestra aplicación se utilizará el siguiente parámetro en el fichero ‘.ini’ de la
aplicación:

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

Para poder realizar la visualización 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 aplicación.

El procedimiento de llamada para las ayudas ‘PROC_AYUDA’ no ha cambiado


la Interface, tan solo a nivel de código interno, aprovecho para recordar la
llamada al mismo:

PROC_AYUDA( XXXXX IN VARCHAR2) ;

El parámetro 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 parámetro.

Área de Integración y Arquitectura de Aplicaciones Página: 27


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Os recuerdo que para poder recoger el código actualizado de la librería


‘ICM_PLL.pll’ tenéis la última versión en la carpeta:
\Pll
donde se encuentran el resto de forms de infraestructura de Forms.

NOTA: Independientemente del tipo de ejecución la ayuda se realizará en


páginas html y se mostrará con el navegador que tenga el puesto definido por
defecto.

9 TRATAMIENTO DE IMÁGENES EN DEVELOPER 10G

Tratamiento de Iconos - Gif mediante el programa de diseño de imágenes


Microangelo

Inicialmente y como recordatorio simplemente comentaros que en aplicaciones


forms en tipo de
ejecución Cliente/Servidor Windows las imágenes asociadas a los botones han
de ser ficheros de iconos (.ico) y sin embargo cuando ejecutamos nuestras
aplicaciones en modo Web las imágenes asociadas a los botones han de ser
ficheros Gif (.gif). Por lo tanto se necesita una herramienta de fácil manejo que
permita diseñar este tipo de imágenes y establecer de modo rápido el cambio
entre ambos formatos (en versión v10g al no existir ejecución 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:
 Creación 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 definición 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 botón.

Área de Integración y Arquitectura de Aplicaciones Página: 28


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Al grabar el fichero creado se recuerda que el nombre ha de contener el


prefijo de la aplicación y no superar los 8 caract. ( por ejem.
usu_xxxx.ico)

 Creación de ficheros Gif (.gif) a partir de ficheros de Iconos (.ico)

- en una ventana abrimos el fichero de icono y seleccionamos el area de


imagen ( 18X18 de máximo) para ello con la porción 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
tamaño, para ello accedemos a:
Tools - New Image Format y nos aparece la siguiente ventana en la que
indicaremos los valores que a continuación se han fijado:

- automáticamente 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 selección anterior.
Se aconseja ajustar la imagen al borde izquierdo de la ventana ya que al
cargar esta en el botón en la ejecución en Web automáticamente nos
deja un pequeño margen vertical en la izquierda.
Este margen automático hace que perdamos las 2 últimas coordenadas
a nivel de columna del fichero por lo tanto se aconseja que sobre estas
no haya porción de imagen alguna.
En la figura siguiente se muestra en gris la porción de imagen que se
mostrará sobre el botón y en blanco la que nunca se visualizará:

Área de Integración y Arquitectura de Aplicaciones Página: 29


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

- 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 adquisición del programa Microangelo hasta que


lo que tengamos el que este interesado en la herramienta poneros en contacto
con nosotros y os dejamos una versión de evaluación del mismo.

Nota: a nivel de diseño con Forms se han encontrado casos en los que al
asociar un icono a un botón lo alinea incorrectamente (alineamiento inferior) y
por mucho que intentemos solucionarlo no se consigue dejar correctamente, en
estos casos la solución que hemos observado es, y aunque parezca un poco

Área de Integración y Arquitectura de Aplicaciones Página: 30


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

estraño, renombrar simplemente el fichero .ico y asociando el nuevo fichero al


botón lo alinea correctamente (Forms debe de heredar alguna propiedad de
alineamiento del fichero que causó el problema inicialmente que por mucho que
lo intentemos asociar a otro botón nos repite el alineaminento incorrecto).

10 EJECUCIÓN DE PROCESOS EN BATCH

Para la ejecución 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 petición de trabajo e inmediatamente se puede consultar el
estado de la misma.

Los siguientes procedimientos se utilizan para:

-Petición de un proceso:

- QUJB_PAQ_GENERAL.PETICION(Parametros)
Parámetros:
- Host:máquina donde va a correr el trabajo
- Cola: cola que gestionará el trabajo -Shell: ejecutable a lanzar -Param:
parámetros a pasar al ejecutable
-Usuario: usuario que encarga el trabajo
-Mensaje: (salida) mensaje de error en una petición errónea
Devuelve:
-el numero de petición (WPETI) que nos ha generado
-en el caso de ERROR devuelve -1

-Ejecución del mismo:

- QUJB_PAQ_GENERAL.EJECUCION(WPETI,WHOST)
Parámetros:
- Nº.Petición:que hemos obtenido en la función
QUJB_PAQ_GENERAL.PETICION.
-Host:- Host:máquina donde va a correr el trabajo
Devuelve:
-el el caso de ejecución correcta devuelve 0 .
-en el caso de ERROR devuelve -1.

-Consultar el estado de la petición

QUJB_PAQ_GENERAL.ESTADO(WPETI)

Área de Integración y Arquitectura de Aplicaciones Página: 31


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Parámetros:
-Nº.petición: num. de petición que vamos a comprobar.

Devuelve:
Uno de los siguientes literales:
- “En cola”
- “En ejecución”
- “Terminada”
- “Petición desconocida”

Ejemplo de cómo Realizar Una Petición al Servicio Pipe_Batch

1.- Realizar Petición

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
-- Extensión ".w2z" para el nuevo visor WordPerfect/Word (anterior extension
".wpz")
:GLOBAL.FICH_DOC :=
to_char(sysdate,'YYYYMMDDHH24MISS')||'_'||:B20.CDDOCUM||'.w2z';

-- Se rellenan los parámetros de ejecución del ejecutable (b.d. del fich.ini)

Área de Integración y Arquitectura de Aplicaciones Página: 32


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

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;

-- Parámetros 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'); -- Nombre del
ejecutable a lanzar
WUSER := USER; -- Usuario peticionario

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

-- Control de la petición solicitada


IF :B00.WNUMPET < 0 THEN
MENSAJE('Error al realizar la petición de impresión del documento');

ELSE
-- Si la petición es correcta es necesario realizar Commit
-- (el Servicio PipeBatch es un proceso externo)
COMMIT;

-- Se realiza la Ejecución de la petición anterior


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

-- Control de la existencia del Timer


IF Not Id_Null(Find_Timer('MI_TIMER')) THEN

Área de Integración y Arquitectura de Aplicaciones Página: 33


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Delete_Timer('MI_TIMER');
END IF;

-- Creación 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;

2.- Controlar el Estado de una Petición [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.)
-- automáticamente 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;

Área de Integración y Arquitectura de Aplicaciones Página: 34


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

END IF;

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

Ejemplo de fich. de configuración (Sección "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 petición le añade a la lista de


parámetros propia del ejecutable los siguientes parámetros:
Np = 99999 (Número de proceso)
Lg = c:\temporal\ (Carpeta de Log.)

(es decir cuando se lanze un ejecutable fuera del entorno de ejecución del
servicio PipeBatch es necesario el añadirle estos dos parámetros al final)

Pruebas en vuestra instalación (empresas externas)

Para probar la ejecución de los paquetes QUJB.* es necesario insertar la


información básica en los catálogos:

QUJB_HOST
QUJB_COLAS (‘NORMAL’,’URGENTE’)

Área de Integración y Arquitectura de Aplicaciones Página: 35


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

11 VISUALIZACIÓN DE TRABAJOS BATCH

Haciendo una llamada a la pantalla general ICM_TRABAJOS, ésta nos


mostrará información de todos los trabajos lanzados con el Pipe_Batch por el
usuario conectado.

La pantalla permite hacer búsquedas de trabajos filtrando los campos Consulta


1 y Consulta2 que contienen una breve descripción del Trabajo lanzado.

Con el botón ver Detalle además de los campos que aparecen en la pantalla
con la información de Petición, Fecha de Solicitud, Fecha de Lanzamiento,
Estado, Consulta 1, Consulta 2, nos permite visualizar información adicional
del trabajo seleccionado.

El botón Ver Documento abre con el navegador el fichero indicado en el campo


Documento (Éste campo se visualiza a través de la opción de menú Detalle
citada anteriormente).

El botón Borrar elimina el trabajo seleccionado de la tabla de Histórico 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:

Área de Integración y Arquitectura de Aplicaciones Página: 36


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

12 VISUALIZACIÓN DE TRABAJOS BATCH EN MÁQUINAS


UNIX

Haciendo una llamada a la pantalla general ICM_TRBUNIX, ésta nos mostrará


información de los trabajos lanzados por el Usuario en máquina Unix. Ésta
información se recoge de la tabla GAT_SEG_PETICION .

La pantalla permite visualizar los trabajos lanzados en el día , los trabajos


lanzados desde hace 7 días o todos los trabajos.

Con el botón ver Detalle además de los campos que aparecen en la pantalla
con la información de Petición, Fecha de Solicitud, Fecha de Lanzamiento,
Fecha de Inicio, Fecha de Finalización y el Estado nos permite visualizar
información adicional del trabajo seleccionado.

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

Área de Integración y Arquitectura de Aplicaciones Página: 37


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Pantalla ICM_TRBUNIX:

13 FUSIÓN DE DOCUMENTOS DESDE FORMS 10G

La Visualización de Fusión de Documentos consiste en la Fusión 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 operación a realizar, una vez generado éste fichero zip, desde Forms se
abre éste fichero cargandose automáticamente el visor Word_WordPerfect que
realiza la fusión.

La visualización de Fusión de Documentos consta de los siguientes


Programas/Productos:

1. Visor Word_WordPerfect instalado en el Puesto Cliente

Área de Integración y Arquitectura de Aplicaciones Página: 38


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

2. Programa Delphi: - genera una serie de ficheros dentro de un fichero


zip (con
extensión 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 instalación se puede realizar a través de la intranet en la siguiente
URL: http://nticmdes01/Forms6/software_base/visor_de_wordperfect_word.htm
o ejecutando el fichero de instalación visorwpword.exe .
El visor se carga automáticamente al abrir cualquier documento con la
extensión W2Z.
Se encarga de realizar la fusión de la plantilla con el fichero de datos dbf y
realiza la operación indicada en elfichero ini (Visualización o Impresión del
Documento, Nº de copias a imprimir)

2. Programa Delphi
Recibe del programa forms una cadena con los siguientes parámetros:
bd= Usuario, Password y Cadena de Conexión con el formato
Usuario/Password@cadena_conexion
operacion= Operación a realizar, puede ser Visualizar (V) o
Imprimir (I)
codigo= Código 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 extensión 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\

Va a generar un fichero zip (con extensión 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 parámetro del programa Forms

- Fichero de datos: Fichero dbf

Área de Integración y Arquitectura de Aplicaciones Página: 39


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

- Fichero ini: Contiene los siguientes parámetros:


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
3. Programa Forms
Consta de las siguientes componentes:

Fichero Ini
Además de los parámetros standard de una aplicación Forms , el
fichero ini de la aplicación debe llevar los parámetros predeterminados para
la ejecución de programas en batch, que son los siguientes:

DocxHost = Máquina dónde va a correr el programa delphi.


DocxDir = Dirección Física dónde el programa delphi
depositará el fichero que genera.
DocxCola = Cola en la que se ejecutará el programa delphi.
DocxMapping =URL que apunta a la direccción física dónde el
programa delphi deposita el fichero que genera.
DocxExe = Dirección física del programa delphi.
DocxTemp = Directorio temporal.

Ejecución del programa Delphi


La ejecución de un programa en batch desde forms se realiza a
través de las funciones del paquete QUJB_PAQ_GENERAL:
PETICION Obtiene un nº de Petición.
EJECUCION Se lanza la ejecución del proceso.
ESTADO Devuelve si ha finalizado el proceso.
Para más información sobre ejecución de programas en batch
desde forms consultar el documento Ejemplo_Pipe_Batch.doc .

Al programa delphi se le envía una cadena con los siguientes


parámetros
bd= Usuario, Password y Cadena de Conexión con el formato
Usuario/Password@cadena_conexion
operacion= Operación a realizar, puede ser Visualizar (V) o
Imprimir (I)
codigo= Código de Plantilla
copias= Nº de copias
fichero= El path y nombre del fichero que se va a generar. El path
se captura del parámetro DocxDir del fichero ini, el nombre del fichero se

Área de Integración y Arquitectura de Aplicaciones Página: 40


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

construye con el Nombre del Uusario de base de datos, fecha actual y


con la extensión 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\

Visualización del fichero (generado por el programa delphi)


Comprobado con la Función QUJB_PAQ_GENERAL.Estado que
el proceso ha terminado se visualiza el fichero generado realizando un
WEB.Show_Document a la URL dónde se encuentra el fichero, el path del
fichero se captura del parámetro DocxMapping del fichero ini.

Ejemplo: v_Url := ‘http://nticmdes01/web_reps/


ADMON_200021120_171106.W2Z’;
WEB.SHOW_DOCUMENT(v_Url,'_blank');

14 TRATAMIENTO DE CAMPOS LOB

La carga y descarga de ficheros al Server (upload y download respectivamente)


cada vez está siendo más habitual en los proyectos Forms en WEB. Para
facilitar los desarrollos y la puesta en producción de las aplicaciones se ha
desarrollado un Servlet genérico para realizar este tipo de operaciones.

Modelo de datos.-

Se han creado tres tablas nuevas de GAT donde el Servlet almacenará


la información de los ficheros a tratar a modo temporal para que las distintas
aplicaciones puedan procesar esta información, de este modo el Servlet
depositará o recogerá siempre la información de ficheros de estas tablas
temporales, son las siguientes

GAT_UPLOAD_FICHERO .- contiene la información general de


cada archivo.
GAT_UPLOAD_LINEA .- dónde se almacenan los ficheros de texto a
cargar, tendremos un registro por cada línea del archivo, aquí se
almacenarán los campos de tipo CLOB.
GAT_UPLOAD_BLOB .- dónde se almacenan los ficheros en binario a
cargar/visualizar, aquí se almacenarán los campos de tipo BLOB.

Área de Integración y Arquitectura de Aplicaciones Página: 41


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Conexión a base de datos.-


No nos hemos de preocupar de la conexión ya que existen una cuenta
preestablecida para cada base de datos con la cual se conecta el Servlet.

14.1 Carga de Archivos de Texto a campos CLOB -upload-

Los archivos para hacer UPLOAD tendrán que ser archivos de texto,
formato TXT y la estructura de cada registro será la que cada aplicación defina
y/o requiera.

Funcionamiento General:
 Desde un punto determinado de una aplicación se realiza la
llamada el servlet genérico de upload.
 Aparece una ventana de petición de la localización 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 aplicación.
 Una vez procesada esta información los datos se borrarán de las
tablas temporales por nuestra aplicación.

Se realizarán los siguientes pasos:

1.- Generación de una Clave Externa.

Se genera en nuestra aplicación, desde el módulo 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 continuación:

Área de Integración y Arquitectura de Aplicaciones Página: 42


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

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

Los parámetros del querystring son los siguientes:


1. <bd> - base de datos donde se va a dejar la información del fichero
2. <user> - usuario que realiza la operación (no se utiliza para la conexión)
3. <apli> - aplicación 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 válidos:
C - Carga de Fichero de texto a campo CLOB
Por defecto si no aparece el parámetro opcclob también realiza la
carga de fichero de texto a campo clob
Ejemplos de llamadas:

http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm1003_orcl8&user=U
SU1&apli=USUG&clave= USU1_20021217_101330&plantilla=defecto

http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm1003_orcl8&user=U
SU1&apli=USUG&clave=USU1_20021217_101330&plantilla=defecto&opcclob=
C

http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm21_denivel2&user=G
AT1&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 línea del Fichero de texto en
la tabla GAT_UPLOAD_LINEA

3.- Leer de la Tabla Temporal

A través de un cursor se leen los registros(uno para cada línea del


fichero) generados por el programa Servlet. El cursor nos permite operar con
cada registro(línea del fichero) y realizar la operación 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.

Área de Integración y Arquitectura de Aplicaciones Página: 43


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

14.2 Carga de Archivo de Texto a campo CLOB y campo BLOB

Los archivos para hacer UPLOAD tendrán que ser archivos de texto,
formato TXT y la estructura de cada registro será la que cada aplicación defina
y/o requiera.

Funcionamiento General:
 Desde un punto determinado de una aplicación se realiza la
llamada el servlet genérico de upload.
 Aparece una ventana de petición de la localización del fichero a
cargar.
 El servlet sube el fichero al servidor y lo carga en las tablas
temporales tanto en líneas como en fichero.
 El archivo ya cargado será tratado por nuestra aplicación.
 Una vez procesada esta información los datos se borrarán de las
tablas temporales por nuestra aplicación.

Se realizarán los siguientes pasos:

1.- Generación de una Clave Externa.

Se genera en nuestra aplicación, desde el módulo 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 continuación:


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

Los parámetros del querystring son los siguientes:


1. <bd> - base de datos donde se va a dejar la información del fichero
2. <user> - usuario que realiza la operación (no se utiliza para la conexión)
3. <apli> - aplicación 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 válidos:
T - Carga de Fichero de texto a campo CLOB y campo BLOB

Ejemplos de llamadas:

Área de Integración y Arquitectura de Aplicaciones Página: 44


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm1003_orcl8&user=U
SU1&apli=USUG&clave=USU1_20021217_101330&plantilla=defecto&opcclob=
T

http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm21_denivel2&user=G
AT1&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 línea 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 aplicación


Transferencia del registro recién insertado en tablas temporales a la
tabla de nuestra aplicación ‘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 aplicación
‘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 más de un campo clave u otros
campos … se cumplimentarán en la sentencia insert anterior)

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


aplicación XXXX_TABLA_BLOB

4.- Leer de la Tabla Temporal

A través de un cursor se leen los registros(uno para cada línea del


fichero de la tabla GAT_UPLOAD_CLOB) generados por el programa Servlet.
El cursor nos permite operar con cada registro(línea del fichero) y realizar la
operación 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

Área de Integración y Arquitectura de Aplicaciones Página: 45


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Una vez finalizada la lectura de los registros en las tablas temporales


GAT_UPLOAD_.... se realizará el borrado de nuestros registros.

14.3 DESCARGA y VISUALIZACION de campos CLOB

Funcionamiento General
 Se realiza la transferencia de un Clob o conjunto de registros de mi
aplicación a tablas temporales a través de la función
GAT_FUNC_CARGA_CLOB
 Se ejecuta el programa servlet que descarga y visualiza del Clob o
conjutnos de registros de la tabla temporal
 Finalizada la descarga-visualización, la aplicación borrará de las tablas
temporales la información recién tratada.

Se realizarán los siguientes pasos:

1.- Generación de una Clave Externa.

Se genera en nuestra aplicación, desde el módulo que llame al servlet


con un criterio de clave única, por ejemplo del tipo:
USER_YYYYMMDD_HH24:MI:SS

2.- Paso de CLOB o del conjuntos de registros de nuestra aplicación a


tablas temporales

2.1- Paso de CLOB de nuestra aplicación a tablas temporales

Se transfiere 1 registro a la tabla de nuestra aplicación ‘XXXX’


(XXXX_TABLA_CLOB) que contiene el campo CLOB a tablas temporales
GAT_UPLOAD_... mediante la ejecución de la siguiente función de carácter
general del núcleo de Oracle
GAT_FUNC_CARGA_CLOB:
La función obtiene el nº de registros que recupera la sentencia “where”
que pasamos como parámetro.

Parámetros de entrada de la Función:


w_Cod_Aplicacion: Código de aplicación
w_Cd_Cl_Externa: Clave generada por la aplicación
w_Nom_Archivo: Nombre del archivo a generar para su posterior descarga
w_Tabla_Apl: Nombre de la tabla de la aplicación
(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’

Área de Integración y Arquitectura de Aplicaciones Página: 46


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

w_Campo_Clob: Nombre del campo CLOB a extraer de la anterior tabla

Parámetros de salida de la Función:


z_Mensaje_Err: Mensaje de Error si se produce.

En éste punto se debe realizar COMMIT; para confirmar la inserción del


campo CLOB en las tablas temporales y que el proceso “externo” Servlet
pueda obtener ésta información

2.2- Paso de un conjunto de registros de nuestra aplicación a tablas


temporales

Se transfiere el conjunto de registros a la tabla de nuestra aplicación ‘XXXX’


(XXXX_TABLA) a tablas temporales GAT_UPLOAD_... mediante la ejecución
de la siguiente función de carácter general del núcleo de Oracle
GAT_FUNC_CARGA_CLOB:
La función obtiene el nº de registros que recupera la sentencia “where”
que pasamos como parámetro.

Parámetros de entrada de la Función:


w_Cod_Aplicacion: Código de aplicación
w_Cd_Cl_Externa: Clave generada por la aplicación
w_Nom_Archivo: Nombre del archivo a generar para su posterior descarga
w_Tabla_Apl: Nombre de la tabla de la aplicación (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
número de línea

Parámetros de salida de la Función:


z_Mensaje_Err: Mensaje de Error si se produce.

En éste punto se debe realizar COMMIT; para confirmar la inserción del


conjunto de registros en las tablas temporales y que el proceso “externo”
Servlet pueda obtener ésta información

3.- Ejecución del Servlet para realizar la descarga-visualización del campo


CLOB

Área de Integración y Arquitectura de Aplicaciones Página: 47


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

La llamada al servlet debe ser como se describe a continuación:


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

Los parámetros del querystring son los siguientes:

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


2. <user> - usuario que realiza la operación (no se utiliza para la conexión)
3. <apli> - aplicación 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 válidos:
V - Descarga/Visualización de campos CLOB a fichero
para su posterior visualización

7. <zip> - Valores Válidos:


S - El fichero se almacenará comprimido
N - El fichero no se almacenará comprimido. (Opcional,
no es necesario añadir éste parámetro, por defecto no se comprime).

Ejemplos de llamadas:

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

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

Automáticamente el Servlet realizará la descarga del CLOB generando


un archivo en disco y posteriormente procederá a visualizar el documento
correspondiente con su aplicación 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 recién tratado.

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


terminado

Área de Integración y Arquitectura de Aplicaciones Página: 48


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

14.4 CARGA de cualquier tipo de Archivo a campos BLOB -


upload-

Funcionamiento General:
 Desde un punto determinado de una aplicación se realiza la
llamada el servlet genérico de upload.
 Aparece una ventana de petición de la localización 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
aplicación
 Finalizada la transferencia se borra de las tablas temporales los
registros asociados al fichero cargado

Se realizarán los siguientes pasos:

1.- Generación de una Clave Externa.

Se genera en nuestra aplicación, desde el módulo que llame al servlet


con un criterio de clave única, por ejemplo del tipo:
USER_YYYYMMDD_HH24:MI:SS

2.- Ejecución del Servlet de carga de ficheros con la opción BLOB -


opcblob-.

La llamada al servlet debe ser como se describe a continuación:


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

Los parámetros del querystring son los siguientes:

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


2. <user> - usuario que realiza la operación (no se utiliza para la conexión)
3. <apli> - aplicación 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 válidos:
C - Carga de archivos a tablas temporales
V - Descarga/Visualización de campos BLOB a fichero
para su posterior visualización

7. <zip> - Valores Válidos


S - El fichero se almacenará comprimido

Área de Integración y Arquitectura de Aplicaciones Página: 49


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

N - El fichero no se almacenará comprimido.


(Opcional, no es necesario añadir éste
parámetro, por defecto no se comprime).

Ejemplos de llamadas:

http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm1003_orcl8&user=U
SU1&apli=USUG&clave=USU1_20021217_101858&plantilla=defecto&opcblob
=C

http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm21_denivel2&user=G
AT1&apli=GAT&clave=GAT_20021217_101858&plantilla=azul&opcblob=C&zip
=S

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


GAT_UPLOAD_...

3.- Carga de Blob a tablas de nuestra aplicación


Transferencia del registro recién insertado en tablas temporales a la
tabla de nuestra aplicación ‘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 aplicación
‘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 más de un campo clave u otros
campos … se cumplimentarán en la sentencia insert anterior)

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


aplicación XXXX_TABLA_BLOB

4.- Borrado de Registros de Tablas Temporales

Área de Integración y Arquitectura de Aplicaciones Página: 50


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Una vez almacenado el campo BLOB en nuestra aplicación debemos


realizar el borrado de las tablas temporales GAT_UPLOAD… para el registro
recién tratado.

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


terminado

14.5 DESCARGA y VISUALIZACION de campos BLOB

Funcionamiento General
 Se realiza la transferencia de un Blob de mi aplicación a tablas
temporales a través de la función GAT_FUNC_CARGA_BLOB
 Se ejecuta el programa servlet que descarga y visualiza el Blob de la
tabla temporal
 Finalizada la descarga-visualización la aplicación borrará de las tablas
temporales la información recién tratada.

Se realizarán los siguientes pasos:

1.- Generación de una Clave Externa.

Se genera en nuestra aplicación, desde el módulo 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 aplicación a tablas temporales

Se transfiere el registro de la tabla de nuestra aplicación ‘XXXX’


(XXXX_TABLA_BLOB) que contiene el campo BLOB a tablas temporales
GAT_UPLOAD_... mediante la ejecución de la siguiente función de carácter
general del núcleo de Oracle
GAT_FUNC_CARGA_BLOB:
La función obtiene el nº de registros que recupera la sentencia “where”
que pasamos como parámetro.

Parámetros de entrada de la Función:


w_Cod_Aplicacion: Código de aplicación
w_Cd_Cl_Externa: Clave generada por la aplicación
w_Nom_Archivo: Nombre del archivo a generar para su posterior descarga
w_Tabla_Apl: Nombre de la tabla de la aplicación
(XXXX_TABLA_BLOB)

Área de Integración y Arquitectura de Aplicaciones Página: 51


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

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

Parámetros de salida de la Función:


z_Mensaje_Err: Mensaje de Error si se produce.

En éste punto se debe realizar COMMIT; para confirmar la inserción del


campo BLOB en las tablas temporales y que el proceso “externo” Servlet pueda
obtener ésta información

3.- Ejecución del Servlet para realizar la descarga-visualización del campo


BLOB

La llamada al servlet debe ser como se describe a continuación:


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

Los parámetros del querystring son los siguientes:

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


2. <user> - usuario que realiza la operación (no se utiliza para la conexión)
3. <apli> - aplicación 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 válidos:
C - Carga de archivos a tablas temporales
V - Descarga/Visualización de campos BLOB a fichero
para su posterior visualización

7. <zip> - Valores Válidos:


S - El fichero se almacenará comprimido
N - El fichero no se almacenará comprimido.
(Opcional, no es necesario añadir éste parámetro, por defecto no se
comprime).

Ejemplos de llamadas:

http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm1003_orcl8&user=U
SU1&apli=USUG&clave=USU1_20021217_101858&plantilla=defecto&opcblob
=V

Área de Integración y Arquitectura de Aplicaciones Página: 52


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm21_denivel2&user=G
AT1&apli=GAT&clave=GAT_20021217_101858&plantilla=azul&opcblob=V&zip
=S

Automáticamente el Servlet realizará la descarga del BLOB generando


un archivo en disco y posteriormente procederá a visualizar el documento
correspondiente con su aplicación 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 recién tratado.

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


terminado

14.6 CARGA DE BLOB DESDE URL

Funcionamiento General:
 Desde un punto determinado de una aplicación se realiza la
llamada el servlet genérico de upload pasandole entre otros parámetros
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
aplicación
 Finalizada la transferencia se borra de las tablas temporales los
registros asociados al fichero cargado

Se realizarán los siguientes pasos:

1.- Generación de una Clave Externa.

Se genera en nuestra aplicación, desde el módulo que llame al servlet


con un criterio de clave única, por ejemplo del tipo:
USER_YYYYMMDD_HH24:MI:SS

2.- Ejecución del Servlet de carga de ficheros con la opción BLOB -


opcblob-.

La llamada al servlet debe ser como se describe a continuación:


http://icmweb01.icm.es/util/upload/servlet/Servidor?opcion=CargarDeURL
&bd=<bd>&user=<user>&apli=<apli>&clave=<clave>&plantilla=<plantilla>
&nombre_fich=<nombre_fich>&urlfichero=<urlfichero>&zip=<zip>

Área de Integración y Arquitectura de Aplicaciones Página: 53


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Los parámetros del querystring son los siguientes:


1. <opcion> CargarDeURL
2. <bd> - base de datos donde se va a dejar la información del fichero
3. <user> - usuario que realiza la operación (no se utiliza para la conexión)
4. <apli> - aplicación 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 Válidos
S - El fichero se almacenará comprimido
N - El fichero no se almacenará comprimido. (Opcional, no es
necesario añadir éste parámetro, por defecto no se comprime).

Ejemplos de llamadas:

http://icmweb01.icm.es/util/upload/servlet/Servidor?opcion=CargarDeURL&bd=i
cm21_denivel2&user=ADMON&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 aplicación


Transferencia del registro recién insertado en tablas temporales a la
tabla de nuestra aplicación ‘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 aplicación
‘XXXX’.
:cla campo clave externa que se envió en paso 2 en la llamada al
Servlet upload.exe

Área de Integración y Arquitectura de Aplicaciones Página: 54


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

(en caso de que la tabla contenga más de un campo clave u otros


campos … se cumplimentarán en la sentencia insert anterior)

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


aplicación XXXX_TABLA_BLOB

4.- Borrado de Registros de Tablas Temporales

Una vez almacenado el campo BLOB en nuestra aplicación debemos


realizar el borrado de las tablas temporales GAT_UPLOAD… para el registro
recién 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

NOTA: 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
/******************************************************************************************
*
FUNCIÓN: GAT_FUNC_CARGA_BLOB
DESCRIPCIÓN: Realiza Descarga Blob desde la tabla Origen 'Tabla de la

Área de Integración y Arquitectura de Aplicaciones Página: 55


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Aplicación' a la tabla
de Trabajo.
La función obtiene el Nº de Registros que recupera la Clave de la Tabla
de la Aplicación
Se obtiene 1 la función ha funcionado correctamente
Se obtiene 0 ó >= 2 La Clave de la tabla de la Aplicación es errónea
no recupera 1 Registro
Si devuelve -1 se ha producido un error en la Función
Si devuelve -2 se ha detectado parámetros obligatorios de Entrada con
valor Nulo
*******************************************************************************************
*/

v_Nm_Fichero GAT_UPLOAD_FICHERO.Nm_Fichero%TYPE;
v_Cuenta Integer;
BEGIN
-- Validaciones de Parámetros
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 parámetros de entrada de la Función 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;

-- 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
ningún registro.';
RETURN(v_Cuenta);
ELSIF v_Cuenta >= 2 THEN z_Mensaje_Err := 'La Clave Principal ha
obtenido Más de 1 registro.';
RETURN(v_Cuenta);
END IF;
-------------------------------------------------------------

Área de Integración y Arquitectura de Aplicaciones Página: 56


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

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
/******************************************************************************************
*
FUNCIÓN: GAT_FUNC_CARGA_CLOB
DESCRIPCIÓN: Realiza Descarga Clob desde la tabla Origen 'Tabla de la
Aplicación' a la tabla
de Trabajo.
La función obtiene el Nº de Registros que recupera la Clave de la Tabla
de la Aplicación
Se obtiene 1 la función ha funcionado correctamente
Se obtiene 0 ó >= 2 La Clave de la tabla de la Aplicación es errónea
no recupera 1 Registro
Si devuelve -1 se ha producido un error en la Función
Si devuelve -2 se ha detectado parámetros obligatorios de Entrada con
valor Nulo
*******************************************************************************************
*/

v_Nm_Fichero GAT_UPLOAD_FICHERO.Nm_Fichero%TYPE;
v_Cuenta Integer;
BEGIN
-- Validaciones de Parámetros
IF w_Cod_Aplicacion IS NULL OR w_Cd_Cl_Externa IS NULL OR

Área de Integración y Arquitectura de Aplicaciones Página: 57


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

w_Nom_Archivo IS NULL OR w_Tabla_Apl IS NULL OR w_Campo_Clob IS


NULL THEN
z_Mensaje_Err := 'Los parámetros de entrada de la Función no
pueden ser Nulos.';
RETURN (-2);
END IF;
--

-- Evalúo si se va a procesar un Conjunto de Líneas 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
ningún registro.';
RETURN(v_Cuenta);
ELSIF v_Cuenta >= 2 THEN z_Mensaje_Err := 'La Clave Principal ha
obtenido Más de 1 registro.';
RETURN(v_Cuenta);
END IF;

-----------------------------------------------------------------------------------
-- Tratamiento de un Conjunto de Líneas -------------------------------------------
-----------------------------------------------------------------------------------
ELSIF w_Campo_Nm_Linea IS NOT NULL THEN

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;

Área de Integración y Arquitectura de Aplicaciones Página: 58


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

-- Valida que Clave Principal recupera algún registro -----------


v_Cuenta := SQL%ROWCOUNT;
IF v_Cuenta = 0 THEN z_Mensaje_Err := 'La Clave Principal No ha obtenido
ningún 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;
/

Área de Integración y Arquitectura de Aplicaciones Página: 59


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

15 CREACIÓN DE TABLA ORACLE CON CAMPOS BLOB

Script de creación de una tabla que contiene un campo BLOB en la que se fijan
las características de acceso y almacenamiento al mismo.

CREATE TABLE XXXX_TAB_BLOB

(
...
campo_lob BLOB
...
)
LOB (campo_lob) STORE AS (CHUNK 4096
PCTVERSION 10
NOCACHE LOGGING
TABLESPACE TBSLOB_XXXX_100);

Para la incorporación de tablas que contienen campos de tipo BLOB en Erwin


es más sencillo la creación por un lado de la tabla normal y por otro de las
características del campo BLOB mediante una sentencia ‘ALTER TABLE’.

De este modo en el Post-Script de Erwin asociado a la tabla tendríamos


solamente la sentencia ‘ALTER TABLE …’ (en el caso del create anterior en
un modelo Erwin habría de incorporarse en su totalidad la sentencia create
table en el Post-Script).

CREATE TABLE XXXX_TAB_BLOB


(
...
campo_lob BLOB
...
);

ALTER TABLE XXXX_TAB_BLOB MOVE


LOB (campo_lob) STORE AS (CHUNK 4096
PCTVERSION 10
NOCACHE LOGGING
TABLESPACE TBSLOB_XXXX_100);

Área de Integración y Arquitectura de Aplicaciones Página: 60


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

16 ACCESO A ESTACIÓN DE ESCANER

PROCESO:
1. Forms ejecuta el Servlet pasándole los parámetros adecuados (bajo
el frame 'oculto')
Ejemplo de Llamada al Servlet desde Forms:

1 - Es necesario incorporar en el fichero ini de la Aplicación Forms el


siguiente parámetro:

[LOAD]
; *** Parámetros válidos solamente para la ejecución 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 Código de


Ejecución del Servlet:

DECLARE
WURL VARCHAR2(250); -- almacena la URL de llamada al Servlet
con los parámetros necesarios
v_Upload_Exe VARCHAR2(200); -- almacena la dirección URL del Servlet
obtenida del parámetro Upload_Exe del fichero ini de la Aplicación
-- Los posibles Valores de :BOTONES.Formato son: JPG
-- TIF, TIFBN
PDF, PDFBN
-- Los posibles Valores de :BOTONES.Vis_Imagen son: S
-- N
-- Los posibles Valores de :BOTONES.Vis_Interface son: S
-- N
BEGIN
v_Upload_Exe := LEER_FICH_INI(:GLOBAL.Fich_Ini ,'Upload_Exe');

:BOTONES.ID_CLAVE :=
USER||TO_CHAR(SYSDATE,'DDMMYYYYHH24MISS'); -- Generación de
Clave Única dinámicamente

WURL :=
v_Upload_Exe||'?opcion=GeneraActiveX'||'&BD='||:GLOBAL.WBD||'&APL='||:GL
OBAL.COD_APLICACION||'&CLAVE='||:BOTONES.ID_CLAVE||'&USU='||USE
R||'&FORMATO='||:BOTONES.Formato||'&VIS_IMAG='||:BOTONES.Vis_Image
n||'&VIS_INTF='||:BOTONES.Vis_Interface;

Área de Integración y Arquitectura de Aplicaciones Página: 61


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

WEB.SHOW_DOCUMENT(WURL,'oculto'); -- Ejecución del Servlet


END;
2. El Servlet crea página -incrustando el ActiveX- y la invoca

3. Si es la 1ª vez que se ejecuta esta opción se solicitará la instalación


automática del ActiveX en el puesto

4. Se interactúa con el ActiveX para realizar el escaneo


Requisitos:
- se ha de tener un escáner homologado con los driver
correctamente instalados

17 ENVÍO DE CORREO DESDE FORMS

Como solución al envío de correo electrónico desde Forms se han elaborado


varias soluciones que a continuación se detallan en función de la versión de
Oracle Forms a utilizar (Forms4.5 – Forms6i) y del tipo de envío a realizar:

17.1 Envío de correo desde Forms v4.5 (Unix)

Esta funcionalidad se realiza mediante la ejecución de un módulo


genérico en Perl que es el encargado de realizar el envío, cara a
nuestros desarrollos es tan simple como realizar la ejecución HOST del
módulo “sendmail.pl” con los siguientes parámetros:

sendmail.pl –f UsuarioRemitente –t UsuarioDestino –u “Asunto” –m


“Mensaje” –s Servidor –a FicheroAdjunto –cc UsuarioCopia –q

siendo los parámetros siguientes:

-f Usuario que envía 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

Área de Integración y Arquitectura de Aplicaciones Página: 62


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Un ejemplo de llamada sería el siguiente:

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


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

17.2 Envío 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 función en el núcleo de Oracle
‘SIS_FUNC_ENVIO_CORREO’ que nos permitirá de modo rápido e
inmediato realizar el envío de correos.
Los parámetros utilizados en esta función son los siguientes:

Remitente …: (IN) indica el usuario que envía el correo


Destinatario …: (IN) indica el/los usuarios destinatarios del
correo (separados por el carácter ; )
Asunto ...: (IN) asunto del correo
Mensaje ...: (IN) texto del correo
TipoDestino ...: (IN) tipo de destino ‘I – Interno’ ,
‘E – Externo’
‘M – Masivo’
(por defecto ‘I’)
Salida …: (Out) en caso de envío erróneo, el texto del
error

Result …: El resultado de la función es un campo numérico


que devolverá:
0 – envio correcto
1 – envío erroneo (el texto del error en el campo
out Salida)

Un ejemplo de envío de este tipo de correo lo tenéis disponible en la


siguiente URL, accediendo a la opción de menú:
Correo -> Envio de Correo
de una aplicación de pruebas ‘GPER’ accesible desde la siguiente URL:
http://nticmdes01.icm.es:8080/dev60cgi/ifcgi60.exe?form=gper_ap
l.fmx

Este procedimiento actualmente esta habilitado en la base de datos de


desarrollo ‘icm21_decentrl’ solamente en pruebas ya que la creación del
mismo está superditada a que la base de datos tenga la opción de Java
instalada.

Área de Integración y Arquitectura de Aplicaciones Página: 63


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

17.3 Envío 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 ejecución de un Report, un archivo .pdf
que existía en el disco del servidor de aplicaciones).

Estos archivos que no existen en disco serán generados por el trabajo


Batch ‘icm_correo.exe’ como resultado de la ejecución de una consulta,
esta consulta se debe de informar previamente en la tabla
‘XXXX_CORREO’ bajo el nuevo atributo ‘QUERY’ que se ha de añadir a
la estructura tipo que teníamos en nuestra tabla correo de aplicación
(para los que utilizaban anteriormente esta funcionalidad, no obstante no
es obligatorio, el envío de correo seguirá funcionando como hasta ahora
sin añadir este atributo pero no se dispondrá de esta nueva
funcionalidad).

Por tanto la definición completa de la tabla tipo de cada aplicación


‘XXXX_CORREO’ se debe de ajustar a la siguiente estructura:

Desc XXXX_CORREO
CD_CLAVE VARCHAR2(30) (clave única)
REMITENTE VARCHAR2(30) (quien envía 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 M-)
TP_DESTINO VARCHAR2(1) (tipo de envio ‘I-Interno’ ,
‘E-Externo’ –defecto I-)
FC_SOLICITUD DATE (fecha de solicitud de
envío)
FC_ENVIO DATE (no cumplimentar, lo
hace el proceso de envío de correo)
RESULTADO VARCHAR2(250) (no cumplimentar, lo
hace el proceso de envío de correo)
QUERY CLOB “nuevo atributo”
(cumplimentar en el caso de generar archivo/s adjunto a partir de una
consulta en B.D.)

Área de Integración y Arquitectura de Aplicaciones Página: 64


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

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 obtendrán el/los archivos contenidos en ‘ADJUNTOS’ del
disco del servidor.

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 código:

Área de Integración y Arquitectura de Aplicaciones Página: 65


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

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 continuación unos ejemplos con distintas posibilidades en el envío:

1.- Envío 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.- Envío 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.- Envío 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)

Una prueba de integración de esta funcionalidad la podéis comprobar


desde la siguiente URL:
http://nticmdes01/forms6/lanza_ejemplos/envio_correo_forms.htm

Área de Integración y Arquitectura de Aplicaciones Página: 66


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

18 Empleo de Frames en Aplicaciones Forms

Un frame es un área de visualización de la ventana del navegador, se puede


definir una zona horizontal o vertical, la definición 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 página que no queremos que sea visualizada en ningún momento.
Para ello lo que hacemos es definirnos un determinado frame con unas
características especiales de tamaño y visualización cero de modo que el
resultado del mismo sea un frame oculto.

¿ como definimos una página con frames ?

La definición de los frames la hacemos en la página principal ‘index.htm’ de


acceso a nuestra aplicación:

http://nticmdes01.icm.es/XXXX

Para crear una página de estas características, desde Front-Page, seguimos los
siguientes pasos:

Archivo -> Nuevo -> Pagina o Web -> Nuevo a partir de una plantilla -> División
horizontal

En este momento nos aparece una página donde podemos ubicar nuestras
páginas ya existentes, en la zona superior la página con el contenido (texto, logo,
enlace a la aplicación …) y en la zona inferior el nombre de una página en blanco
(no contiene nada ya que será esta la zona de frame oculto).

Área de Integración y Arquitectura de Aplicaciones Página: 67


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Una vez creada la página index.htm de este modo, pasamos a personalizar las
características de los frames contenidos, por tanto nos iremos a la solapa inferior
–HTML de página 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 página que le hemos
indicado.

Área de Integración y Arquitectura de Aplicaciones Página: 68


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

De este modo quedaría así la página:


enlace

“oculto” no se visualizaría (0% de visualización)

¿ como hacemos uso de los frames en forms ?

Desde nuestros forms y através de la built-in WEB.SHOW_DOCUMENT –la cual


nos permite invocar una determinada URL- utilizaremos el frame definido como en
el siguiente ejemplo:

BEGIN
..
Wurl := 'http://
icmweb01.icm.es/util/upload/servlet/Servidor?opcion=GeneraActiveX'|| '&BD=IC
M21_DENIVEL2&APL='
||:GLOBAL.COD_APLICACION||'&CLAVE='||:BLO.ID_CLAVE||'&USU='||USER||
'&FORMATO=TIF&VIS_IMAG=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 visualización de ayudas se realiza sobre este frame y al ser oculto jamás
conseguiríamos verlas
- la visualización de los pdf’s de la aplicación –a través del módulo gral.
LIS_REP- sufrirían el mismo efect, no se visualizarían
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 producción que de
repente una llamada a Servlet que siempre nos ha funcionado nos deja de
funcionar, no hace nada, ni siquiera se ejecuta.

Área de Integración y Arquitectura de Aplicaciones Página: 69


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Tras pruebas se detecta la siguiente situación:

- cuando accedemos a la página principal de la aplicación lo hacemos con


dominio, por ejemplo
http://nticmpro32.icm.es/XXXX/
y dentro de esta página 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 página web principal de acceso a la aplicación incluiremos
la llamada también con dominio:
http://nticmdes01.icm.es:8080/dev60cgi/ifcgi60.exe?form=XXXX_APL.fm
x
de este modo nos evitaremos problemas en el posterior paso de la aplicación a
producción.

19 UTILIZACIÓN DE FRAME OCULTO EN PÁGINA HTML CON


FRAMES VERTICALES

Partimos de ésta Situación, una página principal.htm, que contiene 2 Marcos


Horizontales:
lateral – apunta a la página lateral.htm
central – apunta a la página central.htm

En el marco Central se encuentran los hipervínculos a las aplicaciones Forms


con Marco de Destino: Toda la página (_top)

Área de Integración y Arquitectura de Aplicaciones Página: 70


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Página Principal.htm

LATERAL CENTRAL

Hipervinculo a aplicación Forms _top

Para evitar la visualización de la URL en las llamadas al Servlet desde Forms,


sería necesario incorporar una página inicial.htm que va a contener 2 Marcos
Verticales:
principal – apunta a la página principal.htm
oculto – apunta a la página 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)

Página Inicial.htm

PRINCIPAL

OCULTO

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

Área de Integración y Arquitectura de Aplicaciones Página: 71


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

20 EJECUCIÓN DE INFORMES CRYSTAL REPORTS

20.1 Obtener el token de business Objects


Esto se realiza ejecutando la función de base de datos
WS_PACK_CRYSTALR_0001.OBTENER_TOKEN

/*******************************************************************************************
* FUNCTION: OBTENER_TOKEN
*
* DESCRIPCIÓN: Para un cod. usuario y clave (Business Objects) obtiene el token de
crystal report
*
* PARÁMETROS:
* w_usuario: Parámetro Obligatorio. Código de Usuario (Business Objects)
* w_clave: Parámetro Obligatorio. Clave encriptada (Business Objects)
* z_Token: Parámetro de salida. token para ejecucion informe crystal report
* z_Cd_Mensaje_Err: Parámetro de salida. Codigo de Mensaje de Error
* z_Ds_Mensaje_Err: Parámetro de Salida. Descripciòn de Mensaje de Error
*
* VALORES DE RETORNO DE LA FUNCIÓN: True
* False
*
* CODIGOS Y DESCRIPCIONES DE ERROR:
* Codigo de Error Descripción
* --------------- ------------
* 1 'Los parámetros w_usuario, w_clave son obligatorios'
* 100 Cualquier error o excepción de Oracle: SQLERRM
*
********************************************************************************************/

A la función se le pasarán como parámetros el Usuario y Clave (de


business Objects) . Éstos parámetros se almacenan en el fichero ini,
ejemplo:

[BUSINESS OBJECTS]
;*** Parámetros válidos solamente para obtener token de B.O
bo_usuario=EJPL_Usu
bo_clave=C7FFB972B34AB66E2C45124586507E4F

20.2 Ejecución de Informe Crystal Report


 Una vez obtenido el token se compone la url de ejecución 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&sDocName=EJPLListadoEmpleados&sOutputFormat=P&token=icmdesbi01:6400@34236JCl
HcPZDmlET75s534235JBAqEg6vt8ePfmgE’, ‘_blank’);

Área de Integración y Arquitectura de Aplicaciones Página: 72


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Nombre del manual TODO SOBRE FORMS 1OG

Área de Integración y Arquitectura de Aplicaciones Página: 73


Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras

También podría gustarte