todo sobre forms 10g - Comunidad de Madrid

Transcription

todo sobre forms 10g - Comunidad de Madrid
Nombre del manual
TODO SOBRE FORMS 1OG
TODO SOBRE FORMS 10G
Fecha
01/11/2007
Versión
1.0
Cambios
Versión Inicial
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 1
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
3.7.2
3.7.3
3.7.4
3.7.5
3.8
4
MENU BASE.......................................................................................................... 10
APL_BASE ............................................................................................................ 11
FORM_BASE......................................................................................................... 12
F60_MANT1 .......................................................................................................... 14
F60_MANT2 .......................................................................................................... 15
Plantilla Lista de Valores .......................................................................... 18
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 2
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 3
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 4
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 5
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 6
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 7
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 8
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 9
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 :
(Por ejem: PRY1_MENU.mmb)
’nombre_de_aplicación’_MENU.mmb
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 10
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 11
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 12
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 13
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 14
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 15
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 16
Nombre del manual
TODO SOBRE FORMS 1OG
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 17
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 18
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 19
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 20
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 21
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 22
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 23
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
1Estilo: Parar
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 24
Nombre del manual
TODO SOBRE FORMS 1OG
23-
Estilo: Nota
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 25
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 26
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 27
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 28
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 29
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 30
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 31
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 32
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 33
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 34
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 35
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 36
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 37
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 38
Nombre del manual
2. Programa Delphi:
zip (con
TODO SOBRE FORMS 1OG
- genera una serie de ficheros dentro de un fichero
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 Word o WordPerfect, es obtenida de base
- Plantilla:
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 39
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 40
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 41
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 -uploadLos 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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 42
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 43
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:
<bd> - base de datos donde se va a dejar la información del fichero
<user> - usuario que realiza la operación (no se utiliza para la conexión)
<apli> - aplicación que hace la carga
<clave> - clave de referencia para localizar el registro
<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
1.
2.
3.
4.
5.
Ejemplos de llamadas:
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 44
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 45
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 46
Nombre del manual
w_Campo_Clob:
TODO SOBRE FORMS 1OG
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 47
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.
2.
3.
4.
5.
<bd> - base de datos donde se va a dejar la información del fichero
<user> - usuario que realiza la operación (no se utiliza para la conexión)
<apli> - aplicación que hace la carga
<clave> - clave de referencia para localizar el registro
<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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 48
Nombre del manual
TODO SOBRE FORMS 1OG
14.4 CARGA de cualquier tipo de Archivo a campos BLOB uploadFuncionamiento 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.
2.
3.
4.
5.
<bd> - base de datos donde se va a dejar la información del fichero
<user> - usuario que realiza la operación (no se utiliza para la conexión)
<apli> - aplicación que hace la carga
<clave> - clave de referencia para localizar el registro
<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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 49
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 50
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 51
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.
2.
3.
4.
5.
<bd> - base de datos donde se va a dejar la información del fichero
<user> - usuario que realiza la operación (no se utiliza para la conexión)
<apli> - aplicación que hace la carga
<clave> - clave de referencia para localizar el registro
<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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 52
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 53
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 54
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 55
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 56
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 57
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 58
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 59
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 60
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 61
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
-t
-u
-m
-s
-a
-cc
-q
Usuario que envía el correo
Usuario/s destinatario del correo (separados por espacio)
Asunto del correo
Texto del mensaje de correo
Servidor, posibles valores:
I=Interno – E=Externo (por defecto I)
Fichero/s adjuntos (separados por espacio)
Con copia a
se enviará siempre para obviar la salida
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 62
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 adjuntosDesde 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
…:
que devolverá:
El resultado de la función es un campo numérico
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 63
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)
REMITENTE
VARCHAR2(30)
DESTINATARIO
VARCHAR2(2000)
correo, separado por el caract ; )
TITULO
VARCHAR2(250)
MENSAJE
CLOB
ADJUNTOS
VARCHAR2(250)
separados con el caract. ; )
TP_ENVIO
VARCHAR2(1)
Individual’ , ‘M-Masivo’ –defecto M-)
TP_DESTINO
VARCHAR2(1)
‘E-Externo’ –defecto I-)
FC_SOLICITUD
DATE
(clave única)
(quien envía el correo)
(destinatario/s del
(asunto del correo)
(cuerpo del correo)
(archivos adjuntos
(tipo de envio ‘I(tipo de envio ‘I-Interno’ ,
(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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 64
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 65
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 66
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 67
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 68
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 69
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 70
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 71
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
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 72
Nombre del manual
TODO SOBRE FORMS 1OG
Área de Integración y Arquitectura de Aplicaciones
Dirección de Análisis y Mantenimiento de Aplicaciones y Desarrollos Institucionales
Subdirección General de Desarrollo, Tecnología e Infraestructuras
Página: 73