Inicio > Forms & Reports > Oracle Reports – Bursting and Distributing

Oracle Reports – Bursting and Distributing

repbursting

 

Oracle Reports tiene una funcionalidad muy interesante para el reporting de nuestras aplicaciones existente a partir de la versión 10gR2, y totalmente disponible en versión 11gR2, que permite distribuir simultáneamente la salida de un informe a varios destinatarios con una única ejecución.

Destacar que el formato de salida de nuestro informe puede ser a pdf, html, rtf, Spreadsheet, xml, htmlcss y que la distribución puede ser a fichero, a impresora o a mail.

Imaginemos un escenario posible para comprender perfectamente la utilidad de esta funcionalidad:

  • A nuestras manos llega la tarea de crear un informe para la nómina de todos los empleados de la organización. Lo que haríamos sin conocer la utilidad Oracle Reports Bursting sería crear un informe de la manera habitual que reciba como parámetro el identificador del empleado y probablemente el número de mes. Desde el formulario que lanza el informe crearíamos un cursor para recorrer todos los empleados de la organización y para cada empleado se ejecutaría el informe mediante por ejemplo la funcionalidad run_report_object. Es decir, si por ejemplo la organización tiene 1.000 empleados el informe se ejecutará 1.000 veces, 1 informe por empleado.
  • Esto a priori no es un problema, el informe funcionará y las nóminas llegarán a los empleados, pero si lo miramos con detalle sí que puede ser un problema: habrá una cola de Reports Server que estará bloqueada ya que tiene 1000 informes en cola y, dependiendo del número de colas de Reports Server que disponga nuestra infraestructura y del tipo de balanceo configurado, cualquier otro informe que se ejecute justo después de que se hayan encolado los 1.000 informes se quedará a la espera de que estos acaben.
  • El informe 1.001, que en condiciones normales por ejemplo tarda 15 segundos en ser ejecutado y distribuido, ahora deberá esperar a que todos los informes de las nóminas de los empleados sean servidos, provocando probablemente que el usuario que ha lanzado el informe 1.001 llame a nuestro help desk quejándose de que lleva 1 hora esperando cuando lo normal es que tarde 15 segundos.
  • Con Oracle Reports Busting esto no sucederá, ya que sólo existirán 2 informes encolados en la cola de Reports Server, el de la nómina y el informe que tarda 15 segundos que ha lanzado el usuario después de que se haya lanzado el report de la nómina.
  • Con Oracle Reports Busting conseguimos que  con una única ejecución de nuestro informe los 1000 empleados reciban en su cuenta de correo un mail con un fichero PDF de su nómina si la distribución era a mail y la salida a PDF.

Para conseguirlo sólo hemos de seguir los siguientes pasos:

1. Preparar el informe para la distribución:

  • Abrir con Reports Builder el informe rdf.
  • En el “Object Navigator”, debajo del nombre del informe, hacer doble click encima de “Paper Layout” para mostrar la vista de disposición del papel.
  • Eliminar el repeting frame por donde queremos que se realice la distribución.
  • En la propiedad “Repeat on” del “Main Section”, informar el grupo en el que está basada la distribución.

2. Editar el fichero XML para la distribución:

Este fichero se encarga de definir cómo se distribuye la salida del listado. La mejor manera de entenderlo es con el ejemplo que a continuación os detallo. Se trata de una distribución que genera N ficheros pdf (en nuestro ejemplo, 1 para cada nómina) y envía cada uno de los pdf a la dirección de correo del empleado correspondiente:

<destinations>
  <foreach>
    <mail id=”a5″ to=”&<email>” from=”javier.gea@avanttic.com” subject=”Prueba”>
    <body srcType=”text”> Esto es un prueba </body>
      <attach format=”pdf” name=”nómina_&<nombre>.pdf” srcType=”report” instance=”this”>  <include src=”mainSection” />
      </attach>
    </mail>
  </foreach>
</destinations>

Si nos fijamos en el xml de arriba, con &<email> indicamos que el mail ha de ser enviado a la dirección de correo que indica el campo existente en el Data Model de nuestro informe. El mail que se envía lleva adjunto un fichero cuyo nombre está compuesto por “nómina_”  concatenado con el nombre completo del empleado, que también es un campo existente en el Data Model de nuestro informe: nómina_&<nombre>.pdf.

Téngase en cuenta que cualquier campo del xml puede corresponder con una columna de nuestro Data Model.

3. Ejecutar el informe:

Para ejecutar el informe lo único que tenemos que modificar en la llamada es el parámetro REPORT_OTHER. Hay que indicar que la salida del listado tiene que ser distribuida (DISTRIBUTE=YES) y dónde se encuentra el fichero xml con la distribución (DESTINATION). Evidentemente no es necesario crear un cursor para recorrer todos los empleados. A continuación os dejo un ejemplo de cómo hacerlo:

declare
vReportId       report_object;
vReportJobId  varchar2(2000);
BEGIN
vReportId := find_report_object (‘DUMMY’);
set_report_object_property (vReportId, REPORT_FILENAME, ‘lnomina’);

set_report_object_property (vReportId, REPORT_OTHER, ‘DISTRIBUTE=YES DESTINATION=E:\miERP\reports\distribucion.xml‘);

set_report_object_property (vReportId, REPORT_SERVER, ‘micoladeRS’);
set_report_object_property (vReportId, REPORT_COMM_MODE, ASYNCHRONOUS);

vReportJobId := run_report_object (vReportId, ‘params’);
end;

A continuación os dejo este link con más información sobre esta utilidad.

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: