jueves, 11 de octubre de 2018

ODC Appreciation Day 2018 - Evangelizando APEX en idioma Español desde el año 2012! - Archivos PDF Personalizados en APEX 18.1


En este día tan especial de agradecimientos y antes de empezar con este artículo tan interesante sobre el paquete PL/SQL llamado jrxml2pdf, quiero   decir a toda la comunidad fanática de Oracle APEX un muy grande GRACIAS! ¡Porque seguimos creciendo y seguimos evangelizando esta poderosa herramienta en cada rincón del mundo de habla Hispana!

Invito a todos los que se iniciaron con APEX tanto con mis cursos como con mis libros en español que compartan lo que han aprendido desde su experiencia así cada vez somos mas los que llevamos la camiseta de Application Express en español con gran orgullo!

Cómo Imprimir Informes Personalizados en formato PDF desde Código PL/SQL en Oracle Apex 18.1

Todos los que hemos trabajado en desarrollar aplicaciones ya sean para escritorio como web, se nos presenta un requerimiento determinante que es el de poder imprimir los reportes que se crean en la aplicación.

Es por ello que al trabajar con Oracle APEX siendo una herramienta sin costo embebida en la base de datos Oracle, siempre he investigado diferentes formas de poder imprimir los reportes y que sean sin costo.

Es por ello que en esta oportunidad les traigo una actualizacion que ya había publicado anteriormente sobre este paquete construido en puro PL/SQL llamado jrxml2pdf que nos permite mostrar reportes PDF listos para imprimir desde nuestra aplicación en APEX 18.1.

Como veremos a continuación para construir el reporte que queremos imprimir en formato PDF vamos a trabajar con una herramienta gráfica gratuita y Open Source llamada JasperSoft Studio.

Paquete PL/SQL jrxml2pdf

El paquete PL/SQL jrxml2pdf es una solución escrita en código PL/SQL puro y que genera archivos PDF tomando la información desde la tabla jrxml-report-definition el cual nos permite ingresar el código XML del reporte creado y lo mejor de todo es que no se necesita ningún middleware J
Podemos diseñar nuestros reportes gráficamente y muy sencillamente usando JasperSoft Studio, como lo veremos en un momento, y con unos simples pasos mostrar dichos reportes en nuestras aplicaciones en APEX.
Este paquete fue escrito por Andreas Weiden basándose en el paquete AS_PDF3 escrito por Anton Scheffer y el tipo de licencia que maneja es la GLP y MIT las cuales se encuentran descriptas en el paquete.

Descargar Paquete

Descargamos el Paquete jrxml2pdf en nuestra PC desde el siguiente link: https://sourceforge.net/projects/pljrxml2pdf/  (en mi caso lo descargaré en el escritorio) y lo descomprimimos.

Instalar el paquete jrxml2pdf

Siguiendo el procedimiento de instalación del paquete necesitamos realizar los siguientes pasos:
  1. Conceder permisos a UTL_FILE al usuario donde se instalará el paquete:
    GRANT EXECUTE ON UTL_FILE TO <esquema donde vamos a instalar el paquete jrxml2pdf>
  2. Abrimos una ventana de comandos CMD (si estamos en Windows) y nos ubicamos en el directorio de instalación del paquete: en mi caso à C:\Users\Clarisa\Desktop\jrxml2pdf-release\install y abrimos el SQLPlus.
  3. Ejecutamos el Script de Instalación: @install.sql


Después de instalar el paquete podemos ver los objetos instalados desde el Explorador de Objetos del Taller de SQL de APEX o desde el Toad for Orqacle o el SQL Developer si usamos estas herramientas para trabajar con los objetos de la base de datos, si expandimos los Paquetes, vemos que se agregaron los que corresponden al paquete jrxml2pdf:





Descargar e Instalar JasperSoft Studio

JasperSoft Studio es una poderosa herramienta de diseño visual para JasperReports, con esta herramienta gráfica podemos crear informes que cumplan con los más complejos requerimientos de información, además que es intuitivo, poderoso y muy fácil de usar.

Descargar JasperSoft Studio

El link de descarga es:

Seleccionamos el enlace que corresponde a nuestro sistema operativo, en mi caso es:

TIB_js-studiocomm_6.6.0_windows_x86_64.zip


Guardamos la carpeta comprimida en nuestra PC y luego la descomprimimos y creamos un acceso directo al escritorio del ejecutable del programa que se encuentra dentro de la carpeta Jaspersoftstudio/JaspersoftStudio.exe.

Ahora podemos ejecutar el programa y nos mostrará la página de inicio.



Cerramos la ventana Welcome y visualizamos el Jaspersoft Studio.


