Super Easy Report Printing in Oracle APEX 20.2
Para cualquier desarrollador de APEX, crear funcionalidades de exportación de datos que sean a la vez potentes y flexibles ha sido un desafío recurrente. Con la llegada de Oracle APEX 20.2, muchos notaron las nuevas opciones de descarga, pero los cambios introducidos son mucho más profundos y sorprendentes de lo que parecen. APEX ha evolucionado más allá de la simple "impresión" de reportes, unificando tres bases de código separadas (para Reportes Clásicos, Interactivos y Grillas Interactivas) en un único y poderoso framework de API: APEX_DATA_EXPORT. Este cambio arquitectónico es el verdadero secreto, una reescritura fundamental que no solo optimiza la plataforma, sino que también sienta las bases para futuras innovaciones.
Este artículo descubre algunas de las características más impactantes y menos obvias de esta actualización, revelando los secretos técnicos que hacen de la exportación de datos en APEX 20.2 una herramienta completamente nueva.
1. El Secreto Detrás de la Exportación a Excel Nativo: Es Solo un Zip
La adición más visible fue la capacidad de exportar a formato Excel nativo (.xlsx). Pero más allá de agregar un nuevo formato, la implementación detrás de esta característica es sorprendentemente ingeniosa. El secreto técnico es que un archivo .xlsx no es más que un archivo ZIP que contiene múltiples archivos XML interconectados.
Dado que el framework de APEX ya contaba con paquetes robustos para la creación de archivos ZIP (apex_zip) y la manipulación de XML, para el equipo de desarrollo fue "relativamente fácil" construir esta funcionalidad. El resultado es una exportación a Excel nativa y rica en características:
- Congelación Automática: Los encabezados de las columnas y la primera columna se congelan automáticamente para facilitar la navegación en hojas de cálculo grandes.
- Fidelidad de Reporte: Se preservan los quiebres de control, los resaltados (highlights) y los agregados de los Reportes Interactivos.
- Respeto por los Formatos: Las máscaras de formato para fechas y números (como monedas) se mantienen correctamente en Excel.
- Tablas Nativas de Excel: Al usar la opción "solo datos", la salida se convierte automáticamente en una Tabla nativa de Excel, proporcionando botones de filtro listos para usar.
- Ancho de Columna Inteligente: APEX ajusta dinámicamente el ancho de las columnas basándose en la longitud del contenido, creando un archivo de Excel que se ve bien desde el momento en que se abre.
2. La Complejidad Oculta del Soporte PDF Multilingüe
APEX 20.2 introdujo el soporte para los idiomas chino, japonés y coreano (CJK) en las exportaciones nativas a PDF. Este avance es mucho más complejo que simplemente imprimir texto, ya que el proceso requiere, en esencia, "dibujar cada carácter en una página". Los PDFs estándar se basan en unas pocas fuentes "núcleo" como Helvetica, que todo lector de PDF soporta y, por lo tanto, no necesitan ser incrustadas. Sin embargo, estas fuentes no contienen los miles de caracteres necesarios para los idiomas CJK.
Aquí radica el principal desafío técnico: la incrustación de fuentes (font embedding). El presentador utilizó un ejemplo claro: la fuente Google Noto para japonés contiene más de 60,000 glifos y el archivo completo pesa 4.5 MB. Incrustar una fuente de este tamaño en cada PDF sería inviable.
La solución de APEX es una técnica inteligente de "subconjunto de fuentes" (font subsetting), donde se analiza el documento y se incrustan únicamente los glifos de los caracteres que se utilizan realmente. El resultado es drástico: en la demostración, el PDF final que utilizaba caracteres japoneses tenía un tamaño de solo 14 KB, a pesar de depender de un archivo de fuente de 4.5 MB. Esta técnica oculta es lo que hace que estos PDFs avanzados sean eficientes y compactos.
3. El Motor de Exportación Expuesto: Una API para Desarrolladores
Quizás el cambio más fundamental y poderoso es que el motor que impulsa todas estas nuevas características ahora está expuesto como una API pública de PL/SQL: APEX_DATA_EXPORT.
Esto eleva la funcionalidad de ser un simple atributo de un componente a convertirse en una herramienta de desarrollo versátil. Con esta API, los desarrolladores pueden generar exportaciones programáticamente desde cualquier consulta SQL, no solo desde una región de reporte predefinida en una página. Esto permite un control granular sin precedentes, permitiendo añadir mediante programación agrupaciones de columnas, resaltados condicionales, agregados, quiebres de control y máscaras de formato, recreando la riqueza de un Reporte Interactivo avanzado, pero desde una simple consulta en PL/SQL.
Esto abre la puerta a casos de uso avanzados, como la creación de puntos finales (endpoints) REST personalizados que devuelven archivos de datos formateados (CSV, JSON, PDF, etc.) bajo demanda, como se demostró en la presentación.
4. Exportar lo "Inexportable": Datos de Cualquier Región
La nueva flexibilidad queda demostrada con la función APEX_REGION.EXPORT_DATA. En la demostración, se utilizó un ejemplo práctico: agregar un botón de "Descargar" personalizado a una región de tipo Tarjetas (Cards), un componente que no tiene capacidad de exportación incorporada.
Esta función permite a los desarrolladores exportar el origen de datos subyacente de cualquier región, incluso si el tipo de región no soporta la impresión de forma nativa. La exportación no intenta replicar la visualización (las tarjetas), sino que proporciona los datos brutos de la consulta fuente.
El presentador también señaló un posible "gotcha" para desarrolladores: el atributo de página "Reload on Submit" debe manejarse correctamente. Cambiarlo a "Always" puede fallar si existen otros componentes en la página que lo impiden (como una Grilla Interactiva editable), pero la solución recomendada es simple: utilizar un proceso "before header" que se ejecute al cargar la página. Esta facilidad de uso fue perfectamente resumida por el presentador, Meno Hogan-Dyke, al referirse a una aplicación de demostración que construyó para la presentación:
¿Fue fácil hacer esta aplicación? Sí, muy fácil. Me tomó menos de una hora configurarla, hacer que se viera un poco bonita y así de fácil es la impresión de reportes en APEX 20.2.
Conclusión: Un Nuevo Fundamento para el Futuro
Los cambios en la exportación de datos de APEX 20.2 no son solo actualizaciones incrementales; representan un cambio fundamental hacia un marco de trabajo más potente, flexible y centrado en el desarrollador. Se ha sentado una nueva base sobre la cual se construirán futuras mejoras.
El equipo de APEX ya está considerando futuras mejoras, como un mejor soporte para idiomas de derecha a izquierda (RTL), la inclusión de logos y la exportación de gráficos.
Comentarios
Publicar un comentario