Mostrando entradas con la etiqueta XML Publisher. Mostrar todas las entradas
Mostrando entradas con la etiqueta XML Publisher. Mostrar todas las entradas

jueves, 28 de enero de 2016

Formatos de tipo Fecha usando XML Publisher

Cuando uno está diseñando reportes  en XML Publisher, muchas veces tenemos formatos de fecha que provienen de XML Publisher el cual tiene un formato especial. Este tip ode formato se presenta al usar plantilla de datos y provienen del mismo XML.



Podemos formatear este tipo de fechas utilizando los los siguientes métodos:

Formatear  usando máscara de formato del Microsoft Word. 
Ubicarse en la Plantilla y seleccionar el campo fecha donde debemos dar botón derecho e ir a Propiedades. Estaremos en la pantalla Propiedades de BI Publisher aquí debemos seleccionear el tipo Fecha y seleccionar el formato de la lista desplegable.


Por ejemplo se puede optar por el formato dd/MM/yyyy  el cual debe presentar el siguiente formato al momento de imprimir.



Formatear  usando la función de formato de fecha de Oracle.
Para realizar este formato se debe usar la función  format-date() es una función incorporada de BI Publisher. La sintaxis es la siguiente:

<?format-date:FECHA;MASK?>

La sintaxis MASK es un parámetro opcional. El cual nos da un formato exacto del campo Fecha que queremos mostrar. Para utilizar esta función de formato, debemos seleccionar el campo, dar botón derecho ir a Propiedades. Mantener el tipo como texto normal  y hacer clic en la pestaña Avanzadas, aquí debemos colocar siguiente sintaxis donde reemplazaremos MASK por SHORT para ver el tipo de formato que se otorga al campo.



Por ejemplo se puede optar por el formato anterior  el cual debe presentar el siguiente formato al momento de imprimir.


Se pueden utilizar los siguientes formatos utilizando la sintaxis de format-date():



viernes, 15 de enero de 2016

Problemas de memoria al ejecutar Programa Concurrente Java-XDODTEXE

Cuando uno utiliza el Programa Concurrente Java (XDODTEXE) tiende a tener problemas por la baja memoria asignada a JVM. Cuando se ejecuta reportes con bastante información saldrá un mensaje de error que nos indica este problema:


Para solucionar este problema se tiene dos opciones:

Opción 1: Ir a la pantalla de definición del programa concurrente y ingresar la cadena -Xss2048k -Xmx512m en el campo Opciones como se muestra  a continuación en la siguiente captura de pantalla:


Una vez configurado ejecutar el programa, donde se va observar que ya no se obtiene el problema.

Opción 2:Establezca la opción escalable en la plantilla de datos. Para ello dentro del archivo de plantilla de datos  debe colocar lo siguiente:

<properties>
<property name="scalable_mode" value="on" />
</properties>

lunes, 30 de noviembre de 2015

Usando condicionales IF -Else en Plantillas RTF

XML Publisher apoya la construcción de programación común para el uso de condicionales IF - THEN - ELSE. Esto es muy útil cuando se necesita ejecutar o utilizar una condición y condicionalmente mostrar un resultado. Podemos utilizar la condición directamente escribiendo <?IF?> CONDICION <?END IF?>

Ejemplo:

<?if: PURCHASED_FLAG='N'?> No Activo <?end if?>

Para agregar la condicional Else podemos usar el siguiente formato:

<?xdofx:if element_condition then result1 else result2 end if?>

Por ejemplo, la siguiente declaración pone a prueba el valor del elemento AMOUNT. Si el valor es mayor que 500, mostrará la palabra Venta Mayor; si es menor , mostrará la palabra Venta Menor; caso sea igual saldrá Venta.

<?xdofx:if AMOUNT > 500 then ’Venta mayor’
else
if AMOUNT < 500 then ’Venta menor’
else ’Venta’  end if?>


viernes, 13 de noviembre de 2015

Cargar imagenes por XML Publisher

Para insertar imágenes en una plantilla rtf hay dos opciones. Uno es cargarlo por medio de una ruta en el servidor de aplicaciones donde se almacena la imagen que deseamos cargar a nuestra plantilla o almacenar la imagen en una tabla dentro de base de datos como un tipo Blob.

Cargar imagen por ruta
Debemos  insertar una imagen ficticia en su plantilla. Esta debe ser una imagen estática. Para eso basta con hacer clic en el vacío donde tenemos que insertar la imagen. Por ejemplo vamos a colocar la imagen en el lado izquierdo de la página. Coloque el cursor en algún lugar en el lado izquierdo de la página y ahora ve a la pestaña Insertar >> Ilustraciones >> Imagen.  Seleccione una de las imágenes y seleccione Insertar.



A partir de la imagen haga click derecho y seleccionar Tamaño. Ir a la pestaña texto alternativo.



Aquí debemos ingresar  la siguiente sintaxis para hacer referencia al directorio donde se ubica el archivo.

url:{'${XXTOP}/<IMAGE_NAME>'}

XXTOP es nuestro directorio basepath donde se ubica nuestra imagen, seguido del nombre exacto del archivo más su extensión. También es posible colocar toda la ruta completa  o indicar por medio de un valor el nombre del archivo:

Ejemplos:

url:{'/u02/oracle/testappl/xxtop/11.5.0/LOGOTIPOx.GIF'}
url:{'${XXTOP}/LOGOTIPOx.GIF'}
url: {concat{‘${XXTOP}’ , ‘ / ‘,IMAGE_FILE)}


Una vez colocado el texto, debemos dar cerrar. Podemos diseñar nuestra plantilla con la imagen ficticia, recordar que al momento de ejecutar el reporte la imagen sera modificado por la imagen a la cual le hemos colocado en el comando. previamente debemos subir la imagen al servidor de aplicaciones. La plantilla en este caso queda de la siguiente manera:



Extraer imagen por campo Blob 
Si almacena imágenes en Base de datos debe tener en cuenta que si desea enviarlo por  la estructura  XML tiene que realizar cierta codificación. A partir de la versión 5.6.2 del motor de datos XMLP  la extracción de imágenes blob se puede hacer directamente en el código XML. Puede obtener  y almacenar en un formato base64 el cual no tiene límite en el tamaño del BLOB,es decir que puede obtener más de 64 KB de datos en el formato codificado. Hay otros métodos para obtener los datos del blob, pero debe ser en formato base64.

Por ejemplo para realizar la conversión se ha optado por hacer la siguiente función.
  
FUNCTION GET_BASE64STRING( P_BLOB BLOB )
RETURN CLOB IS L_RESULTADO CLOB;

BEGIN
DBMS_LOB.CREATETEMPORARY(LOB_LOC => L_RESULTADO, CACHE => FALSE, DUR => 0);
WF_MAIL_UTIL.ENCODEBLOB (P_BLOB, L_RESULTADO);
  
RETURN L_RESULTADO; 
END GET_BASE64STRING; 
END XX_BASE64;

Terminado la función y colocado en un paquete podemos llamar al campo donde se encuentra nuestro BLOB de la siguiente manera:

XX_BASE64.get_base64String(IMAGEN_BLOB)

 La función dará como resultado una salida CLOB, tener en cuenta que debemos usar to_char para la versión de 5.6.2 del editor XML, los tipos CLOB están bien a partir del 5.6.3. en el caso de convertirlo a texto tenemos un límite de 4000 caracteres por lo que se debe tener en cuenta al momento de obtener los datos.

TO_CHAR(SUBSTR(XX_BASE64.get_base64String(IMAGEN_BLOB), 1, 4000))

En este caso se ha elaborado por plantilla de datos para enviar la información del oracle por medio de XML y mostrar por una plantilla rtf. A diferencia de Oracle Reports realizar el query y la forma de enviar los datos es mas fácil.



Para referenciar el campo en la plantilla, debemos colocar en el texto de ayuda lo siguiente:

<fo:instream-foreign-object content-type="image/jpg">   
<xsl:value-of select="IMAGEN"/>  
</fo:instream-foreign-object>   


