{"id":142,"date":"2020-02-24T09:01:59","date_gmt":"2020-02-24T14:01:59","guid":{"rendered":"http:\/\/gabrielguzman.com\/blog\/?p=142"},"modified":"2020-02-24T11:42:17","modified_gmt":"2020-02-24T16:42:17","slug":"apex-office-print-fundamentos-de-impresion-de-documentos-para-oracle-apex","status":"publish","type":"post","link":"https:\/\/gabrielguzman.com\/blog\/apex-office-print-fundamentos-de-impresion-de-documentos-para-oracle-apex\/","title":{"rendered":"APEX Office Print: Fundamentos de Impresi\u00f3n de Documentos para Oracle APEX"},"content":{"rendered":"<p><em>Esta publicaci\u00f3n es el inicio de una serie de entradas que giran alrededor de <a href=\"http:\/\/gabrielguzman.com\/blog\/category\/oracle-es\/oracle-apex\/aop-es\/\">APEX Office Print<\/a> y su integraci\u00f3n con <a href=\"http:\/\/gabrielguzman.com\/blog\/category\/oracle-es\/oracle-apex\/\">Oracle APEX<\/a>.<\/em><\/p>\r\n<hr \/>\r\n<p>Un requerimiento habitual por parte de los clientes con los que he trabajado, y que cuentan con aplicaciones en Oracle APEX, es el de poder imprimir sus datos, reportes y formularios r\u00e1pidamente, con opciones para varios formatos y tipos de documentos. Todo consultor de APEX se ha enfrentado a esta consulta al menos una vez en su carrera, la cual puede llegar a causar dolores de cabeza ya que no hay muchas opciones que vengan incluidas con la herramienta, y sus opciones de personalizaci\u00f3n son bastantes limitadas.<\/p>\r\n<p>La decisi\u00f3n de crear p\u00e1ginas <em>Printer Friendly\u00a0<\/em>(opci\u00f3n que, en mi experiencia, muchos tomaron al trabajar con versiones como 3.x y 4.x) ocasiona una deuda tecn\u00f3logica enorme, dejando a la aplicaci\u00f3n a merced del temperamento del navegador que maneje el usuario y de cualquier actualizaci\u00f3n que puedan sufrir el tema y plantillas asignados a la aplicaci\u00f3n.<\/p>\r\n<p>Hay varias soluciones externas que pueden ayudar a solventar este problema, entre ellas BI Publisher, PL\/PDF y AOP, siendo esta \u00faltima a la que dedicaremos atenci\u00f3n en esta entrada de blog.<!--more--><\/p>\r\n<h3><strong>Con ustedes, APEX Office Print <\/strong><\/h3>\r\n<p><a href=\"https:\/\/www.apexofficeprint.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">AOP<\/a> permite generar documentos y reportes con formato altamente personalizado, bas\u00e1ndose en plantillas que son enviadas en formato JSON junto con la informaci\u00f3n a ser incluida en el documento final, el cual puede ser un Word, Excel, PDF, PowerPoint o HTML.<\/p>\r\n<p>Su arquitectura se basa en un servidor web con la capacidad de autoescalarse dependiendo del n\u00famero de CPUs disponibles, y que est\u00e1 a la espera de solicitudes que vengan con un <em>payload<\/em> JSON. Este servidor est\u00e1 disponible tanto para despliegues locales como para usarlo en la nube, y cuenta con APIs REST y PL\/SQL, as\u00ed como con un plugin para Oracle APEX que permite una integraci\u00f3n r\u00e1pida de nuestros reportes con la herramienta.<\/p>\r\n\r\n<figure class=\"wp-block-image\"><a href=\"http:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/aop_architecture.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-143 size-large\" title=\"Arquitectura AOP\" src=\"http:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/aop_architecture-1024x546.png\" alt=\"Arquitectura AOP\" width=\"604\" height=\"322\" srcset=\"https:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/aop_architecture-1024x546.png 1024w, https:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/aop_architecture-300x160.png 300w, https:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/aop_architecture-768x410.png 768w, https:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/aop_architecture-1536x820.png 1536w, https:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/aop_architecture-2048x1093.png 2048w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/a>\r\n<figcaption><em>Arquitectura de APEX Office Print (Fuente: http:\/\/apexofficeprint.com\/docs_es\/)<\/em><\/figcaption>\r\n<\/figure>\r\n\r\n<p>Tomando en cuenta que AOP es una herramienta basada en plantillas, las mismas pueden ser creadas en cualquier editor y subirse a los archivos de la aplicaci\u00f3n para poder ser invocadas por el plugin. La herramienta soporta plantillas para m\u00faltiples formatos, y maneja distintas etiquetas para definir la ubicaci\u00f3n y manipulaci\u00f3n de los datos que se env\u00edan.<\/p>\r\n<p>Gracias a la integraci\u00f3n con APEX que mencion\u00e9 previamente, tenemos varias posibilidades:<\/p>\r\n<ul>\r\n<li><strong>Impresi\u00f3n directa de reportes y grillas interactivas desde APEX<\/strong>, con tan solo indicar en el plugin los identificadores est\u00e1ticos asignados a los mismos, los cuales se especifican en la plantilla con las etiquetas correspondientes y se formatean e imprimen de acuerdo a eso.<\/li>\r\n<li><strong>Impresi\u00f3n del documento tras consulta a la base de datos desde APEX, <\/strong>lo cual est\u00e1 soportado por el propio plugin. En sus opciones puede definirse un query que se ejecutar\u00e1 para extraer la informaci\u00f3n a ser enviada al servidor. Dicho query requiere tener cierto formato para poder ser interpretado y convertido a JSON, pero su contenido puede adaptarse a lo que requiramos para poder llenar nuestra plantilla.<\/li>\r\n<li><strong>Impresi\u00f3n del documento desde la base de datos, <\/strong>en caso de que se requiera una l\u00f3gica y procesamiento m\u00e1s complejos al momento de usar la herramienta. Esta es una opci\u00f3n m\u00e1s avanzada que da total control sobre las llamadas al servidor mediante el API PL\/SQL.<\/li>\r\n<\/ul>\r\n<h3><strong>Costo de APEX Office Print<br \/><\/strong><\/h3>\r\n<p>La gente suele decir que si algo es bueno y bonito, no puede ser barato. Afortunadamente, el equipo de AOP ofrece un plan gratuito en la nube para aquellos que quieran experimentar con la hearramienta. Por supuesto, este plan tiene sus limitantes, pero sirve como un inicio perfecto para aquellos que est\u00e9n evaluando actualizar y mejorar las opciones de impresi\u00f3n de sus aplicaciones. Los planes en la nube disponibles al 24\/Feb\/2020 son:<\/p>\r\n\r\n<figure class=\"wp-block-image\"><a href=\"http:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/apex-office-print-cloud-plan.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-148 size-large\" title=\"Planes Cloud AOP\" src=\"http:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/apex-office-print-cloud-plan-1024x598.png\" alt=\"Planes Cloud AOP\" width=\"604\" height=\"353\" srcset=\"https:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/apex-office-print-cloud-plan-1024x598.png 1024w, https:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/apex-office-print-cloud-plan-300x175.png 300w, https:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/apex-office-print-cloud-plan-768x448.png 768w, https:\/\/gabrielguzman.com\/blog\/wp-content\/uploads\/2020\/02\/apex-office-print-cloud-plan.png 1095w\" sizes=\"auto, (max-width: 604px) 100vw, 604px\" \/><\/a>\r\n<figcaption><em>Costo de planes en la nube para APEX Office Print (Fuente: http:\/\/apexofficeprint.com\/)<\/em><\/figcaption>\r\n<\/figure>\r\n<p>Pueden ver que por cada plan proporcionan una cuota de reportes al mes con un n\u00famero ilimitado de reportes en modo desarrollador, el cual fue incluido desde AOP 19.1 y pemite hacer llamados a su servidor en la nube sin que la cuota principal se vea afectada, lo cual es perfecto para hacer pruebas y nuevos desarrollos. Hay que tomar en cuenta que los documentos generados en el modo desarrollador incluir\u00e1n una marca de agua al momento de ser generados, lo cual es algo habitual cuando se trabaja con estos modos de prueba.<\/p>\r\n<p>Para finalizar esta entrada introductoria al mundo de AOP, les dejo algunos enlaces que pueden ser de ayuda para un acercamiento inicial a la herramienta:<\/p>\r\n<ul>\r\n<li>En <a href=\"https:\/\/www.apexofficeprint.com\/ords\/f?p=504\" target=\"_blank\" rel=\"noopener noreferrer\">esta aplicaci\u00f3n<\/a> podr\u00e1n crear una cuenta gratuita en la nube para sus pruebas.<\/li>\r\n<li>Tambi\u00e9n puede revisar la <a href=\"https:\/\/www.apexofficeprint.com\/ords\/f?p=AOP_SAMPLE_APP_WEB:LOGIN_DESKTOP\" target=\"_blank\" rel=\"noopener noreferrer\">aplicaci\u00f3n de ejemplo<\/a> que tienen disponible en su sitio.<\/li>\r\n<li>Pueden leer la <a href=\"http:\/\/apexofficeprint.com\/docs_es\/\" target=\"_blank\" rel=\"noopener noreferrer\">documentaci\u00f3n en espa\u00f1ol<\/a> en caso de que tengan dudas m\u00e1s t\u00e9cnicas al momento de desarrollar.<\/li>\r\n<\/ul>\r\n<hr \/>\r\n<p><em>En pr\u00f3ximas entradas revisaremos algunas de las opciones de AOP y su uso con ejemplos espec\u00edficos. \u00a1Hasta la pr\u00f3xima!<\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>Esta publicaci\u00f3n es el inicio de una serie de entradas que giran alrededor de APEX Office Print y su integraci\u00f3n con Oracle APEX. Un requerimiento habitual por parte de los clientes con los que he trabajado, y que cuentan con aplicaciones en Oracle APEX, es el de poder imprimir sus datos, reportes y formularios r\u00e1pidamente, &hellip; <a href=\"https:\/\/gabrielguzman.com\/blog\/apex-office-print-fundamentos-de-impresion-de-documentos-para-oracle-apex\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">APEX Office Print: Fundamentos de Impresi\u00f3n de Documentos para Oracle APEX<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":144,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[132,122],"tags":[136,134,97],"class_list":["post-142","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aop-es","category-oracle-apex","tag-aop","tag-apex","tag-oracle"],"_links":{"self":[{"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/posts\/142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/comments?post=142"}],"version-history":[{"count":9,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/posts\/142\/revisions"}],"predecessor-version":[{"id":165,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/posts\/142\/revisions\/165"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/media\/144"}],"wp:attachment":[{"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/media?parent=142"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/categories?post=142"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gabrielguzman.com\/blog\/wp-json\/wp\/v2\/tags?post=142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}