FORMS MUS Metodologia
FORMS MUS Metodologia
FORMS MUS Metodologia
Versin 1.0
Forms v6 y v10
Manual del desarrollador
Hoja de Control
Ttulo
Forms v6 y v10
Documento de Referencia
Responsable
Versin
1.0
Fecha Versin
28/01/2013
Registro de Cambios
Versin
1.0
1.1
Pgina 2 de 72
28/01/2013
Forms v6 y v10
Manual del desarrollador
ndice
1.
INTRODUCCIN ...................................................................................................................................................5
1.1
1.2
2.1
2.2
2.3
DOCUMENTACIN ..........................................................................................................................................6
2.4
3.1
FORMS V6 ..........................................................................................................................................................6
3.2
LIBRERIAS .............................................................................................................................................................7
4.1
ICM_OBJ.OLB ...................................................................................................................................................7
4.2
ICM_PLL.PLL ....................................................................................................................................................8
4.2.1
5
APL_BASE ..................................................................................................................................................... 13
MENU_BASE ................................................................................................................................................. 14
FORM_BASE ................................................................................................................................................. 15
F60_MANT1 ................................................................................................................................................... 16
F60_MANT2 ................................................................................................................................................... 18
LOV_GEN ...................................................................................................................................................... 19
SOLUCIONES....................................................................................................................................................... 22
7.1
7.2
7.3
7.3.1
7.3.2
7.3.3
7.3.4
7.3.5
7.3.6
7.3.7
7.4
7.5
7.5.1
7.5.2
7.5.3
7.6
7.6.1
7.6.2
7.7
7.8
7.8.1
CALENDARIO ............................................................................................................................................... 22
FUSION DE DOCUMENTOS ........................................................................................................................ 23
TRATAMIENTO DE CAMPOS LOB ............................................................................................................ 27
CARGA DE ARCHIVOS TEXTO A CLOB ............................................................................................... 27
DESCARGA Y VISUALIZACION DE CLOB........................................................................................... 29
CARGA DE ARCHIVO DE TEXTO A CAMPO CLOB Y CAMPO BLOB .............................................................. 32
CARGA DE ARCHIVOS BINARIOS A BLOB ......................................................................................... 34
CARGA DE ARCHIVOS BINARIOS A BLOB DESDE URL ................................................................... 36
DESCARGA Y VISUALIZACION DE BLOB........................................................................................... 38
FUNCIONES GAT_FUNC_CARGA_BLOB Y GAT_FUNC_CARGA_CLOB ........................................... 41
ESCANEO DE DOCUMENTOS .................................................................................................................... 45
ENVIO DE CORREO ..................................................................................................................................... 46
ENVO DE CORREO DESDE FORMS V4.5 (UNIX) ............................................................................................ 46
ENVO DE CORREO DESDE FORMS6I -SIN ARCHIVOS ADJUNTOS- ................................................................... 47
ENVO DE CORREO DESDE FORMS 6I -CON ARCHIVOS ADJUNTOS .................................................................. 47
INFORMES CRYSTAL REPORTS................................................................................................................ 51
OBTENER EL TOKEN DE BUSINESS OBJECTS.................................................................................................. 51
EJECUCIN DE INFORME CRYSTAL REPORT ................................................................................................. 51
ICONOS .......................................................................................................................................................... 52
PROCESOS BATCH ...................................................................................................................................... 55
EJECUCION DE TRABAJOS .................................................................................................................... 56
Pgina 3 de 72
Forms v6 y v10
Manual del desarrollador
7.8.2
7.8.3
10
WEBS DE LA APLICACIN.......................................................................................................................... 63
10.1
10.1.1
10.1.2
10.2
FRAMES ..................................................................................................................................................... 64
FRAME OCULTO ...................................................................................................................................... 67
10.2.1
11
UTILIDADES .................................................................................................................................................... 69
11.1
CONV_F10G ..................................................................................................................................................... 69
11.2
11.3
11.4
12
COMP_F6 ....................................................................................................................................................... 70
CONTROL FICHEROS ................................................................................................................................... 70
COMPLINUX ................................................................................................................................................. 70
MIGRACION DE APLICACIN DE FORMS V6 A FORMS V10 ............................................................ 71
Pgina 4 de 72
Forms v6 y v10
Manual del desarrollador
1. INTRODUCCIN
Documentacin acerca de la utilizacin de forms v6 y forms v10 en las aplicaciones de la Comunidad de
Madrid.
1.1
AUDIENCIA OBJETIVO
Este documento va dirigido a jefes de proyecto, analistas y desarrolladores de proyectos que utilicen forms
v6 o forms v10.
1.2
CONOCIMIENTOS PREVIOS
Para un completo entendimiento del documento, el lector deber tener conocimientos previos sobre las
siguientes tecnologas:
Oracle Forms
Report Builder
NORMATIVA Y ESTANDARES
La ubicacin donde podemos encontrar todos los componentes que a continuacin se detallan para su
posterior localizacin es la siguiente:
\\Icm\Icm\EMBAJ181\GRP\Formsv10g para Forms v10g
\\Icm\Icm\EMBAJ181\GRP\Formsv6
para Forms v6
2.1
Sentencias DDL
2.2
Pgina 5 de 72
Forms v6 y v10
Manual del desarrollador
Tamao de Fuente de Ttulo de Marco : 9
En los Tipos de Grfico como (Rectngulo, Marco,..) el bisel debe ser Sin Relieve y como Color de Fondo
Ningn Relleno.
Los Colores de Fondo de las ventanas ,Lienzos y botones debern llevar el valor <No especificado>
teniendo en cuenta que al realizar sta operacin nos aplica un Color de fondo por defecto que
normalmente es el Gris, si nos aplica otro color por defecto lo cambiaremos a Gris
Se puede aplicar en los Tipos de Objeto Elemento Mostrado (Display Item) el atributo visual
VIS_ATR_CAMPO_DISP siempre y cuando se visualicen en bloques con 1 solo registro de vsiualizacin
En los bloques multiregistro para resaltar el registro sobre el que estamos posicionados durante la
navegacin se consigue aplicando el atributo visual REGISTRO_CURRENT (disponible en las plantillas)
sobre la propiedad CURRENT_RECORD_ATTRIBUTE del bloque.
Los botones Icnicos como norma general tienen una dimensin de 18x18
En la configuracin del Forms Server hay que indicar que se va a trabajar con unas dimensiones del
AppletViewer del modo siguiente, en los parmetros del fichero formsweb.cfg :
widht=800
height=600
2.3
Documentacin
2.4
ARQUITECTURA FISICA
3.1
FORMS V6
3.2
FORMS V10
Pgina 6 de 72
Forms v6 y v10
Manual del desarrollador
4
LIBRERIAS
4.1
ICM_OBJ.OLB
Librera de Objetos que contiene los objetos comunes que componen los distintos mdulos genricos o
plantillas a partir de las cuales iniciaremos nuestros programas.
Esta librera ha de encontrarse almacenada en una ubicacin que sea accesible en todo momento a travs
del contenido de la variable FORMS90_PATH, de este modo los mdulos sern cargados correctamente a
la hora de ser abiertos desde FormBuilder.
Pgina 7 de 72
Forms v6 y v10
Manual del desarrollador
(Trigger On-Log, When-new-form-instance, bloques, campos, Canvas y Windows)
Este grupo de objetos ser referenciado por la plantilla FORM_APL que se detalla en otro punto dentro
de este documento.
- Atributos visuales genricos para campos de entrada, prompt, campos de display y de opciones de
men.
- Alarma de carcter general.
NOTA
Estn Prohibidas la utiizacin de referencias de objetos de un Form a otro Form, cuando se
necesiten realizar referencias a objetos se utilizar una librera de objetos (olb)
4.2
ICM_PLL.PLL
Librera de PL/SQL que contiene procedimientos de carcter general.
Contiene entre otros:
- APLICAR_PERFIL, para habilitar/deshabilitar objetos dentro de un form en funcin del perfil del usuario
de entrada a la aplicacin.
- GENERAR_MENU, iden. a nivel de opciones del men activo para la aplicacin.
- CIFRA, para realizar la encriptacin de la password del usuario de entrada.
- LEER_FICH_INI, utilidad para leer claves incluidas en el ficheros de .ini para la aplicacin
- y otras de carcter general.
Es necesario a la hora de desarrollar un nuevo proyecto, lo primero, fijar la variable de entorno del regedit:
\HKEY_LOCAL_MACHINE\Software\Oracle
FORMS90_PATH
a la carpeta donde se encuentre ubicada dicha librera ya que al abrir cualquiera de los mdulos que
contengan referencias a la misma nos obligar a que est localizada, bien en el directorio en donde vamos
a desarrollar nuestra aplicacin, bien en la carpeta de red donde se encuentran los archivos generales de
infraestructura, opcin esta ltima la ms aconsejada ya que as no nos tendremos que ocupar de
actualizar los cambios que se realicen sobre la misma.
(La correcta localizacin de esta librera ser el primer paso que hagamos antes de crearnos alguno de los
siguientes forms desde plantilla)
Pgina 8 de 72
Forms v6 y v10
Manual del desarrollador
NOTA
Hay que tener encuenta que la librera ICM_PLL ya tiene incorporada la librera F6_PROCS_SIS.pll .
Por lo tanto al atachar a nuestro form la librera ICM_PLL automticamente tendremos tambin la
librera F6_PROCS_SIS.pll . Posteriormente no se debe atachar la librera F6_PROCS_SIS.pll
4.2.1
Solamente para la migracin de los forms (v3) de procedimientos de carcter general se ha producido la
situacin de encontrarnos con dos procedimientos que se llaman de igual nombre contenidos en dos PLLs
distintas ambas de carcter general.
Pgina 9 de 72
Forms v6 y v10
Manual del desarrollador
el fin de ambos procedimientos es el mismo, mostrar un mensaje por pantalla, pero lo hacen de forma
distinta:
- el primero migrado de Forms v3 muestra un mensaje mediante la ejecucin de la built-in message por lo
tanto este aparecer en la linea de estatus de pantalla y adems el texto a mostrar lo obtiene de base de
datos en funcin de los parmetros recibidos en la llamada.
La llamada actual es del tipo:
MENSAJE(I,9999);
- el segundo tambin muestra un mensaje en pantalla pero este aparecer contenido en una ventana (el
modo habitual para cualquier mensaje de Windows) sin embargo no obtiene valor alguno de la base de
datos simplemente muestra en la ventana el texto que se la pasa por parmetro.
La llamada actual es del tipo:
MENSAJE(Texto);
Entonces para evitar tener dos procedimientos con idntica nomenclatura y tomar de cada uno de estos su
mxima funcionalidad se han realizado los siguientes cambios:
ICM_PLL.MENSAJE cambia el interface de llamada, pero no hace falta adaptacin alguna en los
programas que actualmente utilizan dicho procedimiento, aadiendole un nuevo parmetro y queda del
siguiente modo:
MENSAJE(TEXTO, [NUMERO] );
siendo este ltimo parmetro opcional con lo cual con el cambio obtenemos la siguiente funcionalidad:
- podemos utilizar la procedure como se utilizaba hasta ahora, para mostrar cualquier texto:
MENSAJE(Texto a mostrar);
- utilizar la procedure para obtener un mensaje a partir de la tabla de mensajes de base de datos
(ya que internamente la procedure detecta por el nmero de parmetros recibidos que en este
caso ha de realizar una llamada a PROCS_SIS.MENSAJE_BD para obtener el texto final a
mostrar):
Pgina 10 de 72
Forms v6 y v10
Manual del desarrollador
MENSAJE(I,9999);
- todos los procedimientos migrados de Forms v3 a PLLs a la hora de mostrar mensajes no
utilizarn la antigua procedure MENSAJE utilizarn esta nueva de ICM_PLL y por lo tanto los
textos se mostrarn siempre bajo una ventana de mensaje utilizando el interface de siempre.
MENSAJE(I,9999);
Adems aprovechando que se modificaban las libreras se borran de ICM_PLL.pll los siguientes
procedimientos:
- GLOBALES_MONEDA
- N2EDITAMONEDA
- N2EDITANUM2
ya que actualmente estn disponibles en la librera F6_PROCS_GENERAL.
MENSAJE_I
Tiene la misma funcionalidad que MENSAJE y adems permite escoger el Estilo(Icono) de Alerta
que se va a visualizar indicandole el estilo en el parmetro Tipo_Alerta
TEXTO
NUM_ADAPT
Estilo: Parar
2-
Estilo: Nota
3-
Estilo: Precaucin
Pgina 11 de 72
Forms v6 y v10
Manual del desarrollador
TEMPLATES (PLANTILLAS)
Se han creado una serie de mdulos genricos o plantillas los cuales ya contienen objetos referenciados a
la librera de objetos ICM_OBJ, tambin llevan incorporadas referencias a la librera de PL/SQL ICM_PLL
(localizada en disco).
La utilizacin de cualquiera de estas plantillas para los nuevos desarrollos se realizar del siguiente modo:
- seleccionar la opcin del men principal:
Nuevo Form con Plantilla Acceso a mdulo de fichero
navegaremos a nivel de carpetas hasta posicionarnos en la ubicacin donde se encuentran los forms de
infraestructura y seleccionaremos el mdulo del que se desea partir.
Pgina 12 de 72
Forms v6 y v10
Manual del desarrollador
Por el hecho de que estas plantillas contienen referencias a mdulos, cualquier modificacin que se realice
sobre ellos quedar reflejada en el momento de abrir de nuevo el mdulo -en caso de modificaciones en la
librera de objetos lCM_OBJ- y tan slo tendremos que compilar y automticamente en el caso de
modificacin de cualquier procedimiento/funcin de la librera PL/SQL ICM_PLL.
Estos mdulos se encuentran disponibles en la carpeta general de infraestructura y son los siguientes:
5.1
APL_BASE
Para la creacin del form de entrada a la aplicacin, en este form lo primero que se ha de hacer es
modificar el Trigger When-New-Form-Instance personalizndolo para la nueva aplicacin, se modificar:
:GLOBAL.COD_APLICACION := 'XXXX'; -- con el valor de nuestra aplicacin
:GLOBAL.FICH_INI := 'XXXX.ini'; -- con el nombre del fich. de ini de la aplicacin.
- Se intercepta la conexin inicial a Oracle (ON-LOGON) para posteriormente realizar por programa el
control de dicha conexin.
- Lectura del fichero de .ini para la aplicacin especificando entre otros datos la base de datos a la cual
realizaremos la conexin.
- Actualizacin de opciones de men segn el perfil del usuario de entrada (PROC. GENERAR_MENU).
- Incorporacin de la librera de utilidades generales ICM_PLL.pll
- Muchos de los objetos aqu creados se encuentran referenciados mediante un grupo de objetos de la
librera de Objetos general ICM_OBJ.olb
Este mdulo al salvarlo se realizar con la siguiente nomenclatura:
nombre_de_aplicacion_APL.fmb
Pgina 13 de 72
Forms v6 y v10
Manual del desarrollador
NOTA
-Se permite realizar conexiones con distintas aplicaciones incluso entre distintas bases de datossin necesidad de autentificacin por parte del usuario, no se mostrara la ventana inicial de
autentificacin. Esta funcionalidad requiere, por supuesto, que el usuario y la password de acceso para
conectar con otra aplicacin sea la misma con la que se autentific inicialmente el usuario.
La llamada a otra/s aplicaciones se realiza del siguiente modo:
NEW_FORM(XXXX_APL,FULL_ROLLBACK);
5.2
MENU_BASE
Contiene:
- Unas opciones de men de prueba simulando una llamada a un programa como estndar de
llamada, va CALL_FORM(XXX,NO_HIDE, NO_REPLACE);
- Incorporacin de opciones de ayuda con acceso dinmico a pginas HTML
- Opcin de abandono de aplicacin
Pgina 14 de 72
Forms v6 y v10
Manual del desarrollador
- Cdigo de ejecucin inicial Startup Code para controlar la ejecucin de las llamadas a
programas (para evitar el actual bug de la actual versin cuando ejecutamos ms de un Form a la
vez desde el men y se nos cuelga al realizar un acceso a base de datos).
- Incorporacin de la librera de utilidades generales ICM_PLL.pll
5.3
FORM_BASE
-Procedimiento para realizar la actualizacin de objetos del programa en base al perfil del usuario de
entrada a la aplicacin (PROC. APLICAR_PERFIL)
- Procedimiento para la interceptar los mensajes no controlados por aplicacin y obtenerlos mediante una
ventana de dilogo en lugar de mostrarlos en la linea de estado, muchas veces inapreciable.
- Incorporacin de la librera de utilidades generales ICM_PLL.pll
Pgina 15 de 72
Forms v6 y v10
Manual del desarrollador
- Contiene alarma general, atributos visuales etc.referenciados mediante un grupo de objetos de la
librera de objetos generales ICM_OBJ.olb
Inicialmente no se ha incluido ningn bloque en el mdulo de modo que para poder ejecutarlo lo primero
que se requiere es la creacin del al menos un bloque y un campo.
5.4
F60_MANT1
Pgina 16 de 72
Forms v6 y v10
Manual del desarrollador
1.- Crear un nuevo bloque asociado a la tabla a mantener
2.- Copiar los triggers del bloque 'BLOQUE_TRIGGERS_DE_TABLA' al nuevo bloque recien creado
(posteriormente borrar el bloque 'BLOQUE_TRIGGERS_DE_TABLA').
4.- Asociar a los campos del nuevo bloque el menu desplegable 'MENU_MANT'
5.- Incluir los filtros oportunos, si se necesitan, en pantalla y la programacin de los mismos en el
procedimiento 'PROC_FILTRO'.
6.- Incluir las validaciones necesarias para la actualizacin de los registros del nuevo bloque en el
procedimiento 'PROC_VALIDACIONES'.
Este form en concreto realiza el mantenimiento basandose en una nica ventana, es decir mantenemos
los datos en sobre el mismo bloque que se presenta para la consulta inicial.
Contiene todos los controles a nivel de perfiles e incorporacin de plls al igual que el form anterior
Form_Base.fmb.
Pgina 17 de 72
Forms v6 y v10
Manual del desarrollador
5.5
F60_MANT2
4.- Asociar a los campos del bloque multiregistro el menu desplegable 'MENU_MANT' ya existente en el
modelo.
5.- Fijar en el bloque 'registro nico', en el Trigger Pre-Query la igualdad de claves para realizar el
acceso adecuado entre ambos bloques.
6.- Incluir los filtros oportunos, si se necesitan, en pantalla y la programacin de los mismos en el
procedimiento 'PROC_FILTRO'.
7.- Incluir las validaciones necesarias para la actualizacin de los registros del nuevo bloque en el
procedimiento 'PROC_VALIDACIONES'.
Es similar al form anterior tan solo que para el mantenimiento del catlogo se tienen dos ventanas en
lugar de una como el anterior, de manera que cuando entramos por las opciones de actualizacin de
informacin nos aparecer una nueva ventana mostrndonos tan slo la informacin del registro a
procesar y cuando aceptamos o cancelamos los cambios regresamos a la ventana principal.
Pgina 18 de 72
Forms v6 y v10
Manual del desarrollador
5.6
LOV_GEN
Se han realizado pruebas con listas de valores(LOV) accediendo a tablas con un volumen importante de
registros obteniendose tiempos de respuesta bastante lentos.
Cuando ejecutamos una LOV lo que internamente realiza es una bajada de la totalidad de los registros que
obtiene la consulta al cliente con el consecuente coste de la accin, es decir si accedemos a una tabla, por
ejemplo, la de Interesados con un volumen aproximado de 100.000 registros la operacin se lleva un
tiempo ms que considerable (aproximadamente tarda el minuto).
Por lo tanto para este tipo de LOV sobre tablas de un volumen superior a los 2.000 registros se aconseja
emplear un form para este fin tomando como base del mismo un Form (plantilla) que se ha realizado
simulando el aspecto de la LOV estndar (de Web).
Este form acta con la lista de valores con un bloque asociado a tabla y la gestin del array de registros
que forms nos ofrece, en este caso al realizar una bsqueda (ExecuteQuery) tan solo se bajar al cliente
un array de registros igual al nmero de registros definidos para el multiregistro del bloque y
posteriormente segn bajamos por el grid nos va recuperando bloque a bloque de informacin pero nunca
se baja la totalidad del query de una vez.
Pgina 19 de 72
Forms v6 y v10
Manual del desarrollador
El template se encuentra disponible en la carpeta:
\plantillas
-Tambin hay que modificar la etiqueta que queremos que aparezca como cabeceras de campos
de la lista para ello modificamos la propiedad Prompt de los elementos del Bloque.
- Y por ltimo cambiar las propiedades de los elementos del bloque BTABLA en cuanto al tamao
de y ancho de visualizacin de los mismos.
Ejemplo de llamada a un Form tipo Lista de valores :
Pgina 20 de 72
Forms v6 y v10
Manual del desarrollador
6
FICHERO INI
; ***
; *** Fichero de ini - Aplicacin XXX
(DD/MM/YYYY)
; ***
[General]
BaseDatos=icm21_xxxxx
; *** Tipo de Ejecucin, posibles valores: -Web
-Windows
TipoEjecucion=Web
; *** Variable ejemplo para cargar en cuadro de informacin en men inicial
Entorno=Consejera de xxxxxxxx
[Ayudas HTML]
; *** Ubicacin de las pginas html de ayuda
WebAyuda=/xxxx/Forms/
[ReportBuilder]
; *** Parmetros vlidos solamente para Reports bajo TipoEjecucion=Web
Report_cache=\\cifs04v3002\DESA_WEB\web_reps\
Report_mapping=/web_reps/
Cola1=REPLIGERAD01
;Cola2=REPMEDIANAD01
; *** Para realizar impresin directa de Pdf's desde el mdulo LIS_REP.fmx
Impresion_pdf=/impresionpdf/cgi-bin/ImpresionPDF.exe
[GLIS]
; *** Parmetros vlidos solamente para la ejecucin del GLIS
GlisHost=icmsvds003
GlisDir=\\cifs04v3002\DESA_WEB\web_reps\
GlisCola=NORMAL
GlisMapping=/web_reps/
GlisExe=\\cifs04v3002\DESA_OAS_GENERAL\general\etc\GlisBatchListado.exe
GlisExe_Cubo=\\cifs04v3002\DESA_OAS_GENERAL\general\etc\GlisBatchCubo.exe
GlisExe_Sql=\\cifs04v3002\DESA_OAS_GENERAL\general\etc\GlisBatchSql.exe
GlisTemp=d:\temp\
GlisAyuda=/Glis_Ayuda/Forms/
Pgina 21 de 72
Forms v6 y v10
Manual del desarrollador
[UPLOAD]
; *** Parmetros vlidos solamente para le ejecucin del Upload
Upload_Exe=/util/upload/servlet/Servidor
[DOCX]
; *** Parmetros vlidos solamente para la ejecucin de Fusin de documentos
DocCola=NORMAL
DocDir=\\cifs04v3002\DESA_WEB\web_reps\
DocMapping=/web_reps/
DocServlet=/impreofi/servlet/Servidor
DocHost=HOST_ACTIVEX
DocExe=impreofi
[BUSINESS OBJECTS]
bo_usuario=EJPL_Usu
bo_clave=C7FFB972B34AB66E2C45124586507E4F
7.1
SOLUCIONES
CALENDARIO
Se ha creado un form que actua como calendario contemplando los festivos segn la tabla catlogo
CATA_FESTIVOS.
La llamada a este se realiza a partir del procedimiento FCALENDARIO, incluido en la librera general de
PL/SQL ICM_PLL.
Pgina 22 de 72
Forms v6 y v10
Manual del desarrollador
FCALENDARIO(:B10.FECHA,:B10.FIESTA,:B10.DIA_SEM,
GET_ITEM_PROPERTY('FECHA',X_POS),
GET_ITEM_PROPERTY('FECHA',Y_POS) );
7.2
FUSION DE DOCUMENTOS
Pgina 23 de 72
Forms v6 y v10
Manual del desarrollador
La Visualizacin de Fusin de Documentos consiste en la Fusin de una Plantilla Word o WordPerfect
salvada en la base de datos con un fichero de datos. Desde forms se llama al programa delphi encargado
de generar un fichero zip que contiene la plantilla, el fichero de datos y un fichero ini indicando la operacin
a realizar, una vez generado ste fichero zip, desde Forms se abre ste fichero cargandose
automticamente el visor Word_WordPerfect que realiza la fusin.
2. Programa Delphi:
3. Programa Forms:
2. Programa Delphi
Recibe del programa forms una cadena con los siguientes parmetros:
bd= Usuario, Password y Cadena de Conexin con el formato
Usuario/Password@cadena_conexion
operacion= Operacin a realizar, puede ser Visualizar (V) o Imprimir (I)
codigo= Cdigo de Plantilla
copias= N de copias
fichero= El path y nombre del fichero que se va a generar, el nombre del fichero debe llevar
la extensin W2Z.
dl= Directorio Temporal
Pgina 24 de 72
Forms v6 y v10
Manual del desarrollador
Va a generar un fichero zip (con extensin W2Z) que contiene los siguientes ficheros:
- Plantilla:
un tabla por codigo de Plantilla, que hemos recibido como parmetro del programa Forms
- Fichero de datos:
Fichero dbf
Ejemplo:
FORMULARIO=W2ZP.doc
DATOS=W2ZP.dbf
OPERACION=V
COPIAS=1
3. Programa Forms
Consta de las siguientes componentes:
Fichero Ini
Adems de los parmetros standard de una aplicacin Forms , el fichero ini de la aplicacin debe llevar los
parmetros predeterminados para la ejecucin de programas en batch, que son los siguientes:
DocxHost
DocxDir
genera.
DocxCola
DocxMapping =URL que apunta a la direcccin fsica dnde el programa delphi deposita el
fichero que genera.
DocxExe
DocxTemp
= Directorio temporal.
Obtiene un n de Peticin.
Pgina 25 de 72
Forms v6 y v10
Manual del desarrollador
EJECUCION
ESTADO
Ejemplo:
Pgina 26 de 72
Forms v6 y v10
Manual del desarrollador
7.3
La carga y descarga de ficheros al Server (upload y download respectivamente) cada vez est siendo ms
habitual en los proyectos Forms en WEB. Para facilitar los desarrollos y la puesta en produccin de las
aplicaciones se ha desarrollado un Servlet genrico para realizar este tipo de operaciones.
Modelo de datos.-
Se han creado tres tablas en GAT donde el Servlet almacenar la informacin de los ficheros a tratar a
modo temporal para que las distintas aplicaciones puedan procesar esta informacin, de este modo el
Servlet depositar o recoger siempre la informacin de ficheros de estas tablas temporales, son las
siguientes
GAT_UPLOAD_FICHERO .-
GAT_UPLOAD_LINEA .-
registro por cada lnea del archivo, aqu se almacenarn los campos de tipo CLOB.
GAT_UPLOAD_BLOB .-
Conexin a base de datos.No nos hemos de preocupar de la conexin ya que existen una cuenta preestablecida para cada base de
datos con la cual se conecta el Servlet.
7.3.1
Los archivos para hacer UPLOAD tendrn que ser archivos de texto, formato TXT y la estructura de cada
registro ser la que cada aplicacin defina y/o requiera.
Funcionamiento General:
Pgina 27 de 72
Forms v6 y v10
Manual del desarrollador
Desde un punto determinado de una aplicacin se realiza la llamada el servlet genrico de
upload.
Aparece una ventana de peticin de la localizacin del fichero a cargar.
El servlet sube el fichero al servidor y lo carga en las tablas temporales.
El archivo ya cargado ser tratado por nuestra aplicacin.
Una vez procesada esta informacin los datos se borrarn de las tablas temporales por
nuestra aplicacin.
Se genera en nuestra aplicacin, desde el mdulo que llame al servlet con un criterio de clave
nica, por ejemplo del tipo: USER_YYYYMMDD_HH24:MI:SS
http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm1003_orcl8&user=USU1&apli=USUG&clave=
USU1_20021217_101330&plantilla=defecto
http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm1003_orcl8&user=USU1&apli=USUG&clave=U
SU1_20021217_101330&plantilla=defecto&opcclob=C
Pgina 28 de 72
Forms v6 y v10
Manual del desarrollador
http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm21_denivel2&user=GAT1&apli=GAT&clave=
GAT1_20021217_101330&plantilla=azul
Una vez finalizado el Programa Servlet ya se han cargado las tablas Temporales y se ha generado un
registro por cada lnea del Fichero de texto en la tabla GAT_UPLOAD_LINEA
A travs de un cursor se leen los registros(uno para cada lnea del fichero) generados por el programa
Servlet. El cursor nos permite operar con cada registro(lnea del fichero) y realizar la operacin que
necesitemos.
NOTA: No se debe realizar la lectura de los registros hasta que el programa Servlet no ha finalizado.
Una vez finalizada la lectura de los registros en las tablas temporales GAT_UPLOAD_.... se realizar el
borrado de nuestros registros.
NOTA: Tanto en la carga de Blob como de Clob el nombre de Fichero que se indique debe ser nico
, para ello se puede utlizar la nomenclatura USER_DDMMYYYY_HHMMSS
7.3.2
Funcionamiento General
Se realiza la transferencia de un Clob o conjunto de registros de mi aplicacin a tablas temporales
a travs de la funcin GAT_FUNC_CARGA_CLOB
Se ejecuta el programa servlet que descarga y visualiza del Clob o conjuntos de registros de la
tabla temporal
Finalizada la descarga-visualizacin, la aplicacin borrar de las tablas temporales la informacin
recin tratada.
Se genera en nuestra aplicacin, desde el mdulo que llame al servlet con un criterio de clave nica, por
ejemplo del tipo: USER_YYYYMMDD_HH24:MI:SS
Pgina 29 de 72
Forms v6 y v10
Manual del desarrollador
2.- Paso de CLOB o del conjuntos de registros de nuestra aplicacin a tablas temporales
Cdigo de aplicacin
w_Cd_Cl_Externa:
w_Nom_Archivo:
w_Tabla_Apl:
w_Clave_Tabla_Apl:
w_Campo_Clob:
En ste punto se debe realizar COMMIT; para confirmar la insercin del campo CLOB en las tablas
temporales y que el proceso externo Servlet pueda obtener sta informacin
Cdigo de aplicacin
Pgina 30 de 72
Forms v6 y v10
Manual del desarrollador
w_Cd_Cl_Externa:
w_Nom_Archivo:
w_Tabla_Apl:
w_Clave_Tabla_Apl:
registros
Por ejemplo: WHERE ID_EXPETE=9877 and CDTIPO=A
w_Campo_Clob:
En ste punto se debe realizar COMMIT; para confirmar la insercin del conjunto de registros en
las tablas temporales y que el proceso externo Servlet pueda obtener sta informacin
3.- Ejecucin del Servlet para realizar la descarga-visualizacin del campo CLOB
Pgina 31 de 72
no es necesario aadir
Forms v6 y v10
Manual del desarrollador
Ejemplos de llamadas:
http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm1003_orcl8&user=USU1&apli=USUG&clave=US
U1_20021217_101858&plantilla=defecto&opcclob=V
http://icmweb01.icm.es/util/upload/servlet/Servidor?bd=icm21_denivel2&user=GAT1&apli=GAT&clave=GA
T_20021217_101858&plantilla=azul&opcclob=V&zip=S
7.3.3
Los archivos para hacer UPLOAD tendrn que ser archivos de texto, formato TXT y la estructura
de cada registro ser la que cada aplicacin defina y/o requiera.
Funcionamiento General:
Desde un punto determinado de una aplicacin se realiza la llamada el servlet genrico de
upload.
Aparece una ventana de peticin de la localizacin del fichero a cargar.
El servlet sube el fichero al servidor y lo carga en las tablas temporales tanto en lneas
como en fichero.
El archivo ya cargado ser tratado por nuestra aplicacin.
Una vez procesada esta informacin los datos se borrarn de las tablas temporales por
nuestra aplicacin.
Pgina 32 de 72
Forms v6 y v10
Manual del desarrollador
Se genera en nuestra aplicacin, desde el mdulo que llame al servlet con un criterio de clave
nica, por ejemplo del tipo: USER_YYYYMMDD_HH24:MI:SS
Ejemplos de llamadas:
http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm1003_orcl8&user=USU1&apli=USUG&clave=U
SU1_20021217_101330&plantilla=defecto&opcclob=T
http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm21_denivel2&user=GAT1&apli=GAT&clave=
GAT1_20021217_101330&plantilla=azul &opcclob=T
Una vez finalizado el Programa Servlet ya se han cargado las tablas Temporales y se ha generado un
registro por cada lnea del Fichero de texto en la tabla GAT_UPLOAD_LINEA y un registro en la tabla
GAT_UPLOAD_BLOB con el fichero blob
Pgina 33 de 72
Forms v6 y v10
Manual del desarrollador
b.cd_cl_externa = :cla)
siendo:
:pk1
:cla
(en caso de que la tabla contenga ms de un campo clave u otros campos se cumplimentarn
en la sentencia insert anterior)
A travs de un cursor se leen los registros(uno para cada lnea del fichero de la tabla
GAT_UPLOAD_CLOB) generados por el programa Servlet. El cursor nos permite operar con cada
registro(lnea del fichero) y realizar la operacin que necesitemos.
NOTA: No se debe realizar la lectura de los registros hasta que el programa Servlet no ha finalizado.
Una vez finalizada la lectura de los registros en las tablas temporales GAT_UPLOAD_.... se realizar el
borrado de nuestros registros.
NOTA: Tanto en la carga de Blob como de Clob el nombre de Fichero que se indique debe ser nico
, para ello se puede utlizar la nomenclatura USER_DDMMYYYY_HHMMSS
7.3.4
Funcionamiento General:
Desde un punto determinado de una aplicacin se realiza la llamada el servlet genrico de upload.
Aparece una ventana de peticin de la localizacin del fichero a cargar.
El servlet sube el fichero al servidor y carga las tablas temporales
Se transfiere el Blob de la tabla temporal a la tabla de mi aplicacin
Finalizada la transferencia se borra de las tablas temporales los registros asociados al fichero
cargado
Pgina 34 de 72
Forms v6 y v10
Manual del desarrollador
Se genera en nuestra aplicacin, desde el mdulo que llame al servlet con un criterio de clave
nica, por ejemplo del tipo: USER_YYYYMMDD_HH24:MI:SS
2.- Ejecucin del Servlet de carga de ficheros con la opcin BLOB -opcblob-.
no es
Ejemplos de llamadas:
http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm1003_orcl8&user=USU1&apli=USUG&clave=U
SU1_20021217_101858&plantilla=defecto&opcblob=C
http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm21_denivel2&user=GAT1&apli=GAT&clave=GA
T_20021217_101858&plantilla=azul&opcblob=C&zip=S
En este pto. ya tenemos el archivo BLOB cargado en las tablas temporales GAT_UPLOAD_...
Pgina 35 de 72
Forms v6 y v10
Manual del desarrollador
siendo:
:pk1
:cla
(en caso de que la tabla contenga ms de un campo clave u otros campos se cumplimentarn
en la sentencia insert anterior)
Una vez almacenado el campo BLOB en nuestra aplicacin debemos realizar el borrado de las
tablas temporales GAT_UPLOAD para el registro recin tratado.
NOTA: Tanto en la carga de Blob como de Clob el nombre de Fichero que se indique debe ser nico
, para ello se puede utlizar la nomenclatura USER_DDMMYYYY_HHMMSS
7.3.5
Funcionamiento General:
Pgina 36 de 72
Forms v6 y v10
Manual del desarrollador
Desde un punto determinado de una aplicacin se realiza la llamada el servlet genrico de
upload pasandole entre otros parmetros la url donde est ubicado el fichero. El servlet deposita el
fichero en la tabla gat_upload_blob
Se transfiere el Blob de la tabla temporal a la tabla de mi aplicacin
Finalizada la transferencia se borra de las tablas temporales los registros asociados al
fichero cargado
Se genera en nuestra aplicacin, desde el mdulo que llame al servlet con un criterio de clave
nica, por ejemplo del tipo: USER_YYYYMMDD_HH24:MI:SS
2.- Ejecucin del Servlet de carga de ficheros con la opcin BLOB -opcblob-.
Ejemplos de llamadas:
Pgina 37 de 72
Forms v6 y v10
Manual del desarrollador
http://desarrollo.madrid.org/upload/servlet/Servidor?opcion=CargarDeURL&bd=icm21_denivel2&user=ADM
ON&apli=USUI&clave=ADMON_20021217_101858&plantilla=&nombre_fich=ADMON_20071108_121949_
73.pdf&urlfichero=http://NTICMAPL11/web_reps/ADMON_20071108_121949_73.pdf&zip=N
En este pto. ya tenemos el archivo BLOB cargado en las tablas temporales GAT_UPLOAD_...
siendo:
:pk1
:cla
(en caso de que la tabla contenga ms de un campo clave u otros campos se cumplimentarn
en la sentencia insert anterior)
Una vez almacenado el campo BLOB en nuestra aplicacin debemos realizar el borrado de las tablas
temporales GAT_UPLOAD para el registro recin tratado.
NOTA: Tanto en la carga de Blob como de Clob el nombre de Fichero que se indique debe ser nico
, para ello se puede utlizar la nomenclatura USER_DDMMYYYY_HHMMSS
7.3.6
Funcionamiento General
Pgina 38 de 72
Forms v6 y v10
Manual del desarrollador
Se realiza la transferencia de un Blob de mi aplicacin a tablas temporales a travs de la funcin
GAT_FUNC_CARGA_BLOB
Se ejecuta el programa servlet que descarga y visualiza el Blob de la tabla temporal
Finalizada la descarga-visualizacin la aplicacin borrar de las tablas temporales la informacin
recin tratada.
Se genera en nuestra aplicacin, desde el mdulo que llame al servlet con un criterio de clave nica, por
ejemplo del tipo: USER_YYYYMMDD_HH24:MI:SS
Cdigo de aplicacin
w_Cd_Cl_Externa:
w_Nom_Archivo:
w_Tabla_Apl:
w_Clave_Tabla_Apl:
w_Campo_Blob:
En ste punto se debe realizar COMMIT; para confirmar la insercin del campo BLOB en las tablas
temporales y que el proceso externo Servlet pueda obtener sta informacin
3.- Ejecucin del Servlet para realizar la descarga-visualizacin del campo BLOB
Pgina 39 de 72
Forms v6 y v10
Manual del desarrollador
La llamada al servlet debe ser como se describe a continuacin:
http://desarrollo.madrid.org/upload/servlet/Servidor?bd=<bd>&user=<user>&apli=<apli>&clave=<cl
ave>&plantilla=<plantilla>&opcblob=V
no es necesario
Ejemplos de llamadas:
http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm1003_orcl8&user=USU1&apli=USUG&clave=U
SU1_20021217_101858&plantilla=defecto&opcblob=V
http://desarrollo.madrid.org/upload/servlet/Servidor?bd=icm21_denivel2&user=GAT1&apli=GAT&clave=GA
T_20021217_101858&plantilla=azul&opcblob=V&zip=S
Pgina 40 de 72
Forms v6 y v10
Manual del desarrollador
7.3.7
GAT_FUNC_CARGA_BLOB
DESCRIPCIN: Realiza Descarga Blob desde la tabla Origen 'Tabla de la Aplicacin' a la tabla
de Trabajo.
La funcin obtiene el N de Registros que recupera la Clave de la Tabla de la Aplicacin
Se obtiene 1 la funcin ha funcionado correctamente
Se obtiene 0 >= 2 La Clave de la tabla de la Aplicacin es errnea no recupera 1 Registro
Si devuelve -1 se ha producido un error en la Funcin
Si devuelve -2 se ha detectado parmetros obligatorios de Entrada con valor Nulo
********************************************************************************************/
v_Nm_Fichero GAT_UPLOAD_FICHERO.Nm_Fichero%TYPE;
v_Cuenta Integer;
BEGIN
-- Validaciones de Parmetros
IF w_Cod_Aplicacion IS NULL OR w_Cd_Cl_Externa IS NULL OR w_Nom_Archivo IS NULL OR
w_Tabla_Apl IS NULL OR w_Campo_Blob IS NULL THEN
z_Mensaje_Err := 'Los parmetros de entrada de la Funcin no pueden ser Nulos.';
RETURN (-2);
END IF;
-Select GAT_SEQ_UPLOAD.NEXTVAL INTO v_Nm_Fichero FROM DUAL;
-INSERT INTO GAT_UPLOAD_FICHERO (Nm_Fichero, Cod_Aplicacion, Cod_Usuario, Fc_Carga,
Cd_Cl_Externa, Nom_Archivo)
VALUES(v_Nm_Fichero, w_Cod_Aplicacion, USER, SYSDATE, w_Cd_Cl_Externa,
w_Nom_Archivo);
EXECUTE IMMEDIATE 'INSERT INTO GAT_UPLOAD_BLOB (Nm_Fichero, It_Contenido) Select '||
v_Nm_Fichero||', '||w_Campo_Blob||' FROM '||w_Tabla_Apl||' '||w_Clave_Tabla_Apl;
Pgina 41 de 72
Forms v6 y v10
Manual del desarrollador
-- Valida que Clave Principal recupera un registro ----------v_Cuenta := SQL%ROWCOUNT;
IF v_Cuenta = 0 THEN z_Mensaje_Err := 'La Clave Principal No ha obtenido ningn registro.';
RETURN(v_Cuenta);
ELSIF v_Cuenta >= 2 THEN z_Mensaje_Err := 'La Clave Principal ha obtenido Ms de 1 registro.';
RETURN(v_Cuenta);
END IF;
-------------------------------------------------------------
RETURN(v_Cuenta);
END;
/
GAT_FUNC_CARGA_CLOB
DESCRIPCIN: Realiza Descarga Clob desde la tabla Origen 'Tabla de la Aplicacin' a la tabla
de Trabajo.
La funcin obtiene el N de Registros que recupera la Clave de la Tabla de la Aplicacin
Se obtiene 1 la funcin ha funcionado correctamente
Se obtiene 0 >= 2 La Clave de la tabla de la Aplicacin es errnea no recupera 1 Registro
Si devuelve -1 se ha producido un error en la Funcin
Si devuelve -2 se ha detectado parmetros obligatorios de Entrada con valor Nulo
********************************************************************************************/
v_Nm_Fichero GAT_UPLOAD_FICHERO.Nm_Fichero%TYPE;
Pgina 42 de 72
Forms v6 y v10
Manual del desarrollador
v_Cuenta Integer;
BEGIN
-- Validaciones de Parmetros
IF w_Cod_Aplicacion IS NULL OR w_Cd_Cl_Externa IS NULL OR w_Nom_Archivo IS NULL OR
w_Tabla_Apl IS NULL OR w_Campo_Clob IS NULL THEN
z_Mensaje_Err := 'Los parmetros de entrada de la Funcin no pueden ser Nulos.';
RETURN (-2);
END IF;
--
Pgina 43 de 72
Forms v6 y v10
Manual del desarrollador
Select GAT_SEQ_UPLOAD.NEXTVAL INTO v_Nm_Fichero FROM DUAL;
-EXECUTE IMMEDIATE 'INSERT INTO GAT_UPLOAD_LINEA (Nm_Fichero, Nm_Linea, It_Contenido)
SELECT '||
v_Nm_Fichero||', '||w_Campo_Nm_Linea||', '||w_Campo_Clob||' FROM '||w_Tabla_Apl||'
'||w_Clave_Tabla_Apl;
-- Valida que Clave Principal recupera algn registro ----------v_Cuenta := SQL%ROWCOUNT;
IF v_Cuenta = 0 THEN z_Mensaje_Err := 'La Clave Principal No ha obtenido ningn registro.';
RETURN(v_Cuenta);
END IF;
INSERT INTO GAT_UPLOAD_FICHERO (Nm_Fichero, Cod_Aplicacion, Cod_Usuario, Fc_Carga,
Cd_Cl_Externa, Nom_Archivo, Nm_Lineas)
VALUES(v_Nm_Fichero, w_Cod_Aplicacion, USER, SYSDATE, w_Cd_Cl_Externa,
w_Nom_Archivo, v_Cuenta);
END IF;
-------------------------------------------------------------------------------------------
RETURN(v_Cuenta);
Pgina 44 de 72
Forms v6 y v10
Manual del desarrollador
7.4
ESCANEO DE DOCUMENTOS
PROCESO:
1. Forms ejecuta el Servlet pasndole los parmetros adecuados (bajo el frame 'oculto')
Ejemplo de Llamada al Servlet desde Forms:
[LOAD]
; *** Parmetros vlidos solamente para la ejecucin de Upload y DownLoad y ActiveX de
Escaner
Upload_Exe=http://icmweb01.icm.es/util/upload/servlet/Servidor
DECLARE
WURL VARCHAR2(250);
necesarios
v_Upload_Exe VARCHAR2(200); -- almacena la direccin URL del Servlet obtenida del parmetro
Upload_Exe del fichero ini de la Aplicacin
-- Los posibles Valores de :BOTONES.Formato son:
JPG
--
TIF, TIFBN
PDF, PDFBN
--
BEGIN
v_Upload_Exe := LEER_FICH_INI(:GLOBAL.Fich_Ini ,'Upload_Exe');
WURL :=
v_Upload_Exe||'?opcion=GeneraActiveX'||'&BD='||:GLOBAL.WBD||'&APL='||:GLOBAL.COD_APLICACION||
'&CLAVE='||:BOTONES.ID_CLAVE||'&USU='||USER||'&FORMATO='||:BOTONES.Formato||'&VIS_IMAG='||
:BOTONES.Vis_Imagen||'&VIS_INTF='||:BOTONES.Vis_Interface;
Pgina 45 de 72
Forms v6 y v10
Manual del desarrollador
2. El Servlet crea pgina -incrustando el ActiveX- y la invoca
3. Si es la 1 vez que se ejecuta esta opcin se solicitar la instalacin automtica del ActiveX
en el puesto
7.5
ENVIO DE CORREO
Como solucin al envo de correo electrnico desde Forms se han elaborado varias soluciones que a
continuacin se detallan en funcin de la versin de Oracle Forms a utilizar (Forms4.5 Forms6i) y del
tipo de envo a realizar:
7.5.1
Esta funcionalidad se realiza mediante la ejecucin de un mdulo genrico en Perl que es el encargado de
realizar el envo, cara a nuestros desarrollos es tan simple como realizar la ejecucin HOST del mdulo
sendmail.pl con los siguientes parmetros:
sendmail.pl f UsuarioRemitente t UsuarioDestino u Asunto m Mensaje s Servidor a
FicheroAdjunto cc UsuarioCopia q
-f
-t
-u
-m
-s
-a
-cc
Con copia a
-q
Pgina 46 de 72
Forms v6 y v10
Manual del desarrollador
7.5.2
Desde Forms6i en Web para poder enviar este tipo de correos sin archivos adjuntos- se ha creado una
funcin en el ncleo de Oracle SIS_FUNC_ENVIO_CORREO que nos permitir de modo rpido e
inmediato realizar el envo de correos.
Remitente
Destinatario
carcter ; )
Asunto
...:
Mensaje
...:
TipoDestino
...:
(Out)
Result
0 envio correcto
1 envo erroneo (el texto del error en el campo out Salida)
7.5.3
Se implementa la funcionadad de enviar archivos adjuntos que no existan en disco y que tengamos
almacenados en campos LOB de base de datos (hasta ahora tan solo se enviaban como adjuntos
normalmente el resultado de la ejecucin de un Report, un archivo .pdf que exista en el disco del servidor
de aplicaciones).
Pgina 47 de 72
Forms v6 y v10
Manual del desarrollador
Estos archivos que no existen en disco sern generados por el trabajo Batch icm_correo.exe como
resultado de la ejecucin de una consulta, esta consulta se debe de informar previamente en la tabla
XXXX_CORREO bajo el nuevo atributo QUERY que se ha de aadir a la estructura tipo que tenamos en
nuestra tabla correo de aplicacin (para los que utilizaban anteriormente esta funcionalidad, no obstante
no es obligatorio, el envo de correo seguir funcionando como hasta ahora sin aadir este atributo pero no
se dispondr de esta nueva funcionalidad).
Por tanto la definicin completa de la tabla tipo de cada aplicacin XXXX_CORREO se debe de ajustar a
la siguiente estructura:
Desc XXXX_CORREO
CD_CLAVE
VARCHAR2(30)
(clave nica)
REMITENTE
VARCHAR2(30)
DESTINATARIO
)
TITULO
VARCHAR2(250)
MENSAJE
CLOB
ADJUNTOS
VARCHAR2(250)
TP_ENVIO
VARCHAR2(1)
TP_DESTINO
VARCHAR2(1)
FC_SOLICITUD
DATE
FC_ENVIO
DATE
VARCHAR2(250)
CLOB
M-)
correo)
RESULTADO
correo)
QUERY
Pgina 48 de 72
Forms v6 y v10
Manual del desarrollador
Desde el programa Forms, al hacer insert en la tabla XXXX_CORREO y antes de hacer COMMIT, se
llamar a un procedimiento XXXX_PROC_CORREO_AUX creado con anterioridad en la B.D con el
siguiente cdigo:
v_ClobLocator Clob;
BEGIN
Select mensaje INTO v_ClobLocator FROM XXXX_CORREO
WHERE cd_clave = w_Id_Correo;
END;
3.- Envo de 3 archivos adjuntos, dos de ellos obtenidos de disco, y el tercero obtenido de base de
datos:
ADJUNTOS = d:\icm\web\web_reps\USU1_20031222_102307_98.pdf ;
d:\icm\web\web_reps\USU1_20031222_102407_14.pdf ; Archivo_Prueba2.xls ;
QUERY = ; ; SELECT CAMPO_BLOB FROM XXXX_DOCUMENTOS_CORREO WHERE
IDDOC = 9883 ;
(como se puede ver los dos primeros archivos no tienen select asociada en el atributo
QUERY)
Pgina 49 de 72
Forms v6 y v10
Manual del desarrollador
Una prueba de integracin de esta funcionalidad la podis comprobar desde la siguiente URL:
http://nticmdes01/forms6/lanza_ejemplos/envio_correo_forms.htm
Pgina 50 de 72
Forms v6 y v10
Manual del desarrollador
7.6
7.6.1
WS_PACK_CRYSTALR_0001.OBTENER_TOKEN
/*******************************************************************************************
* FUNCTION: OBTENER_TOKEN
*
* DESCRIPCIN: Para un cod. usuario y clave (Business Objects) obtiene el token de crystal report
*
* PARMETROS:
*
*
* VALORES DE RETORNO DE LA FUNCIN: True
*
False
*
* CODIGOS Y DESCRIPCIONES DE ERROR:
*
Codigo de Error
---------------
100
Descripcin
------------
*
********************************************************************************************/
A la funcin se le pasarn como parmetros el Usuario y Clave (de business Objects) . stos
parmetros se almacenan en el fichero ini, ejemplo:
[BUSINESS OBJECTS]
;*** Parmetros vlidos solamente para obtener token de B.O
bo_usuario=EJPL_Usu
bo_clave=C7FFB972B34AB66E2C45124586507E4F
7.6.2
Pgina 51 de 72
Forms v6 y v10
Manual del desarrollador
Una vez obtenido el token se compone la url de ejecucin del informe (incluyenndo el token) y
se ejecuta con la built-in WEB.SHOW_DOCUMENT , con target _blank
Ejemplo:
WEB.SHOW_DOCUMENT(http://icmdesbi01:8080/OpenDocument/opendoc/openDocument.jsp?sType=rpt&sDocN
ame=EJPLListadoEmpleados&sOutputFormat=P&token=icmdesbi01:6400@34236JClHcPZDmlET75s534235JBAqEg6
vt8ePfmgE, _blank);
7.7
ICONOS
Se aconseja como estandar de Developer v10g la definicin de los botones con un ancho-alto de
18X18 por lo tanto a la hora de crear el icono no se han de superar estas coordendas (aunque las
coordenadas que nos aparezcan sean de 32X32) para no perder imagen a la hora de cargar esta
sobre el botn.
Al grabar el fichero creado se recuerda que el nombre ha de contener el prefijo de la aplicacin y
no superar los 8 caract. ( por ejem. usu_xxxx.ico)
Pgina 52 de 72
Forms v6 y v10
Manual del desarrollador
- en una ventana abrimos el fichero de icono y seleccionamos el area de imagen ( 18X18 de
mximo) para ello con la porcin seleccionada realizaremos un Copy de la misma.
- abrimos una nueva ventana (File - New Windows) en la que definimos una imagen con unos
valores predeterminados en cuanto a color y tamao, para ello accedemos a:
Tools - New Image Format y nos aparece la siguiente ventana en la que indicaremos los valores
que a continuacin se han fijado:
- automticamente la herramienta nos genera una pantalla con las dimensiones establecidas
dispuesta a alojar la nueva imagen, para ello y sobre esta nueva ventana hacemos Paste de la
seleccin anterior.
Se aconseja ajustar la imagen al borde izquierdo de la ventana ya que al cargar esta en el botn
en la ejecucin en Web automticamente nos deja un pequeo margen vertical en la izquierda.
Este margen automtico hace que perdamos las 2 ltimas coordenadas a nivel de columna del
fichero por lo tanto se aconseja que sobre estas no haya porcin de imagen alguna.
En la figura siguiente se muestra en gris la porcin de imagen que se mostrar sobre el botn y en
blanco la que nunca se visualizar:
Pgina 53 de 72
Forms v6 y v10
Manual del desarrollador
- una vez realizadas estas consideraciones se pasar a salvar, en este momento se define el
formato de la nueva imagen que ser del tipo Gif.
Se ha realizado la solicitud de adquisicin del programa Microangelo hasta que lo que tengamos el que
este interesado en la herramienta poneros en contacto con nosotros y os dejamos una versin de
evaluacin del mismo.
Nota: a nivel de diseo con Forms se han encontrado casos en los que al asociar un icono a un botn lo
alinea incorrectamente (alineamiento inferior) y por mucho que intentemos solucionarlo no se consigue
dejar correctamente, en estos casos la solucin que hemos observado es, y aunque parezca un poco
estrao, renombrar simplemente el fichero .ico y asociando el nuevo fichero al botn lo alinea
correctamente (Forms debe de heredar alguna propiedad de alineamiento del fichero que caus el
Pgina 54 de 72
Forms v6 y v10
Manual del desarrollador
problema inicialmente que por mucho que lo intentemos asociar a otro botn nos repite el alineaminento
incorrecto).
7.8
PROCESOS BATCH
Para la ejecucin de procesos en batch desde Forms6i bajo Web se ha implementando unos paquetes en
el nucleo de Oracle mediante los cuales se permite realizar una peticin de trabajo e inmediatamente se
puede consultar el estado de la misma.
-Peticin de un proceso:
- QUJB_PAQ_GENERAL.PETICION(Parametros)
Parmetros:
- Host:mquina donde va a correr el trabajo
- Cola: cola que gestionar el trabajo -Shell: ejecutable a lanzar -Param: parmetros a pasar al ejecutable
-Usuario: usuario que encarga el trabajo
-Mensaje: (salida) mensaje de error en una peticin errnea
Devuelve:
-el numero de peticin (WPETI) que nos ha generado
-en el caso de ERROR devuelve -1
- QUJB_PAQ_GENERAL.EJECUCION(WPETI,WHOST)
Parmetros:
- N.Peticin:que hemos obtenido en la funcin QUJB_PAQ_GENERAL.PETICION.
-Host:- Host:mquina donde va a correr el trabajo
Devuelve:
-el el caso de ejecucin correcta devuelve 0 .
-en el caso de ERROR devuelve -1.
QUJB_PAQ_GENERAL.ESTADO(WPETI)
Parmetros:
-N.peticin: num. de peticin que vamos a comprobar.
Pgina 55 de 72
Forms v6 y v10
Manual del desarrollador
Devuelve:
Uno de los siguientes literales:
- En cola
- En ejecucin
- Terminada
- Peticin desconocida
7.8.1
EJECUCION DE TRABAJOS
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;
Pgina 56 de 72
Forms v6 y v10
Manual del desarrollador
WUSER := USER;
-- Usuario peticionario
-- Se realiza la Peticin
:B00.WNUMPET := QUJB_PAQ_GENERAL.PETICION(
WHOST,
WCOLA,
WSHELL,
WPARAM,
WUSER,
WLIN1,
WLIN2,
WLIN3,
WMENS);
END;
Pgina 57 de 72
Forms v6 y v10
Manual del desarrollador
DECLARE
WESTAD VARCHAR2(25);
WURL VARCHAR2(100);
tm_id Timer;
wmaxtime number(3) := 60;
-- 1 minutos
BORRAR_TIMER EXCEPTION;
BEGIN
--- El Timer se activa cada 1seg. Si se ejecuta mas de wmaxtime(60 veces) (60 * 1seg. = 1min.)
-- automticamente se desactivar el Timer
-:b00.nm_veces := :b00.nm_veces + 1;
EXCEPTION
WHEN BORRAR_TIMER THEN
Delete_Timer('MI_TIMER');
END;
Pgina 58 de 72
Forms v6 y v10
Manual del desarrollador
[Documentos]
DocHost=nticmdesXX
DocCola=NORMAL
DocDir=D:\icm\web\web_reps\
DocMapping=http://nticmdes01/web_reps/
DocExe=d:\icm\oas\general\etc\ImpreOfi_Batch_New.exe
Nota:
Cuando el servicio PipeBatch ejecuta una peticin le aade a la lista de parmetros propia del ejecutable
los siguientes parmetros:
Np = 99999
(Nmero de proceso)
Lg = c:\temporal\
(Carpeta de Log.)
(es decir cuando se lanze un ejecutable fuera del entorno de ejecucin del servicio PipeBatch es necesario
el aadirle estos dos parmetros al final)
Para probar la ejecucin de los paquetes QUJB.* es necesario insertar la informacin bsica en los
catlogos:
QUJB_HOST
QUJB_COLAS (NORMAL,URGENTE)
7.8.2
VISUALIZACION DE TRABAJOS
Haciendo una llamada a la pantalla general ICM_TRABAJOS, sta nos mostrar informacin de todos los
trabajos lanzados con el Pipe_Batch por el usuario conectado.
La pantalla permite hacer bsquedas de trabajos filtrando los campos Consulta 1 y Consulta2 que
contienen una breve descripcin del Trabajo lanzado.
Pgina 59 de 72
Forms v6 y v10
Manual del desarrollador
Con el botn ver Detalle adems de los campos que aparecen en la pantalla con la informacin de
Peticin, Fecha de Solicitud, Fecha de Lanzamiento, Estado, Consulta 1, Consulta 2, nos permite
visualizar informacin adicional del trabajo seleccionado.
El botn Ver Documento abre con el navegador el fichero indicado en el campo Documento (ste campo
se visualiza a travs de la opcin de men Detalle citada anteriormente).
El botn Borrar elimina el trabajo seleccionado de la tabla de Histrico y realiza el borrado del fichero
asociado al trabajo siempre y cuando en el campo Documento est inidicada la URL al fichero,
Ejemplo de llamada:
CALL_FORM(ICM_TRABAJOS, NO_HIDE, NO_REPLACE););
Pantalla ICM_TRABAJOS:
7.8.3
Pgina 60 de 72
Forms v6 y v10
Manual del desarrollador
Haciendo una llamada a la pantalla general ICM_TRBUNIX, sta nos mostrar informacin de los trabajos
lanzados por el Usuario en mquina Unix. sta informacin se recoge de la tabla GAT_SEG_PETICION .
La pantalla permite visualizar los trabajos lanzados en el da , los trabajos lanzados desde hace 7 das o
todos los trabajos.
Con el botn ver Detalle adems de los campos que aparecen en la pantalla con la informacin de
Peticin, Fecha de Solicitud, Fecha de Lanzamiento, Fecha de Inicio, Fecha de Finalizacin y el Estado
nos permite visualizar informacin adicional del trabajo seleccionado.
Ejemplo de llamada:
CALL_FORM(ICM_TRBUNIX, NO_HIDE, NO_REPLACE););
Pantalla ICM_TRBUNIX:
Pgina 61 de 72
Forms v6 y v10
Manual del desarrollador
8
GESTION DE PERFILES
Este es un mdulo estndar para aplicaciones desarrolladas en Developer v10g que se puede utilizar
solamente en en el entorno de Desarrollo que permite realizar:
La Gestin de Usuarios debe realizarse de acuerdo a la normativa especfica con el grupo de Gestin
de Accesos
Cuando el mdulo se incorpora a una aplicacin con el mtodo anteriormente indicado tan solo se permite
la modificacin de perfiles para la aplicacin en curso no pudiendo modificar perfiles de otras aplicaciones.
La aplicacin con la que se actuar ser la definida en la variable global GLOBAL.COD_APLICACION
definida en el form de identificacin de entrada a la aplicacin APL_XXX.
Pgina 62 de 72
Forms v6 y v10
Manual del desarrollador
sta pantalla va a permitir :
Crear Grupos (perfiles) de Aplicacin
Asignar y desasignar Usuarios a los Grupos
Crear Opciones de Men en las que se indicar:
Cod. Men: el codigo de item men
Desc. Men: Descripcin de la Opcin de Men
Tipo de Accin: Visible, Oculto y Desactivado
Asignar Opciones de Men a los Perfiles
Dar de Alta Programas: Dar de alta un form. Esto nos permitir posteriormente crear acciones
sobre stos programas (forms).
Crear Acciones de Programa. Las acciones de programa son aquellos objetos de un form
susceptibles de ser modificados sus propiedades de visibilidad, activacion,
Antes de crear una accin de Programa se debe seleccionar siempre el programa (form) al que
va a pertener la accin (objeto).
Tambin cuando se desea consultar las acciones de los perfiles se debe seleccionar siempre
el programa (form)
Para crear una accin se indicar:
Cod. Accin: el objeto que se desea restringir por ejemplo:
BLOQUE.BT_ALTA
Desc. Accin: Descripcin del objeto
Tipo de Accin: Desactivado
Oculto
No modificable
No permitida la insercin
No permitida la consulta
No modificable No permitida la insercin
Entre los tipos de objeto que se pueden restringir estn:
Items , botones, radiogroup, pestaas,
Por defecto todos los objetos de la Aplicacin (mens, Acciones) estn accesibles. Por lo tanto, lo habitual
va a ser aadir restricciones de Opciones de men y Acciones.
REPORT BUILDER
WEBS DE LA APLICACIN
Pgina 63 de 72
Forms v6 y v10
Manual del desarrollador
10.1 WEB PARA ALOJAR PGINA ESTTICA INICIAL DE LA APLICACIN
La pgina esttica inicial de la Aplicacin contiene informacin ,descripcin o presentacin de la Aplicacin
y un enlace de ejecucin de la Aplicacin,
se incluir cuando sea necesaria.
Frame_A
Frame_B
El uso de frames en forms principalmente lo hacemos para enviar a una zona de ventana una pgina que no
queremos que sea visualizada en ningn momento. Para ello lo que hacemos es definirnos un determinado
frame con unas caractersticas especiales de tamao y visualizacin cero de modo que el resultado del mismo
sea un frame oculto.
como definimos una pgina con frames ?
La definicin de los frames la hacemos en la pgina principal index.htm de acceso a nuestra aplicacin:
http://nticmdes01.icm.es/XXXX
Pgina 64 de 72
Forms v6 y v10
Manual del desarrollador
Para crear una pgina de estas caractersticas, desde Front-Page, seguimos los siguientes pasos:
Archivo -> Nuevo -> Pagina o Web -> Nuevo a partir de una plantilla -> Divisin horizontal
En este momento nos aparece una pgina donde podemos ubicar nuestras pginas ya existentes, en la zona
superior la pgina con el contenido (texto, logo, enlace a la aplicacin ) y en la zona inferior el nombre de
una pgina en blanco (no contiene nada ya que ser esta la zona de frame oculto).
Una vez creada la pgina index.htm de este modo, pasamos a personalizar las caractersticas de los frames
contenidos, por tanto nos iremos a la solapa inferior HTML de pgina de marcos- para dejar los frames con
los siguientes atributos:
<frameset rows="100%,0%">
<frame name="enlace" scrolling="auto" src="enlace.htm">
<frame name="oculto" src="oculto.htm" noresize scrolling="no">
<noframes>
Pgina 65 de 72
Forms v6 y v10
Manual del desarrollador
BEGIN
..
Wurl := 'http://
icmweb01.icm.es/util/upload/servlet/Servidor?opcion=GeneraActiveX'|| '&BD=ICM21_DENIVEL2&APL='
||:GLOBAL.COD_APLICACION||'&CLAVE='||:BLO.ID_CLAVE||'&USU='||USER||'&FORMATO=TIF&VIS_IM
AG=N';
WEB.SHOW_DOCUMENT(Wurl,'oculto); -- se realiza la llamada al servlet bajo el frame oculto
..
END;
Consideraciones
1.- _blank
el utilizar el nombre de frame _blank con la finalidad de oculto nos puede producir efectos colaterales como
pueden ser:
-
la visualizacin de ayudas se realiza sobre este frame y al ser oculto jams conseguiramos verlas
la visualizacin de los pdfs de la aplicacin a travs del mdulo gral. LIS_REP- sufriran el mismo
efect, no se visualizaran
por lo tanto no se debe de utilizar este nombre de frame para la funcionalidad de ocultar una llamada.
2.- dominios
se han detectados problemas al pasar aplicaciones a produccin que de repente una llamada a Servlet que
siempre nos ha funcionado nos deja de funcionar, no hace nada, ni siquiera se ejecuta.
- cuando accedemos a la pgina principal de la aplicacin lo hacemos con dominio, por ejemplo
http://nticmpro32.icm.es/XXXX/
y dentro de esta pgina principal invocamos a Forms Server sin dominio como por ejemplo:
http://nticmpro32/dev60cgi/ifcgi60.exe?form=XXXX_APL.fmx
esta diferencia en dominios es la que provoca que no se ejecute el Servlet por seguridad bajo el applet de
forms Jinitiator.
Por tanto tenemos que utilizar el uso de dominio incluso en las pruebas que realicemos en el entorno de
desarrollo, del siguiente modo:
http://nticmdes01.icm.es/XXXX
y dentro de la pgina web principal de acceso a la aplicacin incluiremos la llamada tambin con
dominio:
http://nticmdes01.icm.es:8080/dev60cgi/ifcgi60.exe?form=XXXX_APL.fmx
Pgina 66 de 72
Forms v6 y v10
Manual del desarrollador
de este modo nos evitaremos problemas en el posterior paso de la aplicacin a produccin.
En el marco Central se encuentran los hipervnculos a las aplicaciones Forms con Marco de Destino: Toda
la pgina (_top)
Pgina Principal.htm
LATERAL
CENTRAL
Para evitar la visualizacin de la URL en las llamadas al Servlet desde Forms, sera necesario incorporar
una pgina inicial.htm que va a contener 2 Marcos Verticales:
principal apunta a la pgina principal.htm
oculto apunta a la pgina oculto.htm
y modificar en los hipervinculos a Aplicaciones Forms que se se encuentran en el marco Central que el
Marco de Destino sea Marco Primario (_parent)
Pgina Inicial.htm
PRINCIPAL
OCULTO
Ejemplo: http://nticmdes01.icm.es/forms6/lanza_ejemplos/inicial.htm
Pgina 67 de 72
Forms v6 y v10
Manual del desarrollador
10.2 WEB PARA AYUDA
Si nuestra aplicacin incorpora ayuda :
Creacin del web
Se crear un web con FrontPage con la siguiente estructura:
http://Host/Nombre_del_Modulo
No es necesario crear el web si ya existe un web que contiene la pgina esttica inicial de la
aplicacin . Se utilizar el ya existente
Estructura de ayuda de la aplicacin en el web
Debajo del web se crea una carpeta ayuda que contendr las pginas htm
Debajo de la carpeta ayuda una subcarpeta images, que contiene todas las imgenes de la ayuda
http://Host/Modulo
/ayuda/ ------------- pginas htm de ayuda
/ayuda/images--- imgenes que pertenecen a las pginas htm de
ayuda
Independientemente del tipo de ejecucin la ayuda se realizar en pginas html y se mostrar con el
navegador que tenga el puesto definido por defecto.
Para implementar el tipo de ejecucin en que nos encontramos se ha de incluir en el fichero .ini de la
aplicacin el siguiente parmetro:
TipoEjecucion=XXXX
Pgina 68 de 72
Forms v6 y v10
Manual del desarrollador
Para ubicar el Web en el que se van a buscar las pginas htm de ayuda para nuestra aplicacin se utilizar
el siguiente parmetro en el fichero .ini de la aplicacin:
; por ejem.
WebAyuda=http://host/Modulo/
NOTA: Independientemente del tipo de ejecucin la ayuda se realizar en pginas html y se mostrar con
el navegador que tenga el puesto definido por defecto.
11
UTILIDADES
11.1 CONV_F10G
Pgina 69 de 72
Forms v6 y v10
Manual del desarrollador
Est disponible:
-
en la url: http://publicacion.madrid.org/web_soporte/forms10g/utilidades.htm
11.2 COMP_F6
Est disponible:
-
en la url: http://publicacion.madrid.org/web_soporte/forms10g/utilidades.htm
Utilidad que nos permite subir ficheros compilados de Forms 6 al servidor de Desarrollo, Preproduccin y
Validacin desde nuestro PC
Est disponible:
11.4 COMPLINUX
Paso y compilacin de archivos en Linux
Ahora con una plataforma de ejecucin distinta a la de desarrollo surge la problemtica de tener que
compilar en la plataforma de ejecucin antes de poder probar nuestros programas bajo Linux.
CompLinux realizar las labores del paso de archivos fuentes al equipo configurado como destino,
Pgina 70 de 72
Forms v6 y v10
Manual del desarrollador
compilar en la nueva plataforma (el fuente ser borrado) y depositar el compilado en la ubicacin
indicada en la configuracin listo para ser probado.
Est disponible:
-
en la url: http://publicacion.madrid.org/web_soporte/forms10g/utilidades.htm
12
En principio la migracin de aplicaciones de versin es muy simple tan slo es necesario recompilar todos
los elementos que componen la aplicacin con la nueva versin y ya es suficiente -en teora-, la
compilacin se ha de realizar en el siguiente orden:
- Libreras
- Forms
- Reports
Debido a una serie de puntos que a continuacin se detallan, para nuestra migracin de versin no es
suficiente tan slo con lo expuesto en el prrafo anterior, esto es debido por un lado a:
1.- cambios producidos por la nueva versin
2.- cambios producidos por la nueva plataforma de ejecucin (pasamos de plataforma WinXX a plataforma
Linux)
- Ahora con Forms10g no existe la posiblidad de salvar en base de datos ningn tipo de objeto. Os
recuerdo que determinados objetos que utilizamos en todos los forms como infraestructura base de
programas- se encuentran referenciados bajo una librera de objetos:
ICM_OBJ.olb
que se encuentra salvada en base de datos.
Ante esta circunstancia nos vemos obligados a romper estas referencias de objetos a librera de base de
datos para crear la referencia de los mismos a librera en disco.
- Existen una serie de built-in que mantienen por compatibilidad y otras que directamente producen errores
de compilacin, del documento donde se indican he entresacado las que realmente utilizamos en nuestros
programas:
- llamadas CALL
- ROLLBACK_FORM
entre otras muchas soportadas se encuentras las que hacen referencia a controles ActiveX y OLE que por
nuestra arquitectura de ejecucin no estbamos utilizando u otras como RUN_PRODUCT que ya
habamos aconsejado su no utilizacin.
Pgina 71 de 72
Forms v6 y v10
Manual del desarrollador
Hay una utilidad de Oracle Forms ifplsqlconv que trata estos casos la cual utilizaremos para reflejar estas
actualizaciones en nuestros fuentes.
2.- Cambios producidos por la nueva plataforma de ejecucin
- Ahora la plataforma de ejecucin de nuestro cdigo ser Linux, abandonamos Windows y esto supone
tener en cuenta una serie de aspectos que hasta ahora pasbamos por alto, en concreto nos referimos a
los nombres de archivo ahora son case sensitive, es decir un archivo es distinto si se encuentra en
maysculas o minsculas.
Por lo tanto en nuestros fuentes tenemos que tener en cuenta este tipo de nombre en:
- iconos
- llamadas a forms
en los que se ha llegado a una convencin por la cual se han de nombrar en mayscula el nombre y en
minscula la extensin, por ejemplo:
XXXX_FORM1.fmx
XXXX_ICONO_UP.gif
- No podremos subir tal cual nuestros archivos compilados en el entorno de desarrollo FormBuilder desde
Windows a Linux como venamos haciendo hasta ahora.
Ahora es necesario realizar una compilacin en la mquina de destino para poder probar nuestros
programas en Linux.
En ICM hemos realizado un conjunto de utilidades que nos van a facilitar este tipo de labores en todas las
fases del proyecto:
- Conversin de fuentes de Forms6i a Forms10g
- Compilaciones masivas en local
- Paso de archivos a plataforma Linux de ejecucin
Pgina 72 de 72