Crear Conexión a la Base de Datos desde Jaspersoft Studio

Desde la Página de Inicio del Jaspersoft Studio, seleccionamos Data Adapter y con el botón derecho del mouse seleccionamos Create Data Adapter y se abre una ventana emergente. Seleccionamos la opción Database JDBC Connection.


Hacemos clic en el botón Next >

Data Adapter: Database JDBC connection:
·         Name: devcmo
·         JDBC Driver: oracle.jdbc.driver.OracleDriver
·         JDBC URL: jdbc:oracle:thin:@localhost:1521:XE
·         Username: mi_username
·         Password: mi_password

Hacemos clic en el tab inferior “Driver Classpath”.


Hacemos clic en el botón Add.

Y buscamos el driver jrxml2pdf.jar dentro de la carpeta donde hayamos descargado el paquete en mi caso lo descargué en el escritorio: C:\Users\Clarisa\Desktop\jrxml2pdf-release\java_for_ireport\jrxml2pdf.jar y hacemos clic en el botón Open.

Además, necesitamos agregar el jar ojdbc6.jar dentro del Classpath.


Hacemos clic en el botón Finish.

Volvemos a abrir la conexión que la llamamos devcmo y probamos la conexión.


Crear el Reporte en JasperSoft Studio

En esta sección vamos a aprender a crear un reporte básico usando JasperSoft Studio, para que pueda ser invocado más adelante en nuestra aplicación en APEX.

Nos conectamos a la base de datos con la conexión creada anteriormente, que la habíamos denominado devcmo.

Hacemos clic en el menú File à New à Jasper Report y de esa forma se inicia el asistente.

1.   Report Templates

Se abre el asistente y seleccionamos el template Coffee Landscape, y hacemos clic en el botón Next.

2.   Report File
  • Ingresar el directorio padre: MyReports
  • File name: listado-empleados.jrxml

  • Hacemos clic en el botón Next >

    3.   Data Source

    • Data Adapter: devcmo
    • Hacemos doble clic sobre la tabla EMP del esquema DEVCMO para crear la consulta SQL. (Destildamos los campos HIREDATE y DEPTNO)

    Hacemos clic en el botón Next >

    4.   Fields: Mostrar todos los campos de la Tabla


    Hacemos clic en el botón Next >

    5.   Agrupar por (Group By…)

    No seleccionamos nada.




    Hacemos clic en el botón Next >


    Finalmente hacemos clic en el botón Finish.

    Se abre el IDE del Jaspersoft Studio donde visualizamos el reporte y podemos editar cada sección (band) del mismo y colocar las imágenes que deseamos en nuestro reporte.

    No es objetivo de este artículo aprender a editar un reporte en Jaspersoft Studio.

    Para información sobre esta herramienta por favor visitar la comunidad de JasperSoft Studio.

    Simplemente para este demo hemos ingresado nuevas imágenes desde el workspace de Jaspersoft Studio en:
    C:\Users\Clarisa\JaspersoftWorkspace\MyReports y cambiamos los títulos.


    Para pre-visualizar el reporte hacemos clic en el tab Preview que se encuentra en la parte inferior del panel central del diseñador. Ejecutamos el reporte haciendo clic en la flechita verde de play.

    De esta forma podemos visualizar el reporte recién creado en Jaspersoft Studio:

     

    Expresiones no soportadas en el paquete PL/SQL

    No todas las expresiones usadas en el reporte que hemos diseñado en JasperSoft Studio están soportadas por el paquete jrxml2pdf, es por eso que es muy importante revisar la documentación del paquete para evitar errores en la visualización del reporte cuando lo mostremos desde la aplicación en APEX.

    En el panel de la izquierda del IDE de JasperSoft referente al “Outline” expandimos Styles y luego expandimos Row, esta expresión es la que coloca el color de fondo en las filas de la tabla en forma alternada y que es parte del template que seleccionamos como base para crear nuestro reporte.

    $V{REPORT_COUNT}%2 == 0


    Este tipo de expresión no está soportada en el paquete jrxml2pdf, para ello vamos a eliminar la expresión y utilizar la herramienta de apariencia de la fila para darle color a todas las filas.

    Para ver expresiones equivalentes que sí estan soportadas por el paquete, es importante revisar la documentación del paquete en el mismo sitio de su descarga.


    Una vez modificado el reporte, necesitamos compilar el mismo para que se genere el archivo de compilación, para ello hacemos clic en el icono Build All.


    Podemos observar que todas las filas tienen un color de fondo, según los estilos aplicados.


    Podemos visualizar los dos archivos dentro del directorio MyReports:

    C:\Users\Clarisa\JaspersoftWorkspace\MyReports

    listado-empleados.jrxml y listado-empleados.jasper

    Nosotros vamos a usar el XML generado en el archivo “listado-empleados.jrxml” para que sea importado en la aplicación en APEX.

    Importar Imágenes en la tabla JRXML_REPORT_IMAGES

    Todas las imágenes que usemos en los reportes que creamos con JasperSoft Studio necesitamos ingresarlas en la tabla correspondiente de almacenamiento de imágenes que viene con el paquete jrxml2pdf.

    Ingresamos al SQL Developer  e insertamos un nuevo registro por cada imagen usada.


    Tener en cuenta que necesitamos cargar las imágenes como BLOB y con el mismo nombre que tienen en las imágenes que usamos en JasperSoft Studio.
    No olvidemos de hacer el commit de los registros cargados.
    Importar el Reporte a nuestra base de datos

    Vamos a cargar el reporte creado en JaspersSoft a nuestra base de datos:

    1. Desde el Reporte creado (listado-empleados.jrxml) verificamos que al presionar el tab Preview se vea bien el PDF, el cual muestra todo el listado de Empleados.

    2. Hacemos clic en el tab Source (que está al costado izquierdo del tab Preview) y copiamos todo el código XML en memoria con Ctrl + a


    Abrimos el SQL Developer, posteriormente seleccionamos la tabla JRXML_REPORT_DEFINITIONS, y luego hacemos clic en la ficha Data para ingresar un nuevo registro:
    1. Hacemos clic en el icono Insertar Fila
      1. JRD_ID: añadimos un nuevo número según la secuencia que exista.
      2. JRD_NAME: Colocamos aquí el nombre del reporte (es muy importante esta columna y además debemos tener en cuenta de no colocar caracteres especiales ni espacios) en mi caso lo llamaré Empleados.
      3. JRD_DESCRIPTION: podemos dejar este campo en blanco o colocar una descripción del reporte.
      4. JRD_XML: aquí es donde debemos colocar todo el código XML que habíamos copiado del reporte en JasperSoft Studio.
    2. Hacemos clic en el icono Commit  para que el registro sea creado.

    Abrir Oracle APEX 18.1

    Ya tenemos en una tabla todo el código XML del reporte que creamos en JasperSoft Studio.

    Ahora vamos a crear una aplicación en APEX y una página con el reporte de Empleados y un botón que diga Imprimir Reporte.

    La consulta de origen del Informe Interactivo es:

    select EMPNO as “ID”,
        ENAME as “NOMBRE”,
        JOB as “JOB”,
        MGR as “MANAGER”,
        SAL as “SALARY”,
        COMM as “COMMISSION”
     from EMP EMP



    Crear Proceso para Impresión del Reporte

    Desde el Diseñador de Página hacemos clic en la ficha Procesamiento del panel de la izquierda y creamos un nuevo proceso:

    1. En la sección Identificación
      1. Nombre: Imprimir Reporte
      2. Tipo: Código PL/SQL
    2. En la sección Origen
      Código PL/SQL:
    DECLARE
      vcName  VARCHAR2(200);
      lParams SCHEMA.PK_JRXML2PDF_REPGEN.TPARAMLIST;
      bl BLOB;
    BEGIN
      vcName := 'nombre-reporte';
      bl := SCHEMA.PK_JRXML2PDF_REPGEN.FK_RUN(i_vcName=>vcName);
      SCHEMA.PK_JRXML2PDF_REPGEN.PR_SHOW_REPORT(bl);
      APEX_APPLICATION.STOP_APEX_ENGINE;
    END;
    1. En la sección Condición
      1. Si Se Hace Clic en el Botón: IMPRIMIR
    2. Guardamos todos los cambios hacienda clic en el botón Guardar

    Reemplazamos ‘nombre_reporte’ por el nombre que pusimos a nuestro reporte, en este caso Empleados.

    Reemplazamos SCHEMA por el nombre de nuestro esquema.

    Ejecutamos la Página y podemos ver que el reporte se visualiza correctamente en nuestra aplicación en APEX.

    Nota: puede haber problemas con algunos tipos de formato imagen como el jpg.



    Resumen

    Como hemos visto a lo largo de todo este artículo, podemos crear reportes PDF listos para imprimir y sin costo asociado.

    Hemos aprendido a:

    • Descargar e instalar el JasperSoft Studio
    • Crear un reporte básico en JasperSoft Studio
    • Descargar e Instalar el paquete PL/SQL jrxml2pdf
    • Implementar el paquete en nuestra aplicación en APEX 18.1
    • Conocer algunas limitaciones del paquete

    2 comentarios: