lunes, 17 de marzo de 2014

Informe XML Publisher con plantilla de datos

No hay necesidad de utilizar la herramienta Oracel Reports  o un procedimiento almacenado por pl/sql  para crear un informe XML en este caso. Aquí vamos a crear una plantilla de datos e incluye nuestra consulta SQL en él. Nosotros vamos a usar el ejecutable (XDODTEXE) para satisfacer nuestras necesidades.

Paso a paso la instrucción para crear un informe utilizando XML plantilla de datos.

1.       Preparar la consulta, en base a sus necesidades de negocio.

En este caso haremos un reporte donde obtendremos las facturas dentro de un rango de fechas

SELECT POV.VENDOR_NAME,
       AIA.INVOICE_ID,
       AIA.INVOICE_NUM,
       AIA.INVOICE_AMOUNT,
       AIA.INVOICE_DATE,
       AIA.PAY_GROUP_LOOKUP_CODE
  FROM AP_INVOICES_ALL AIA, PO_VENDORS POV
 WHERE AIA.VENDOR_ID = POV.VENDOR_ID
   AND AIA.INVOICE_DATE BETWEEN &P_START_DATE AND &P_END_DATE

2.       Definir un archivo XML de plantilla de datos. (Por favor, consulte la plantilla de datos de ejemplo se adjunta a continuación)

Es muy importante para crear la plantilla de datos en el formato correcto. Vamos a ir a través de las diferentes secciones de la misma.

<dataTemplate name>
Nombre de su plantilla de datos, Ejemplo: NOBANK_DD
<parameters>
Agregar parámetros independientes para cada entrada (variable de condiciones) utilizado en la consulta.
<dataQuery>
Su consulta creada anteriormente con variables de enlace adecuados.
<dataTrigger>
(opcional)El trigger que se dispara en un evento (beforereport o afterreport )
<dataStructure>:
Es la estructura de datos de salida XML.

  
Recreado el query debe tener el siguiente esquema

<?xml version="1.0" encoding="WINDOWS-1252" ?>
<!-- $Header: XXTESTGHH.xml 115.0 2013/12/12 GHH $ -->
<!-- dbdrv: none -->

<dataTemplate name="XXTESTGHH" description="Reporte de Facturas" Version="1.0" >
  <parameters>
    <parameter name="P_START_DATE"         dataType="date" />
    <parameter name="P_END_DATE"           dataType="date"/>
  </parameters>
  <dataQuery>
   <sqlStatement name="Q1">
     <![CDATA[
   SELECT POV.VENDOR_NAME,
       AIA.INVOICE_ID,
       AIA.INVOICE_NUM,
       AIA.INVOICE_AMOUNT,
       AIA.INVOICE_DATE,
       AIA.PAY_GROUP_LOOKUP_CODE
  FROM AP_INVOICES_ALL AIA, PO_VENDORS POV
 WHERE AIA.VENDOR_ID = POV.VENDOR_ID
   AND AIA.INVOICE_DATE BETWEEN :P_START_DATE AND :P_END_DATE
     ]]>
   </sqlStatement>  
  </dataQuery>
  <dataTrigger name="beforeReport" source="XXPACKAGE.PROCEDURE" />
  <dataStructure>
  <group name="HEADER" source="Q1">
     <element name="PROVEEDOR"          value="VENDOR_NAME"/>
         <group name="DETAIL" source="Q1">
     <element name="ID_FACTURA"       value="INVOICE_ID"/>
     <element name="NUM_FACTURA"       value="INVOICE_NUM"/>
     <element name="MONTO_FACTURA"     value="INVOICE_AMOUNT"/>
     <element name="GRUPO_SEDE"          value="PAY_GROUP_LOOKUP_CODE"/>  
     </group>  
  </group>
  </dataStructure>
  <dataTrigger name="afterReport" source="XXPACKAGE.PROCEDURE" />
</dataTemplate>

Como no ejecutaremos algún proceso durante el reporte sacaremos los datatriggers quedando el xml de la siguiente forma. Se recomienda usar NOTEPAD++

NOTA: Los DataTriggers son muy importantes por si necesitamos ejecutar un proceso en especial como crear o limpiar una tabla entre otras cosas.



3.        Crear una definición de datos (Ex. código corto: XXTESTGHH) en la aplicación de prueba.

  Ir al  Navegador: Administrador de XML Publisher à Página Inicial à Definiciones de los datos à Crear definición de datos



Una vez creado. Adjunte el archivo XML  a plantilla de datos anteriormente creada a ella como una planilla de datos.


Grabar y volver al Administrador de sistemaàProgramaàDefinir

4.       Registrar el procedimiento concurrente en el EBS (programa concurrente código corto: XXTESTGHH) de la siguiente manera


Igualmente para cada parámetro



Tener en cuenta El token(Señal) de parámetros del programa concurrente debe coincidir con el nombre del parámetro de la plantilla de datos.

5.       Agregar programa concurrente para el grupo de solicitud.


6.       Ejecute el informe y guardar la salida como sample.xml




7.       Crear una plantilla rtf (XXTESTGHH.rtf) en MS Word basado en sample.xml (usando BI Publisher Escritorio)


8.       Definir una plantilla en la aplicación de prueba.

Ir al  Navegador: Administrador de XML Publisher à Página Inicial à Plantillas à Crear Plantilla

·         Consulte la misma definición de datos creado anteriormente (código corto: XXTESTGHH).
·         Coloque la plantilla rtf anteriormente creada (XXTESTGHH.rtf) para esta plantilla.
·         Seleccione "Tipo de salida predeterminado" según necesidad.


9.       Ejecute el programa Concurrente de nuevo para obtener el resultado deseado.









8 comentarios:

  1. Hola, En la plantilla ¿para hacer una suma de cada columna? tengo la siguiente sentencia:
    PERO NO ME FUNCIONA, QUE ES LO QUE ME HACE FALTA?

    ResponderEliminar
  2. Hola, En la plantilla ¿para hacer una suma de cada columna? tengo la siguiente sentencia:
    PERO NO ME FUNCIONA, QUE ES LO QUE ME HACE FALTA?

    ResponderEliminar
    Respuestas
    1. Podrías indicarme el comando. Te mande un correo todo caso tengas problemas al subir el comando

      Eliminar
  3. Consulta, conocen la tabla donde se registran estos datos.
    Necesito saber si hubo alguna actualización sobre el XML.

    ResponderEliminar
    Respuestas
    1. Estas son las tablas donde se almacena la información de la plantillas XDO_TEMPLATES_VL y xdo_lobs

      Eliminar
  4. Gracias Gustavo. Recién comienzo con Oracle y ha sido genial leer tus artículos.

    ResponderEliminar