Tener en cuenta que si en el xml solo hubiera una etiqueta con una imagen debe cambiarlo de la siguiente manera : <xsl:value-of select="//IMAGEN"/>  


La plantilla  tiene que saber el tipo de imagen, en este caso "image/jpg". El IMAGEN contiene los datos en Base64 los datos de imagen. 

Al ejecutar el reporte saldrá de la siguiente manera:




miércoles, 2 de septiembre de 2015

Error al visualizar Presentacion Preliminar en RTF

Cuando uno esta trabajando en XML Publisher es necesario instalar BI Publisher Desktop para que el MS Word tenga la funcionalidad para diseñar plantillas. en ciertas ocasiones luego de cargar los datos XML de un archivo XML de prueba. Al momento de realizar una presentación Preliminar por ejemplo a PDF o Excel lanza el mensaje de error Could not find the main class. Program will exit.

Esto error sucede debido a que cuando se ejecuta el JDK de java es una versión desfasada. El directorio colocado no corresponde a una versión actual y por ello no puede ejecutarse. Para solucionar este problema debe ir  en la pestaña Complementos >> Herramientas >> Opciones. En la opción de Presentación Preliminar verificar si su Directorio Raiz de Java esta asociado la versión correcta de JDK, por ejemplo la version 6 update 24. Dar Aceptar y volver a ejecutar. Ahora ya podrá hacer sus pruebas y visualizaciones correctamente.

viernes, 28 de agosto de 2015

Visión General Oracle BI Publisher

XML Publisher, también llamado  Oracle Business Intelligence Publisher (BI Publisher), es una herramienta de informes basada en plantilla que aprovecha las tecnologías estándar de extracción y visualización de datos. Los usuarios de negocio pueden crear el diseño y las reglas para el informe mediante el uso de herramientas de escritorio comunes. Los ingenieros de desarrollo pueden concentrarse en la extracción de datos de la manera más eficiente. El tiempo de implementación es más rápido. Además, los usuarios de negocio con un mínimo de entrenamiento pueden diseñar plantillas y los informes basados ​​en en base a extracciones de datos XML desde sus aplicaciones de Oracle existentes desde los programas concurrentes.

En tiempo de ejecución, XML Publisher combina las plantillas personalizadas con las extracciones de datos XML  para generar una salida en PDF, HTML, RTF, EXCEL (HTML), o incluso de texto para su uso con transmisiones EFT y EDI.



Ventajas del BI Publisher

BI Publisher rompe los tres componentes separados y los trata por separado en tiempo de diseño. En tiempo de ejecución, los tres se ponen de nuevo juntos por BI Publisher para generar el  formato final. Hay una ganancia inmediata ya que este modelo es mucho más flexible; es decir, una única definición de datos puede admitir varios diseños y múltiples traducciones de idiomas pueden ser aplicados en tiempo de ejecución para generar una salida especifica. Esto conduce a una reducción en los costos de mantenimiento al generar reportes.


jueves, 27 de agosto de 2015

Adjuntar Plantilla por PL/SQL usando la función FND_REQUEST.ADD_LAYOUT

Hay ocasiones que por un proceso PL/SQL utilizamos la función FND_REQUEST.SUBMIT_REQUEST el cual ejecuta una  solicitud concurrente para ser procesado por el administrador de concurrentes. Usando este proceso sólo se ejecuta el programa, hasta ahí todo está bien. Sin embargo si ejecutamos un programa concurrente que sea de tipo XML al ejecutar este proceso no adjunta la plantilla RTF ya sea para el tipo de salida que se necesita .


Podemos adjuntar una plantilla durante la ejecución de la solicitud utilizando la función llamado  FND_REQUEST.ADD_LAYOUT .  El código a continuación le ayudará a asociar la plantilla durante la ejecución del programa concurrente.

DECLARE

L_RESPONSIBILITY_ID  NUMBER=100;
L_USER_ID            NUMBER=10124;
L_APPLICATION_ID     NUMBER=250;
L_USER_ID            NUMBER;
L_REQUEST_ID         NUMBER;
L_LAYOUT             BOOLEAN;

BEGIN
 
 
APPS.FND_GLOBAL.APPS_INITIALIZE (L_USER_ID,L_RESPONSIBILITY_ID,L_APPLICATION_ID);

  L_LAYOUT := FND_REQUEST.ADD_LAYOUT(APLICACION => 'XXCUSTOM',
                                     CODIGO     => 'XX_AP_PROG_TEMPLATE',
                                     IDIOMA     => 'en',
                                     TERRITORIO => 'US',
                                     SALIDA     => 'EXCEL');
 
  L_REQUEST_ID := FND_REQUEST.SUBMIT_REQUEST (APLICACION   => 'XXCUSTOM',
                                              PROGRAMA     => 'XX_AP_PROG',
                                              DESCRIPCION  => '',
                                              FECHA        => NULL,
                                              SUB_REQUEST  => FALSE,
                                              PARAMETRO1   => '100');
 
  COMMIT;
 
  IF L_REQUEST_ID = 0
  THEN
     DBMS.OUTPUT.PUT_LINE ('ERROR EN LA EJECUCIÓN');
  ELSE
     DBMS_OUTPUT.PUT_LINE('SE HA EJECUTADO LA SOLICITUD');
  END IF;
 
END;

viernes, 21 de agosto de 2015

Saltos de Pagina (Page Breaks) en Plantillas para XML Publisher

Para crear un salto de página o Page Breaks después de la ocurrencia de un elemento específico se debe  utilizar el comando split-by-page-break. Esto produce que al momento de generarse el reporte,se  inserte un salto de página entre cada instancia del elemento específico donde se le ha colocado el comando.

Para insertar un salto de página entre cada ocurrencia de un grupo, inserte el campo de formulario split-by-page-break en el grupo inmediatamente antes del campo  <?end for-each?> que cierra el grupo. En la plantilla RTF debe ingresar la siguiente  sintaxis:

<?split-by-page-break:?>

Para el siguiente XML, supongamos que se desea crear un salto de página para cada nuevo proveedor con su grupo de facturas:

<?xml version="1.0" encoding="UTF-8"?>
<XX_TEST_INVOICES>
<LIST_G_SUPPLIER>
<G_SUPPLIER>
 <NAME>XXR SLA</NAME>
 <LIST_G_INVOICES>
 <G_INVOICES>
   <INVOICE_NUM>0098-34</INVOICE_NUM>
   <DATE>11/12/2014</DATE>
   <AMOUNT>50923</AMOUNT>
 </G_INVOICES>
 <G_INVOICES>
   <INVOICE_NUM>0098-35</INVOICE_NUM>
   <DATE>18/12/2014</DATE>
   <AMOUNT>47103.5</AMOUNT>
 </G_INVOICES>
  </LIST_G_INVOICES>
</G_SUPPLIER>
<G_SUPPLIER>
 <NAME>INDUSTRIAS DAI DAI</NAME>
 <LIST_G_INVOICES>
 <G_INVOICES>
   <INVOICE_NUM>0097-93</INVOICE_NUM>
   <DATE>01/05/2015</DATE>
   <AMOUNT>8962</AMOUNT>
 </G_INVOICES>
 </LIST_G_INVOICES>
</G_SUPPLIER>  
</LIST_G_SUPPLIER> 
</XX_TEST_INVOICES>  

En la plantilla RTF se muestra el siguiente diseño, donde se muestra una estructura donde por cada proveedor se debe mostrara su listado de factura, por lo tanto hay dos Grupos de Repeticiones, uno para Proveedores y otro para las factura tal cual se peude observar en el XML anterior. El campo llamado PageBreak contiene la sintaxis split-by-page-break. 


Para dar el salto de Pagina se debe colocar en el campo PageBreak con la sintaxis <?split-by-page-break:?> inmediatamente antes del campo <?end for-each?>. El campo PageBreak se coloca dentro del bucle final en este caso G_Supplier


Esto asegura un salto de página antes de que se visualice el siguiente proveedor. Con ello cada pagina que se genera sera por las facturas de cada proveedor y se podrá ver de la siguiente manera si hacemos la ejecución por PDF: