Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 1 de 96
DOCUMENTO TÉCNICO
IEI – UNIVERSIDAD NACIONAL DE COLOMBIA
DESARROLLO WEB EN
ORACLE APEX
DAPEX_1.0
Versión 1.0
Noviembre de 2010
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 2 de 96
TABLA DE CONTENIDO INSTALACIÓN DE ORACLE Y APEX .............................................................................................................................5
Planear la instalación ............................................................................................................................................5
Verificar los requerimientos: ............................................................................................................................5
Instalar el esquema ..........................................................................................................................................6
Realizar las tareas posteriores a la instalación. ................................................................................................6
Temas adicionales de la Instalación .................................................................................................................8
Preparación del servidor ......................................................................................................................................8
Instalación del motor de bases de datos Oracle v. 10g ............................................................................................9
Configuración Del Puerto .................................................................................................................................. 17
Preparación De La Instalación ........................................................................................................................... 17
Instalación de APEX ........................................................................................................................................... 17
Configurar el servidor HTTP para poder acceder el Oracle HTMLDB ................................................................ 19
Crear Usuarios ................................................................................................................................................... 20
CONCEPTOS DETRÁS DE ORACLE APEX ............................................................................................................. 22
Visión General de la Funcionalidad Oracle APEX .............................................................................................. 23
Interacción con la Base de Datos mediante el Taller de SQL ........................................................................ 25
Creación de una Aplicación ............................................................................................................................... 29
Creación de una Región Nueva ...................................................................................................................... 30
Creación de un Elemento Nuevo ................................................................................................................... 31
Adición de un Botón Nuevo ........................................................................................................................... 31
Creación de un Proceso de Página ................................................................................................................ 32
Creando Formas ............................................................................................................................................ 33
Creando Informes .......................................................................................................................................... 49
Crear Informes dinámicos ............................................................................................................................. 51
Trabajo con Ítems .......................................................................................................................................... 54
Select list ........................................................................................................................................................ 56
Pop up ............................................................................................................................................................ 60
Check boxes ................................................................................................................................................... 61
Radio buttons ................................................................................................................................................ 61
Graficos .......................................................................................................................................................... 61
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 3 de 96
GUÍA BÁSICA DE CONFIGURACIÓN DE IREPORT .................................................................................................... 66
Introducción ...................................................................................................................................................... 66
DTD de JasperReport ......................................................................................................................................... 68
Como Generar Plantillas de Informes ................................................................................................................... 69
Introducción ...................................................................................................................................................... 69
Crear un Informe, paso a paso .......................................................................................................................... 69
Explicación de cada banda................................................................................................................................. 70
Parámetros ($p) . ............................................................................................................................................... 71
Campos ($F). ...................................................................................................................................................... 73
Variables ($V). ................................................................................................................................................... 75
Elementos de Texto ........................................................................................................................................... 78
Elementos de Datos ........................................................................................................................................... 80
Imágenes. .......................................................................................................................................................... 82
Grupos. .............................................................................................................................................................. 83
Subinformes....................................................................................................................................................... 83
Informe Principal. .......................................................................................................................................... 83
Subinforme. ................................................................................................................................................... 89
Juntándolo todo. ........................................................................................................................................... 90
Paginar un informe. ........................................................................................................................................... 91
Compilar un informe. ........................................................................................................................................ 93
Ajustes por Desbordamiento ................................................................................................................................. 94
Síntomas del problema ...................................................................................................................................... 94
¿Para qué sirve el ajuste por desbordamiento? ................................................................................................ 94
¿A qué se debe el problema? ¿Qué es lo que lo origina? ................................................................................. 94
Cómo solucionar el problema ........................................................................................................................... 95
VERSIÓN 1.0 Vigente desde: 22 de Noviembre de 2010
ELABORÓ: Equipo de Trabajo IEI Miguel Gamboa Eliecer Daza
REVISÓ: Ing. Juan Carlos Torres
APROBÓ: IEI Unal
FECHA: 17 de Noviembre de 2010 FECHA: 22 de Noviembre de 2010 Noviembre de 2010
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 4 de 96
Historial de Revisiones
Fecha Versión Descripción Autor Revisor
01/04/2010 0.0 Documento Preliminar: Instalacion Apex Miguel
Gamboa Grupo de Trabajo
01/06/2010 0.1 Adición de Generación de una Aplicación Miguel
Gamboa Grupo de Trabajo
05/10/2010 1.0 Configuracion IREPORT Eliecer Daza Grupo de Trabajo
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 5 de 96
INSTALACIÓN DE ORACLE Y APEX
Planear la instalación
Es necesario conocer todo el procedimiento para disponer de la información y recursos necesarios para llevarla
a buen fin.
Son principalmente dos tareas:
a. Instalar el esquema
b. Configurar el servidor HTTP
Verificar los requerimientos:
a. De Base de datos
Versión superior o igual a 9.2.0.3 SHARED_POOL_SIZE de al menos 100mb Mirar: UtilitiesAbout DatabaseParameters
SQL> SHOW PARAMETER PFILE;
SQL> SHOW PARAMETER SHARED_POOL_SIZE
SQL> ALTER SYSTEM SET SHARED_POOL_SIZE='100M' SCOPE=spfile;
SQL> SHUTDOWN
SQL> STARTUP
b. De Servidor HTTP
mod_plsql Companion CD 10g release 1 o 2 / ias 1.0.2.2
c. De espacio
460 mb en ORACLE_HOME
d. De opciones de la DB (Oracle XML DB y Oracle Text)
Revisar el Oracle Universal Installer
e. De navegador
IE 6 o superior
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 6 de 96
Netscape 7.2 o superior Mozilla 1.2 o superior Firefox 1 o superior
Instalar el esquema
Crear tablespace para el APEX
CREATE SMALLFILE TABLESPACE "TEMP" LOGGING DATAFILE 'C:\ORACLE\ORADATA\SNW\TEMP.ora' SIZE 5M EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
a. Hacer backup b. Bajar los servicios c. Subir la base de datos objetivo
d. Descomprimir el zip
e.
sqlplus sys/SYS_password as sysdba @apexins password tablespace_apex tablespace_files tablespace_temp images connect
Donde:
Password: contraseña de admin_apex
tablespace_apex
tablespace_files
tablespace_temp
images: directorio virtual de apache /i/.
connect: para instalación local usar none o NONE.
Realizar las tareas posteriores a la instalación.
Revisar el Log Recompilar paquetes PL/SQL inválidos: Conectado como SYS
SQL> @?/rdbms/admin/utlrp.sql
Copiar el directorio de imágenes en apache/images o en Oracle Configurar el servidor http en una nueva instalación Modificar C:\oracle\compa_102\Apache\modplsql\conf\Dads.conf
Alias /i/ "C:\oracle\apex\images/" AddType text/xml xbl AddType text/x-component htc
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 7 de 96
<Location /pls/apex> Order deny,allow PlsqlDocumentPath docs AllowOverride None PlsqlDocumentProcedure wwv_flow_file_manager.process_download PlsqlDatabaseConnectString localhost:1521:snw PlsqlNLSLanguage AMERICAN_AMERICA.AL32UTF8 PlsqlAuthenticationMode Basic SetHandler pls_handler PlsqlDocumentTablename wwv_flow_file_objects$ PlsqlDatabaseUsername APEX_PUBLIC_USER
PlsqlDefaultPage apex
PlsqlDatabasePassword Siner4
Allow from all
</Location> Arrancar los servicios detenidos
Reiniciar el servidor HTTP ORACLE_BASE\ORACLE_HOME\opmn\bin\opmnctl stopproc ias-component=HTTP_Server
ORACLE_BASE\ORACLE_HOME\opmn\bin\opmnctl startproc ias-component=HTTP_Server
Instalar APEX en otros idiomas Idioma del registro EjecutarRegeditHKEY_LOCAL_MACHINESOFTWAREORACLE
Idioma del dads Managing JOB_QUEUE_PROCESSES
SELECT VALUE FROM v$parameter WHERE NAME = 'job_queue_processes'
ALTER SYSTEM SET JOB_QUEUE_PROCESSES = <number> (20) como sys Obfuscating PlsqlDatabasePassword Parameter
set ORACLE_HOME=new_ORACLE_HOME_path
set PATH=%ORACLE_HOME%\Apache\modplsql\conf;%PATH%
set PATH=%ORACLE_HOME%\perl\5.6.1\bin\MSWin32-x86;%PATH%
set PATH=%ORACLE_HOME%\bin;%PATH%
cd $ORACLE_HOME/Apache/modplsql/conf perl dadTool.pl -o
Logging in to Oracle Application Express http://hostname:port/pls/database_access_descriptor/
USUARIO: admin
CONTRASEÑA: Suministrada en la instalación
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 8 de 96
Temas adicionales de la Instalación
Preparación del servidor
Consiste en planear y adecuar el servidor de manera que soporte las instalaciones de los demás productos
necesarios. En esta etapa se debe tener en cuenta la configuración de los discos (particiones), entre otros.
1. Configurar el Sistema Operativo y sus actualizaciones.
2. Configurar el Firewall: Activar el Firewall y abrir los puertos de iSQL PLUS (5560), Enterprise Manager (5500),
Base de Datos (1521), Apache (7777)
2. Configurar el Antivirus y actualizarlo: preferiblemente descargarlo e instalarlo con anterioridad junto con el
último archivo de definiciones de virus, antes de conectarlo a la red.
4. Configurar la red preferiblemente una dirección IP estática.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 9 de 96
Instalación del motor de bases de datos Oracle v. 10g
Para el funcionamiento del sistema se puede instalar Oracle con los componentes mínimos, para esto
seleccionamos instalación avanzada.
Definir la ubicación de Oracle HOME, procurando separar los programas de los datos dentro de la misma
partición.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 10 de 96
Se selecciona el tipo de instalación personalizada y se instalan los componentes mínimos que son: La base de
datos, el Enterprise Manager y opcionalmente iSQL PLUS
Se solicita la creación asistida de la base de datos con parámetros de idioma Spain Spanish siempre que sea
requerido con el juego de caracteres AL32UTF8.
Durante el proceso de instalación es normal que se presenten fallos relacionados con la obtención de una
dirección IP, el servicio OracleCCService que se pueden ignorar.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 11 de 96
Seleccionar en el asistente la realización de una configuración típica del Listener, lo cual definirá el protocolo
TCP puerto 1521 como predeterminados para el motor de la base de datos.
Configuración de opciones de la base de datos seleccionar como personalizada.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 12 de 96
Se debe tener cuidado con el manejo de contraseñas, almacenarlas en un lugar donde se puedan recordar de
manera confidencial.
Configuración de opciones de almacenamiento
Configuración de opciones de creación de base de datos.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 13 de 96
El asistente de configuración de la BD entregará un resumen de la creación de la BD correcta con los siguientes
accesos a direcciones URL.
Se han desplegado las siguientes aplicaciones J2EE y se puede acceder a ellas en las siguientes direcciones URL.
Los archivos de configuración de la base de datos se han instalado en E:\oracle\product\10.1.0 mientras que
los demás componentes seleccionados se han instalado en E:\oracle\product\10.1.0\siei. Tenga cuidado de no
suprimir por accidente estos archivos de configuración.
URL de Ultra Search:
http:// 168.176.81.166:5620/ultrasearch
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 14 de 96
URL de Herramienta de Administración de Ultra Search:
http:// 168.176.81.166:5620/ultrasearch/admin
URL de iSQL*Plus:
http:// 168.176.81.166:5560/isqlplus
http:// 168.176.81.166:5500/em
Para tener acceso a dichas aplicaciones deberán estar iniciados los siguientes servicios:
Para la instalación del servidor Web se deberá seleccionar un nombre de destino y ruta de acceso diferente al
de la base de datos.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 15 de 96
Se deberán seleccionar los paquetes de instalación correspondientes a los productos Companion – Servidor
HTTP de Oracle – Apache Standalone 9.0.4.0.0
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 16 de 96
Al finalizar la instalación se despliega la información respectiva para el acceso al servidor
http://localhost:7777
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 17 de 96
Configuración Del Puerto
En el archivo APACHE_HOME\Apache\Apache\conf\httpd.conf podemos cambiar el puerto por omisión 7777 al puerto
80 para que no sea necesario digitarlo en la URL
# # Port: The port to which the standalone server listens. Certain firewall # products must be configured before Apache can listen to a specific port. # Other running httpd servers will also interfere with this port. Disable # all firewall, security, and other services if you encounter problems. # To help diagnose problems use the Windows NT command NETSTAT -a # Port 7777 Listen 7777
Preparación De La Instalación
SCHEMA
TABLESPACE
DATAFILE
Instalación de APEX
Para su instalación deben seguirse los siguientes pasos preliminares:
Inicialmente conectarse a la base de datos vía SQL PLUS con el usuario system,
SHOW PARAMETER SHARED_POOL_SIZE ALTER SYSTEM SET SHARED_POOL_SIZE='100M' SCOPE=spfile;
Cambiar el orden de las rutas de acceso de directorio, definiendo el nombre de directorio de la base de Datos
como primera en la lista, para evitar que al bajar el servicio Listener la utilidad sqlplus de línea de comando siga
funcionando.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 18 de 96
Hacer una copia de seguridad.
Parar todos los servicios de ORACLE
- Iniciar el servicio de la base de datos donde queremos instalar APEX
- Extraer el contenido del instaldor y dirigirse a la raíz del directorio extraído.
c:\> sqlplus “sys/SYS_password as sysdba” @htmldbins password tablespace_htmldb tablespace_files
tablespace_temp images connect
Donde:
password Is the password for the Oracle Apex administrator account, the APEX schema owner, and the APEX files schema owner. The APEX schema owner is the user or schema into which Oracle Apex database objects will be installed. The APEX files schema owner is the user or schema where uploaded files are maintained in Oracle Apex.
tablespace_htmldb Is the name of tablespace for the Oracle Apex application user.
tablespace_files Is the name of tablespace for the Oracle Apex files user.
tablespace_temp Is the name of the temporary tablespace.
images Is the virtual directory for Oracle Apex images. To support future Oracle Apex upgrades, define the virtual image directory as /i/.
connect Is the Oracle Net connect string to the database. If this is a local install, use none or NONE.
Ejemplo:
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 19 de 96
sqlplus "sys/syspass as sysdba" @htmldbins password SYSAUX SYSAUX TEMP /i/ none
Recompiling Invalid PL/SQL Packages SQL> @?/rdbms/admin/utlrp.sql
Restarting Processes En configuración de Windows
Copiar la carpeta /images C:\htmldb/images
para APACHE_HOME/Apache\Apache
Al finalizar la instalación del aplicativo es necesario pasar del directorio de instalación al directorio del servidor
apache.
Configurar el servidor HTTP para poder acceder el Oracle HTMLDB
Oracle HTTP Server Release 9.0.3
Modificar el archivo APACHE_HOME\apache\modplsql\conf\dads.conf
Agregándole el siguiente contenido:
Alias /i/ "C:\oracle\product\10.1.0\db_1_apache\Apache\Apache\images/"
Alias /i/ "APACHE_HOME\Apache\Apache\images/" <Location /pls/htmldb> SetHandler pls_handler Order deny,allow Allow from all AllowOverride None PlsqlDatabaseUsername HTMLDB_PUBLIC_USER PlsqlDatabasePassword (clave especificada como parametro en la instalacion) PlsqlDatabaseConnectString localhost:1521:siei PlsqlDefaultPage htmldb PlsqlDocumentTablename wwv_flow_file_objects$ PlsqlDocumentPath docs PlsqlDocumentProcedure wwv_flow_file_manager.process_download PlsqlAuthenticationMode Basic PlsqlNLSLanguage SPANISH_SPAIN.AL32UTF8 </Location>
SQL>SELECT parameter,value
FROM nls_database_parameters
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 20 de 96
WHERE PARAMETER IN ('NLS_CHARACTERSET','NLS_LANGUAGE','NLS_TERRITORY');
En el siguiente archivo.
ORACLE_BASE\ORACLE_HOME\Apache\Apache\conf\httpd.conf
Reiniciar el servicio correspondiente al servidor HTTP desde los accesos directos para iniciar y para el servidor.
La aplicación puede ser accedida desde los siguientes URLs:
http://168.192.1.51:7777/pls/htmldb/htmldb_admin
Crear Usuarios
Para hacer la aplicación accesible, es necesario crear usuarios. El camino más fácil para crear usuarios es
acceder a la página “Manage User” dentro del Workspace al que pertenece la aplicación. Para hacer esto hay
que tener garantizados los derechos de administrador para acceder a esta página. (admin)
Para crear un nuevo usuario:
Navegar a la página de entrada de APEX
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 21 de 96
En la región “Workspace administration” al lado derecho de la página seleccionar “Manage Users”
Seleccionar “Create New User”.
En la región “User Identification” registrar la información requerida. Si se usa autenticación de Oracle Apex,
hace el nombre de usuario y la dirección de correo electrónico idénticas.
En la región “Developer” seleccionar No para desarrollador y NO para administrador, de esta forma el usuario
podrá ejecutar la aplicación sin acceder al ambiente de desarrollo. Presionar el botón de crear usuario.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 22 de 96
CONCEPTOS DETRÁS DE ORACLE APEX
¿Qué es Oracle APEX (APEX)?
Es una herramienta de ORACLE para desarrollar aplicaciones Web centradas en la base de datos.
¿Qué Puedo Hacer con Oracle Apex?
Aplicaciones Web centradas en bases de datos, que incluyen los siguientes componentes:
Servicios de Informes (breaks, export to csv, sorting, grouping, linking)
Servicios de Templates (temas, CSS)
Servicios de navegación (manejo de sesión)
Servicios de proceso (Condiciones de proceso )
Servicios de autorización (LDAP, database)
Servicios DML
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 23 de 96
Además permite crear:
Reportes
Formularios
Gráficos (pasteles, barras)
Realizar carga de datos desde hojas de calculo
Manejo de estado de Sesión
Navegación y control de flujo
Parametrización de todos los elementos
Interfaces externas (envio de emails, Consumo de webservies)
Impresión de reportes en formatos como pdf, XML.
Herramientas para trabajo en SQL
Visión General de la Funcionalidad Oracle APEX
Conexión al Espacio de Trabajo de Oracle Apex
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 24 de 96
Identificación de los Componentes de Interfaz de usuario de Oracle Apex
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 25 de 96
Interacción con la Base de Datos mediante el Taller de SQL
Acceso al Taller de SQL
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 26 de 96
Ejecución de Comandos SQL con el Procesador de Comandos SQL
Creación de Archivos de Comandos mediante el Repositorio de Archivos de Comandos
Interacción con Objetos de Base de Datos mediante el Explorador de Base de Datos
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 27 de 96
Generador de Consultas
Creación de Objetos de Base de Datos
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 28 de 96
Gestión de Valores por Defecto de la Interfaz de Usuario
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 29 de 96
Creación de una Aplicación
Creación de una Aplicación desde Cero
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 30 de 96
Creación de una Región Nueva
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 31 de 96
Creación de un Elemento Nuevo
Adición de un Botón Nuevo
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 32 de 96
Creación de un Proceso de Página
Crear las siguientes tablas:
CREATE TABLE Departamento ( Cod_Dept INTEGER, Nombre VARCHAR2(25), CONSTRAINT PK_DEPARTAMENTO PRIMARY KEY (Cod_Dept) ); CREATE TABLE Categoria ( Cod_Cat INTEGER, Nombre VARCHAR2(25), CONSTRAINT PK_CATEGORIA PRIMARY KEY (Cod_Cat) ); CREATE TABLE Empleados ( DNI VARCHAR2(50), CATEGORIA Integer, SUELDO INTEGER, DEPARTAMENTO INTEGER, CONSTRAINT PK_EMPLEADOS PRIMARY KEY (DNI), CONSTRAINT EMP_FK_DEPT FOREIGN KEY (departamento) REFERENCES departamento(Cod_Dept), CONSTRAINT EMP_FK_CAT FOREIGN KEY (categoria) REFERENCES categoria(Cod_Cat) );
Se crean las secuencias
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 33 de 96
create sequence "DEPTO_SEQ" start with 1 increment by 1 maxvalue 9999999999999999999999999999 minvalue 1 nocache nocycle noorder
Creando Formas
Oracle HTMLDB incluye varios Wizard con los cuales se pueden crear formas automáticamente, o si se desea se pueden
crear formas manualmente.
Creando una Forma que Usa a un Wizard
La manera más fácil de crear una forma es usando un Wizard. Estos son los pasos a seguir:
a) Navegue a la página de Workspace.
b) De la lista de las Aplicaciones, seleccione una aplicación. El Creador de la aplicación aparece.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 34 de 96
c) Pulse el botón Crear Página. d) Seleccione Página con Componente.
e) Seleccione Pantalla.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 35 de 96
f) Seleccione uno de los Wizard descritos en la tabla siguiente:
Pantalla Basada en Procedimiento
Construye una forma basada en argumentos de un procedimiento almacenado.
Pantalla Basada en Consulta SQL
Crea una forma basada en las columnas devueltas por una consulta SQL
Pantalla Basada en Tabla o Vista
Crea una forma que le permite a los usuarios actualizar una sola fila en una tabla de la base de datos
Pantalla Basada en Tabla con Informe, 2 Páginas
Crea dos páginas. Una página muestra un informe. Cada fila proporciona un enlace a la segunda página para permitirles a los usuarios actualizar cada registro. Nota: Este Wizard no soporta tablas que tienen más de 127 columnas. Seleccionando más de 127 columnas generarán un error.
Pantalla Maestro/Detalle
Crea una forma que despliega una fila Maestra y múltiple filas de detalle dentro de una sola forma de HTML. Con esta forma, los usuarios pueden consultar, insertar, actualizar, y eliminar valores de dos tablas o vistas
Página de Resumen Crea una versión Read-only de una forma. Comunmente usado para proporcionar una página de confirmación al final de un Wizard
Pantalla Tabular Crea una forma en la que los usuarios pueden actualizar múltiples filas en una base de datos
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 36 de 96
g) Siga las instrucciones en pantalla.
Creando una Forma Tabular
Es una forma en la que los usuarios pueden actualizar múltiples filas en una base de datos.
El Wizard crea una forma para realizar actualización, inserción, y eliminación
Para crear una forma tabular:
a) Navegue a la página de Workspace, seleccione la aplicación apropiada. b) Pulse el botón Crear Página. c) Seleccione Página con Componente. d) Seleccione Pantalla. e) Seleccione Pantalla Tabular. El Wizard de la Pantalla Tabular aparece. f) Identificar Propietario de Tabla / Vista :
Especifique el dueño de la tabla o vista en los que usted quiere basar su forma tabular.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 37 de 96
Seleccione el tipo de forma tabular que usted quiere crear en cuanto a actualización, inserción, y eliminación.
Seleccione una tabla.
g) En Identificar Columnas a Mostrar:
Especifique si desea usar valores por defecto de interface de usuario. Los valores por defecto de interface de usuario le permiten que asigne propiedades de interface de usuario
predefinidas a una tabla, columna, o dentro de un esquema especificado.
Seleccione las columnas (actualizables y no actualizables) para incluir en la pantalla. Usted puede modificar el orden de la columna o sus consultas después de que usted ha creado la página.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 38 de 96
h) En Identificar Llave Primaria, seleccione la Llave Primaria.
i) En los Valores por defecto para la Llave Primaria y las Llave Foránea, seleccione el origen para la Llave Primaria.
j) En Columnas de Actualización, seleccione qué columnas deben ser actualizables.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 39 de 96
k) Identifique Página y Atributos de la Región.
Especifique página e información de la región.
Seleccione una plantilla de la región.
Seleccione una plantilla del informe.
l) Especifique un Tab de la aplicación para esta página.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 40 de 96
m) En Etiquetas del Botón, ingrese el texto que aparecerá en los botones Cancelar, Aplicar Cambios ,Eliminar y Agregar Fila.
n) En Identificar Bifurcación, especifique las páginas de bifurcación después de que el usuario pulse los botones de Aplicar Cambios y Cancelar.
o) Pulse el botón Finalizar.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 41 de 96
Construyendo una Forma Master/Detail
Una forma Master/Detail refleja una relación uno-a-muchos entre dos tablas en una base de datos. Comúnmente una
Master/Detail despliega una fila de la tabla Maestro y múltiple filas del detalle dentro de una sola forma de HTML. Con
esta forma, los usuarios pueden insertar, pueden actualizar, y pueden eliminar valores de dos tablas o vistas.
Para crear una forma Master/Detail:
a) Navegue a la página de Workspace, seleccione la aplicación apropiada. b) Pulse el botón Crear Página. c) Seleccione Página con Componente. d) Seleccione Pantalla. e) El Wizard Master/Detail aparece. f) Defina la Tabla Maestra:
Seleccione a el dueño de la tabla o vista
Seleccione una tabla o vista
Seleccione las columnas a mostrar
g) Defina la tabla de Detalle:
Especifique para mostrar sólo tablas relacionadas
Seleccione el dueño de la tabla o vista
Seleccione la tabla o nombre de vista
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 42 de 96
Seleccione las columnas para desplegar h) En Defina la Llave Primaria, seleccione la Llave Primaria para la tabla Maestro y luego la Llave Primaria para la
tabla de detalle.
i) Defina las relaciones entre la tabla Maestro y detalle.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 43 de 96
j) Especifique el origen para la tabla maestro y de detalle de las columnas de Llave Primaria.
k) Especifique sí para incluir navegación de fila de la tabla Maestro. l) Si usted incluye navegación de fila de la tabla Maestro, defina las columnas de orden de navegación. Si la
columna de orden de navegación no se define, la forma de actualización de la tabla Maestro navegará por la columna de la llave primaria.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 44 de 96
m) Especifique el esquema de las páginas de detalle y Maestro. Usted puede incluir el detalle como una forma tabular en la misma página, o agrega el detalle en una página
separada.
n) En Atributos de Página, revise y edite los atributos de las páginas y la información de las mismas.
o) Identifique Tabs.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 45 de 96
p) Pulse el botón Crear.
Construyendo una Forma basada en Tabla con Informe, 2 Páginas Se Crean dos páginas. La primera página muestra un informe, en este cada fila proporciona un enlace a la segunda página
para permitirles a los usuarios actualizar cada registro.
Para crear una forma tabular:
a) Navegue a la página de Workspace, seleccione la aplicación apropiada. b) Pulse el botón Crear Página. c) Seleccione Página con Componente. d) Seleccione Pantalla. e) Seleccione Pantalla basada en Tabla con Informe, 2 Páginas. El Wizard aparece. f) Identificar Propietario de Tabla / Vista :
Especifique el dueño de la tabla o vista en los que usted quiere basar su forma
Seleccione una tabla. g) Identifique Página y Atributos de la Región para el informe.
Especifique página e información de la región.
Seleccione una plantilla de la región.
Seleccione una plantilla del informe.
Seleccione el tamaño de la paginación.
h) Identifique Tabs. i) Especifique las columnas del informe, se puede especificar una cláusula WHERE.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 46 de 96
j) Seleccione una imagen de enlace de edición. Esta imagen funcionará como enlace para seleccionar la fila que se va a editar.
k) Identifique Página y Atributos de la Región para la forma.
Especifique página e información de la región.
Seleccione una plantilla de la región.
Seleccione una plantilla del informe. l) Identifique Tabs. m) En Identificar Llave Primaria, seleccione la Llave Primaria.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 47 de 96
n) Especifique el origen de la Llave primaria para la tabla. o) Identifique las Columnas para la Pantalla
Seleccione las columnas que desea incluir en la página de pantalla
p) Identifique las opciones de proceso de esta página de pantalla
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 48 de 96
q) Pulse el botón Terminar
Construyendo una Forma Simple basada en una tabla o vista Esta forma que le permite a los usuarios actualizar una sola fila en una tabla de la base de datos.
Para crear una forma basada en una tabla o vista:
a) Navegue a la página de Workspace, seleccione la aplicación apropiada. b) Pulse el botón Crear Página. c) Seleccione Página con Componente. d) Seleccione Pantalla. e) Seleccione Pantalla Basada en Tabla o Vista. El Wizard aparece. f) Identificar Propietario de Tabla / Vista :
Especifique el dueño de la tabla o vista en los que usted quiere basar su forma g) Seleccione una tabla. h) Identifique Página y Atributos de la Región.
Especifique página e información de la región.
Seleccione una plantilla de la región. i) Identifique Tabs j) En Identificar Llave Primaria, seleccione la Llave Primaria. k) Especifique el origen de la Llave primaria para la tabla. l) Identifique las Columnas para la Pantalla
Seleccione las columnas que desea incluir en la página de pantalla
m) Identifique las opciones de proceso de esta página de pantalla
n) En Identificar Bifurcación, especifique las páginas de bifurcación después de que el usuario pulse los botones de Aplicar Cambios y Cancelar.
o) Pulse el botón Terminar
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 49 de 96
Creando Informes
En Oracle HTMLDB un informe es el resultado de una consulta. Usted puede generar informes seleccionando y ejecutando
una consulta o definiendo una región del informe basada en una consulta SQL.
Creando un Informe que Usa a un Wizard
Para crear un informe:
a) Navegue a la página de Workspace, seleccione la aplicación apropiada. b) Pulse el botón Crear Página. c) Seleccione Página con Componente. d) Seleccione Informe. e) Seleccione uno de los tipos de informe siguientes:
El Informe Sencillo - no requiere conocimiento de SQL. Simplemente seleccione el esquema apropiado, las tablas, el conjunto de resultados y las columnas a mostrar.
El informe con Pantalla – genera la combinación de dos páginas, un informe y una forma. La primera página les permite a los usuarios que especifiquen la fila a ser actualizada. La segunda página incluye una forma para actualizar la tabla seleccionada o vista.
Informe SQL - Crea un informe basado en una consulta SQL o una función PL/SQL que devuelve una consulta SQL.
f) Siga las instrucciones en pantalla.
Informe Sencillo a) Navegue a la página de Workspace, seleccione la aplicación apropiada. b) Pulse el botón Crear Página. c) Seleccione Página con Componente.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 50 de 96
d) Seleccione Informe. e) Seleccione informe Sencillo f) Identifique Página y Atributos de la Región para el informe.
Especifique página e información de la región.
Seleccione una plantilla de la región.
Seleccione una plantilla del informe.
Seleccione el tamaño de la paginación.
g) Identifique Tabs. h) Especifique el propietario de la tabla o vista, el nombre de la tablao vista y las columnas a mostrar en el informe
i) Seleccione una plantilla de informe de la lista e introduzca el número de filas que desea mostrar por página. Seleccione Usar Ordenación de Cabecera de Columna para que los usuarios puedan hacer clic en una cabecera de columna y realizar la ordenación
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 51 de 96
j) Pulse el botón Crear Página de informe
Crear Informes dinámicos
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 52 de 96
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 53 de 96
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 54 de 96
Trabajo con Ítems
LOVS
Son listas de valores que se usan para trabajar con la mayoría de Ítems. Son determinados por una lista de valores definida
a través de una sentencia SELECT… Por ejemplo:
select ename d, empno r
from emp
order by 1
Para crear una lista de valores:
a) Navegue a la página de Workspace, seleccione la aplicación apropiada. b) Pulse el botón Componentes compartidos
c) Seleccione listas de valores
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 55 de 96
d) Pulse el botón crear e) Identifique el origen de la lista de valores, Puede crear una lista de valores nueva o copiar una existente de otra
aplicación
f) Introduzca un nombre para la lista de valores y especifique si desea que sea estática o dinámica
g) Si selecciona dinámico, Introduzca una consulta SQL que devuelva dos columnas.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 56 de 96
h) Pulse el botón Crear Lista De Valores Con Nombre
Select list
Se usa para mostrar una lista de valores y escoger alguno de ellos. Se pueden especificar un valor del despliegue NULO y
un Valor del retorno NULO.
Este es un ejemplo de una lista de valores:
SELECT ename display_text, empno return_value FROM emp
Existen varios tipos de listas de selección:
Con Submit – Envina la pagina deacuerdo al valor seleccionado.
Con Redirect – Recarga la pagina y pone SÓLO el valor recientemente seleccionado de la lista en el estado de la sesión.
Devuelve URL con submit- Esta basado en una lista de valores con URLs como valor de retorno. Cambiando el valor de la lista, el browser carga la URL correspondiente.
Con bifurcación a una pagina - Esta basado en una lista de valores con números de página como valor de retorno. Cambiando el valor seleccionado en la lista se carga la pagina correspondiente.
Para agregar un Select list a una pagina:
a) Navegue a la página de Workspace. b) De la lista de las Aplicaciones, seleccione una aplicación. El Creador de la aplicación aparece. c) Seleccione la página en la que desea agregar el Item o cree una nueva. d) En la definición de la página seleccione el icono con forma de + en la seccion de elementos
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 57 de 96
e) Seleccione Lista de selección
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 58 de 96
f) Selecciones lista de selección
g) Identifique el nombre del elemento y su posición de visualización
h) Seleccione una lista de valores existente o introduzca una sentencia SQL que devuelva exactamente dos columnas o utilice la sintaxis STATIC
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 59 de 96
i) Identifique una etiqueta de elemento opcional, alineación de etiqueta, ancho de campo y alineación de campo
j) Identifique el origen del elemento, puede ser columna de base de datos, una sentencia SQL o un valor Nulo ente otros.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 60 de 96
k) Determine el origen que debe tener prioridad para este elemento, el valor del estado de sesión o el valor del "origen", Los elementos gestionan el estado de sesión automáticamente.
i) Pulse el botón Crear Elemento
Pop up
Se muestra como un campo de texto con un icono al lado de él, donde al dar clic el usuario puede seleccionar un valor de
una ventana popup. La lista en la ventana del popup es manejada por una lista de valores. Su uso es similar al de las listas
de selección pero son más convenientes de usar cuando la lista de valores retorna demasiados valores.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 61 de 96
Check boxes
Al igual que los ítems anteriores, estos utilizan listas de valores para mostrarse. El valor que corresponde a las opciones de
selección en un check box puede también ser un string delimitado por dos puntos.
El ejemplo siguiente demuestra cómo crear una sencillo check box que retorna SÍ. Este ejemplo desplegaría una check box
y" una etiqueta al lado.
SELECT NULL display_text, 'YES' return_value FROM DUAL;
Este ejemplo incluye el texto adicional "Pulse el botón para seleccionar."
SELECT 'Click to select' display_text, 'YES' return_value FROM DUAL;
Radio buttons
Se muestra como un radio group, basado en una lista de valores. Si se desea que al seleccionar un valor del radio button
se cargue otra página debe seleccionar al momento de la creación de este item Radiogroup with Submit
Graficos
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 62 de 96
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 63 de 96
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 64 de 96
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 65 de 96
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 66 de 96
GUÍA BÁSICA DE CONFIGURACIÓN DE IREPORT
Introducción
iReport es una herramienta visual que sirve para generar ficheros XML (plantillas de informe) que se puedan
utilizar con la herramienta de generación de informes JasperReports.
iReport inicialmente se ha desarrollado en J++ por lo que su entorno de ejecución se limita a plataformas
Microsoft. En sus últimas versiones se ha publicado una versión 100% java con lo cual se limita la restricción
existente.
Este manual explica cómo configurar iReport para poder generar tanto ficheros XML (plantillas base para
JasperReport), como ficheros “.jasper” (plantillas compiladas).
Configuración del classpath
Antes de poder trabajar con iReport hay que configurar sus variables de classpath para conseguir
compilaciones de las plantillas con éxito.
Para configurar el classpath seleccionamos el menú “Entorno -> Classpath...”
Aparece un cuadro de diálogo como éste:
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 67 de 96
Según se indica en la web de iReport, la configuración de la versión actual sigue los siguientes pasos:
1 Seleccionar la entrada classpath del menu Database
2 Completar el MS JVM para los drivers JDBC
3 Completar el Java VM classpath para los drivers JDBC, tools.jar y ficheros jar de JasperReports: (los
ficheros que indica el ejemplo son)
X:\path\to\jasperreports-0.4.2-project\JasperReports\lib\commons-beanutils.jar
X:\path\to\jasperreports-0.4.2-project\JasperReports\lib\commons-collections.jar
X:\path\to\jasperreports-0.4.2-project\JasperReports\lib\commons-digester.jar
X:\path\to\jasperreports-0.4.2-project\JasperReports\lib\itext-0.92.jar
X:\path\to\jasperreports-0.4.2-project\JasperReports\lib\jasperreports.jar
X:\path\to\jasperreports-0.4.2-project\JasperReports\lib\xerces.jar
4 Set Java home
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 68 de 96
DTD de JasperReport
En la carpeta “dtds” se incluyen dos ficheros DTD necesarios para la validación de las plantillas XML que genera
iReport (“jasperprint.dtd” y “jasperreport.dtd”).
Por omisión, iReport coloca una url del DTD con una dirección de Internet. Al parsear la plantilla desde
JasperReport, esta herramienta intenta acceder a la url (Internet) para validar la plantilla. En caso de que no
pueda acceder la operación de validación falla. Esto es especialmente importante para cuando colguemos las
plantillas generadas en el servidor WebLogic, ya que es muy posible que la máquina donde está instalado el
servidor Weblogic no tenga acceso a Internet.
Lo que se pretende con la propiedad DTD_HOME del punto anterior es especificar una url local que evite el
salir a Internet para validar una plantilla XML.
Los dos ficheros DTD deberán copiarse a la ubicación accesible mediante la url especificada en la propiedad
DTD_HOME.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 69 de 96
Como Generar Plantillas de Informes
Introducción
Este capítulo trata de explicar cómo generar plantillas para crear informes. Hace un pequeño recorrido por los
diferentes elementos y opciones de la herramienta iReport para explicar cuáles son sus cometidos y sus
funciones.
Es un tutorial eminentemente práctico pensado para una persona con conocimientos técnicos a nivel de
desarrollo con tecnología XML y Java, así como cierta desenvoltura en el manejo de editores
Crear un Informe, paso a paso
Menú Informes -> Nuevo
Aparece un cuadro de diálogo :
Figura 1 Cuadro de diálogo de crear nueva plantilla de informe
“Nombre del informe”: Nombre interno que va a tener el informe en iReport. Debe coincidir con el nombre del
fichero XML
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 70 de 96
“Tamaño de la página”: Normalmente A4
Hay que entrar en la pestaña “Más…”. Ahí aparece “Codificación XML”. Se debe poner ISO-8859-1. Eso hace
que se puedan escribir “ñ” y no de error.
Después de pulsar “OK”, es buena idea guardar el informe y ya se crea el “.XML” con el mismo nombre que has
puesto antes en el informe.
Explicación de cada banda.
Cuando has pulsado OK, se ha creado una pantalla como la que se muestra en la figura.
Figura 2 Bandas del informe
En ella aparecen marcadas diferentes áreas que llamaremos a partir de ahora “bandas”.
Cada banda se comporta de un modo diferente.
Hay que pensar que un informe de iReport está pensado a nivel de página. Lo que se define es el aspecto
general de una página y no se pueden definir (a priori) elementos fuera del tamaño de la página.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 71 de 96
El significado de cada banda es el siguiente:
Title : Esta banda se mostrará sólo una vez al principio del informe tenga las páginas que tenga el mismo.
PageHeader : Esta banda es la cabecera de la página; se repite cada vez que se pinta una página nueva.
ColumnHeader : Esta banda es la cabecera de las columnas. Inicialmente nosotros hemos definido sólo una columna, por lo que su comportamiento es análogo a PageHeader.
Detail : Esta banda es la encargada de mostrar los elementos que tienen alguna repetición, estos elementos se mostrarán en los subinformes que explicaremos más adelante. En esta banda solo se deben insertar los subinformes, ya que los mismos son los encargados de hacer las repeticiones.
ColumnFooter : Pie de la columna. Su comportamiento es análogo a ColumnHeader.
PageFooter : Pie de página, se repite una vez por página. Su comportamiento es análogo a PageHeader.
Sumary : Sólo se repite una vez por informe en la última página del mismo. Su comportamiento es análogo a Title.
Parámetros ($p) .
Los parámetros se usan para definir la aparición o no de textos o para mostrar algún valor concreto que no se
pasa como campo($F).
Cuando los parámetros se usan para mostrar o no un texto, tiene un valor “true” o “false”, porque tanto los
parámetros como los campos ($P y $F respectivamente) se pasan como textos (strings).
Para introducir los parámetros se pulsa sobre y aparece este cuadro de diálogo:
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 72 de 96
Figura 3 Cuadro de diálogo de parámetros
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 73 de 96
Para añadir un parámetro ($P), se pulsa sobre “Nuevo” y aparece otro cuadro de diálogo:
“Nombre de parámetro”: Nombre que se quiere dar al
parámetro. A partir de ahora, cuando en el proyecto te
quieras referir a dicho parámetro, lo nombrarás como
$P{nombre parámetro}.
“Tipo de parámetro”: Siempre java.lang.String
“Expresión del valor por defecto”: Si se quiere un valor por
defecto, aquí se escribe como una cadena de texto,
entrecomillado. Ej.: ”true”
“Descripción de parámetro”: Si se quiere una descripción
del parámetro.
Figura 4 Cuadro de diálogo de propiedades de parámetros
Campos ($F).
Siempre se van a definir como datos de tipo texto.
Serán los campos que se recuperen de la base de datos y se pasen en un objeto DataSource que entienda
Jasper.
Para introducir los campos se pulsa sobre y aparece este cuadro de diálogo:
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 74 de 96
Figura 5 Cuadro de diálogo de campos
Para añadir un campo ($F), se pulsa sobre “Nuevo” y aparece otro cuadro de diálogo:
“Nombre del Campo”: Nombre que se quiere dar al
campo. A partir de ahora, cuando en el proyecto te
quieras referir a dicho campo, lo nombraras como
$F{nombre campo}.
“Tipo de campo”: Siempre java.lang.String
“Descripción del campo”: Si se quiere una descripción
del campo.
Figura 6 Cuadro de diálogo de propiedades de campo
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 75 de 96
Variables ($V).
Se utilizan para hacer cálculos dentro del informe, como por ejemplo calcular una suma de campos o un
paginado.
Para introducir una variable se pulsa sobre y aparece este cuadro de diálogo:
Figura 7 Cuadro de diálogo de variables
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 76 de 96
Para añadir una variable, se pulsa sobre “Nueva” y aparece otro cuadro de diálogo:
“Nombre de variable”: Nombre que se quiere dar. A
partir de ahora, cuando en el proyecto te quieras referir
a dicha variable, la nombraras como $V{nombre
variable}.
“Tipo de variable”: Depende de la salida que genere
“Cálculo”: Si se quiere hacer un cálculo, aquí se dice
cual.
“Reset type”: Aquí se decide cuándo quiere evaluarse la
variable
“Reset group”: Aquí se decide el grupo (se debe definir con anterioridad)
Figura 8 Cuadro de diálogo de añadir variable
“Expresión” y “Valor inicial de expresión”: aquí se escribe una expresión. Haciendo clic al botón derecho
aparece un cuadro de diálogo que es el “Editor de expresiones”.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 77 de 96
Figura 9 Editor de expresiones
En este editor se pueden crear expresiones “complejas” del tipo “si A=2 entonces X sino Y”.
Este “Editor de expresiones” puede abrirse desde cualquier área de texto donde se pueda escribir un $F, un
$V o un $P.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 78 de 96
Elementos de Texto
Sólo guardan texto. Se usarán cuando se quiera poner un texto largo que como mucho se pueda elegir
mostrarlo o no dependiendo del $P asociado a él.
Se pulsa sobre el icono
Se coloca en la banda en la que se quiera mostrar y se hace doble click sobre él. Aparece el siguiente cuadro de
diálogo:
Figura 10 Cuadro de diálogo de elemento de texto
En la pestaña “Texto Estático” escribe el texto (sin comillas, ya que iReport sabe que sólo puedes escribir
texto).
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 79 de 96
En la caja “Imprime cuando sea verdadera la expresión”, hay que poner una expresión de tipo booleano:
“new Boolean ($P{nombre_parámetro})” (sin comillas), sabiendo que $P vale “true” o “false”. Esa expresión
puede ser compleja usando tanto && (and) como || (or).
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 80 de 96
Elementos de Datos
Se usarán para mostrar los $F, $P y $V que previamente se han definido.
Se pulsa sobre el icono
Se coloca en la banda en la que se quiera mostrar y se hace doble click sobre él. Aparece el siguiente cuadro de
diálogo:
Figura 11 Cuadro de diálogo de elementos de datos. Pestaña Comunes
En la caja “Imprime cuando sea verdadera la expresión”, hay que poner una expresión de tipo booleano: “new
Boolean($F{CAMPO} != null)” (sin comillas). Esa expresión puede ser compleja usando tanto && (and) como || (or).
En “Posición” se puede decidir si la posición del elemento será fija o por el contrario flotante, con lo que se
moverá según se hagan más o menos grandes los elementos que le preceden.
Las demás opciones de esta pestaña son intuitivas, menos la de “Imprimir cuando cambie el grupo”, que se
explicará al mismo tiempo que los grupos.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 81 de 96
Si se pulsa sobre la siguiente pestaña “Campos de texto”, aparece el siguiente cuadro de diálogo:
Figura 12 Cuadro de diálogo de elementos de datos. Pestaña Campos de Texto
En “Expresión del Campo de Texto” se introduce el texto que se quiere mostrar y se le concatena (+) el campo
asociado a dicho texto.
Del resto de las opciones de la pantalla es reseñable el “Ajuste en desbordamiento”. Esta opción no funciona
correctamente si en la anterior pantalla se ha definido la posición como “float”.
La pestaña “Propiedades Texto” sirve para definir los textos
La pestaña “Hiperenlace” permite crear un hiperenlace asociado tanto a una página web como a un ancla
dentro del propio documento. Esta opción no será usada apenas porque el fin último de casi todos los informes
es la impresión en papel.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 82 de 96
Imágenes.
Todas las imágenes necesarias para las plantillas se encuentran en un mismo directorio en un sistema de
ficheros T3. Esa ruta ya está fijada dentro de Jasper, por lo que cuando desde la plantilla se quiera introducir
una imagen los pasos a seguir son los siguientes:
Dejar el fichero de imagen en “T3/modulos/plantillas/imagenes”
Escribir en el elemento de imagen de la plantilla en la casilla “Expresión de imagen” el nombre del fichero con
su extensión.
Por ahora, si se introducen imágenes en el informe éste sigue compilando, pero el “Viewer” de Jasper falla por
lo que no se puede mostrar, así que lo lógico será hacer las plantillas sin imágenes, compilarlas y más tarde
añadir las imágenes cuando se quiere ver el resultado final.
Se pulsa sobre el icono
Se coloca en la banda en la que se quiera mostrar y se hace doble click sobre él. Aparece el siguiente cuadro de
diálogo:
”Expresión de Imagen”: Se escribe el nombre
del fichero con su extensión .
Figura 13 Cuadro de diálogo de propiedades de imagen
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 83 de 96
Grupos.
Actualmente este recurso de iReport sólo se usa para hacer que los subinformes funcionen tal como nosotros
queremos en cada informe. La explicación del funcionamiento de los grupos va asociada al funcionamiento de
los subinformes por lo que serán explicados junto con los mismos.
Subinformes.
Se usarán sólo cuando se quieran mostrar “n” ocurrencias de varios campos agrupados de alguna forma
determinada.
Hasta ahora hemos visto un informe como un fichero XML que guarda la información necesaria para crear el
mismo.
Ahora con los subinformes hay que cambiar ligeramente ese punto de vista. Si un informe es lo
suficientemente complejo para tener varios grupos de repetición, por ejemplo un demandante al que se le
quieren mostrar todos los idiomas que habla con sus características (grupo1) y todos los trabajos que ha
realizado con sus fechas de alta y baja en los mismos (grupo2), hay que usar subinformes.
Un subinforme no es más que otro fichero XML asociado al fichero XML principal y que comparte todos o parte
de sus datos.
Tanto el informe como el/los subinforme/s se deben definir de un modo determinado para que cumplan unos
requisitos predeterminados por Jasper.
Primero vamos a enumerar los requisitos que debe cumplir el XML principal. Para hacer más entendible la
explicación vamos a seguir el proceso de creación del informe antes mencionado.
Informe Principal.
En el informe principal se crearán tantos grupos como subinformes se necesiten. En este caso serán 2, uno para
idiomas y otro para ocupaciones.
Para crear el grupo se opera del siguiente modo:
Se pulsa sobre el icono y aparece el cuadro de diálogo:
Figura 14 Cuadro de diálogo de grupos
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 84 de 96
Se pulsa sobre el botón “New” y aparece este otro cuadro de diálogo:
Figura 15 Cuadro de diálogo de configuración de grupos
”Nombre del grupo”: Nombre significativo para reconocer el grupo (por ejemplo Idiomas u Ocupaciones)
“Expresión del grupo”: aquí se escribe literalmente “$V{REPORT_COUNT}” (sin las comillas). Esto hace que se
generen correctamente los saltos de página dentro del informe.
“Altura de la banda cabecera”: En esta casilla se debe poner una altura suficiente como para meter el
elemento de subinforme (Por ejemplo 20)
“Altura de la banda pie”: Inicialmente la pondremos a 0 porque no vamos a utilizarla.
El resto de las opciones deben quedar si chequear excepto “Empieza en nueva página” si lo que queremos es
que cada grupo empiece en una página nueva (eso dependerá de la colocación que se quiera en cada informe).
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 85 de 96
Una vez tengamos creado el grupo, éste aparecerá en nuestra pantalla del siguiente modo:
Figura 16 Pantalla con el grupo de idiomas
Ahora tenemos que crear un elemento de subinforme dentro de ese grupo al que posteriormente le
asociaremos un fichero XML con el subinforme apropiado.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 86 de 96
Se pulsa sobre el icono
Se coloca en la banda de cabecera del grupo y se hace doble click sobre él. Aparece el siguiente cuadro de
diálogo:
Figura 17 Cuadro de diálogo de propiedades de subinforme 1
Se define en “Expresión de la conexión /Fuente de Datos” el parámetro del sistema
“$P{REPORT_DATA_SOURCE}” (sin comillas) que hace que se le pase al subinforme el objeto DataSource
completo (todos los campos) que hemos definido para el informe principal.
Pulsando sobre la pestaña “Sub informe 2” aparece:
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 87 de 96
Figura 18 Cuadro de diálogo de propiedades de subinforme 2
En “Expresión del subinforme” se escribe la ruta donde está el subinforme compilado (.jasper), ya que un
subinforme no es más que un informe pre-compilado que se alimenta del contenido del informe de llamada.
Si se quieren pasar parámetros a un subinforme, se pulsa sobre el botón derecho en el cuadro de “Parámetros
del subinforme” y aparece el siguiente cuadro de diálogo:
“Nombre”: Nombre que se dará al parámetro en el
subinforme
“Expresión”: Valor del parámetro. Este valor puede ser
una expresión y si pulsas en el botón derecho puedes abrir
el “Editor de expresiones”.
Figura 19 Cuadro de diálogo de parámetros de subinfome
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 88 de 96
Después de hacer esto, el aspecto de la pantalla será el siguiente:
Figura 20 Pantalla con el subinforme de idiomas
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 89 de 96
Repitiendo el proceso de nuevo para el segundo grupo y su subinforme (ocupaciones) el aspecto final del
informe principal sería el siguiente:
Figura 21 Pantalla con el subinforme de idiomas y el subinforme de ocupaciones
Como se puede apreciar, hemos eliminado la banda de detalle porque el detalle lo va a hacer el subinforme y
por lo tanto ya no es necesaria.
Subinforme.
Un subinforme no es más que un informe normal pero que toma todos sus datos de otro informe y es llamado
desde él.
Jasper sólo puede tener asociado un fichero fuente (XML) a la hora de la generación del informe, por lo que
todos los ficheros de subinformes deberán estar pre-compilados (.jasper) para que Jasper los entienda.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 90 de 96
El fichero XML en el que definamos el subinforme debe llamarse igual que el fichero “.jasper” que hemos
definido en la llamada al subinforme desde el informe principal. En el caso de idiomas el fichero se llamará
“datos_idiomas.XML”. Cuando compilemos este fichero se generará el fichero “datos_idiomas.jasper” que será
el que utilizaremos para que Jasper genere el informe.
Hacemos el subinforme de la forma normal, pero teniendo en cuenta lo siguiente:
Cuando definimos el tamaño del informe, el ancho del mismo a de ser el mismo que el ancho del elemento “subreport” que hemos pintado en la pantalla del informe principal.
Hay que ponerle todos los márgenes a 0, ya que los márgenes ya los tiene el informe principal.
No se debe paginar. De eso se tiene que encargar el informe principal.
Los elementos que queramos que se repitan tienen que ir en la banda de detalle.
Juntándolo todo.
Ahora solo queda generar los ficheros “.jasper” para que los pueda usar el informe principal.
Para eso, lo primero que tenemos que hacer es compilar nuestro fichero XML (en nuestro caso
“datos_idiomas.xml”) para generar el fichero “.jasper” (en nuestro caso “datos_idiomas.jasper”).
Una vez compilado, se copia el fichero jasper a la ruta que previamente se a definido en el elemento de
subreport dentro del informe principal.
Este proceso lo haremos tantas veces como subinformes tengamos definidos (en nuestro caso dos).
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 91 de 96
Paginar un informe.
Normalmente utilizaremos la banda del pie de página, aunque también se puede utilizar la cabecera de la
página ya que esas dos bandas se repiten una vez por página.
Primero definimos un elemento de campo “Field Tool” y en “Expresión del Campo de Texto“ escribimos
“Página “ + String.valueOf($V{PAGE_NUMBER}) + “ de “.
El “Momento de evaluación” es muy importante ya que decide en qué momento se tiene que pintar el valor de
la variable asociada. En este caso debemos seleccionar “Now” para que nos indique en que página nos
llegamos en ese momento.
Figura 22 Cuadro de diálogo de creación de paginación I
Con esto ya tenemos la primera parte del paginado.
Ahora nos falta la segunda parte, que es saber cuántas páginas va a tener nuestro informe. Para eso, operamos
de igual manera que la vez anterior:
A continuación del primer elemento de campo, definimos un segundo elemento. Y en la “Expresión del Campo
de Texto“ escribimos:
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 92 de 96
““ “ + String.valueOf($V{PAGE_NUMBER})”
Pero esta vez “Momento de Evaluación” ha de ser “Report”, lo que hace que esa variable se escriba una vez
terminado el informe, con lo que contendrá el número de páginas del mismo.
Figura 23 Cuadro de diálogo de creación de paginación y II
El resultado final para la página 3 de nuestro informe de 10 páginas será:
“Página 3 de 10”.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 93 de 96
Compilar un informe.
Se pulsa sobre el icono
Aparece el cuadro de diálogo siguiente:
Figura 24 Cuadro de diálogo de compilación de informe
Aquí se puede elegir si sólo se quiere compilar (generar el .jasper) o además se quiere pasar el informe a algún
formato determinado (leer la lista desplegando la caja de selección).
Tanto el fichero “.jasper” (sólo compilar), como los ficheros de exportación se guardan en el mismo directorio
en el que esté la plantilla del informe (.XML).
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 94 de 96
Ajustes por Desbordamiento
Síntomas del problema
El denominado "Problema de ajuste por desbordamiento" se detecta cuando al generar un informe se produce
un "corte" del texto a mostrar y ese "corte" está en relación con un campo de texto con el atributo de ajuste
por desbordamiento activo.
Visto desde el XML asociado a la plantilla de informe es el siguiente código:
<textField isStretchWithOverflow="true" ...>
...
</textField>
Otro síntoma de que hay este problema es que al rellenar el informe el sistema (servidor de aplicaciones) entra
en un bucle infinito (parece como que se queda "bloqueado") del que o bien tarda en salir con una excepción
de agotamiento de memoria o bien el servidor acaba cerrándose él solo.
Cuando se constata este síntoma hay que aplicar la "segunda etapa" del tratamiento obligatoriamente (ver
punto “como solucionar el problema”)
¿Para qué sirve el ajuste por desbordamiento?
Esta opción se utiliza cuando se tienen campos de texto en los que a priori no se conoce cual es su tamaño
vertical o altura.
Es decir, que al asignar el valor al campo cuando se rellena el informe, el tamaño de aquel puede ser más
grande que el asignado inicialmente en tiempo de diseño (ejemplo típico es el que ocupe varias líneas).
¿A qué se debe el problema? ¿Qué es lo que lo origina?
El problema está en los cálculos que se realizan en el proceso de "layout" del informe (cuando se está
rellenando).
Se utilizan propiedades de objetos "Font" (fuente de letra) para asignar espacio a los textos que se escriben en
el informe, estando acotado el espacio usable a las dimensiones de la plantilla y de las bandas de ésta.
Además, la combinación de dos distintas máquinas virtuales Java (en el servidor se utiliza Java 1.3 y en el
cliente Java 1.4), cuando entre ambas hay diferencia de unidades de medida en cuanto a dimensiones de
objetos gráficos (y las fuentes lo son :) junto con un "bug" (o como dirían otros, "funcionalidad") de "iReport",
que omite un información crucial en las plantillas generadas a partir de él, hace que en algunas situaciones se
produzca el terrible problema del malfuncionamiento del ajuste por desbordamiento.
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 95 de 96
Cómo solucionar el problema
Hay dos etapas distintas que nos permiten solucionar este problema.
Si con la primera etapa se soluciona no va a ser necesario ir a la segunda.
1. Primera etapa:
Aplicable cuando se producen los cortes de texto.
Editar la plantilla de informe con la herramienta "iReport" versión 1.00 (1) ó superior. Y guardarla. Es decir,
la abres y la guardas (sobrescribiéndola)
(1) => A partir de esta versión de "iReport" se ha corregido la "funcionalidad" que omitía cierta información
que afectaba directamente a que se produjese el problema.
2. Segunda etapa:
Aplicable cuando el sistema entra en estado de bucle infinito.
Si estamos aquí, es que el informe tiene complejidad añadida.
Posiblemente la situación está en que el ajuste que se está realizando (el aumento de tamaño vertical) no
es suficiente para los datos que se están utilizando en el relleno del informe.
Para solucionarlo hay que editar la plantilla (con "iReport" versión 1.00 o superior o directamente el XML
con un editor) y aumentar el parámetro de altura del campo de texto.
Visto desde el XML asociado a la plantilla de informe es el siguiente código:
<textField isStretchWithOverflow="true" height="18" ...>
...
</textField>
Una manera de calcular qué altura (height) indicar es utilizar la siguiente fórmula:
tdl = tamaño de letra. Se corresponde con al atributo "size" de la etiqueta “<font>" el campo de texto.
Ejemplo: <font fontName="Helvetica" pdfFontName="Helvetica" size="8"...>
nafot = número aproximado de filas que se espera que ocupe el texto.
CB = Cte.. Su valor es 2 :
altura (height) = (tdl * nafot) + CB
Desarrollo Web en Apex Oracle Versión: 1.0
IEI – Universidad Nacional de Colombia Fecha:22-11-2010
Noviembre de 2010 Página 96 de 96
Por ejemplo, si esperamos que haya tres líneas de texto como máximo y nuestro tamaño de letra es 8, la altura sería:
altura = (8 * 3) + 2 = 26
Importante: esta fórmula da una estimación del valor a utilizar (). En caso de que el valor resultante no
fuese suficiente hay que incrementarlo.