Imprimir report de Dynamics AX/365FO en Power Apps

En este artículo veremos como visualizar y/o imprimir un informe procedente de Dynamics AX o Dynamics 365FO a través de una Power App. No obstante, cabe mencionar que el mismo proceso puede aplicarse a cualquier documento PDF generado desde otro software.

Para lograr este objetivo, seguiremos los siguientes pasos:

  1. Generar el informe en PDF en el ERP
  2. Guardar el informe en una carpeta del servidor
  3. Crear un servicio web que devolverá el PDF en base64
  4. Recuperar la cadena de texto en base64 en Power Apps
  5. Mostrar el informe usando el visor de PDF de Power Apps
  6. Convertir el formato base64 en PDF utilizando Power Automate
  7. Guardar el documento en OneDrive o Sharepoint, utilizando Power Automate, para poder descargarlo

Existe otra alternativa (o seguramente muchas) en la que no sería necesario utilizar el formato base64, pero uno de los objetivos de este artículo también consiste en trabajar con este formato. La alternativa sería la siguiente, sobre todo para software cloud, como Dynamics 365FO, en el que no tenemos la posibilidad de dejar los documentos PDF en un servidor local:

  1. Generar el informe en PDF en el ERP
  2. Subir el informe a un servicio en la nube (Azure Storage, OneDrive, Sharepoint, etc…)
  3. Crear un servicio web para recuperar el link del informe
  4. Recuperar el link en Power Apps
  5. Mostrar el informe usando el visor de PDF de Power Apps
  6. Descargar el documento a través del link proporcionado

En este artículo nos centraremos en la primera propuesta, utilizando Dynamics AX 2012 “on premise” como ERP. Si optáis por la segunda solución, recordad que en este post podéis ver como subir archivos a Azure Storage directamente desde D365FO.

Crear servicio web para generar el informe y devolver el PDF en base64

No veremos en detalle como crear un servicio web en Dynamics AX 2012, ya que no es el objetivo principal, y además, existen muchos recursos en la web para realizar dicha tarea, como por ejemplo, este post.

De hecho, nos basaremos en la misma clase utilizada en el post anterior, , y añadiremos una nueva función a la que llamaremos :

[SysEntryPointAttribute(true), 
AifCollectionTypeAttribute('return', Types::String), AifCollectionTypeAttribute('customerId', Types::String)]
public str createReport(CustAccount customerId)
{
CustTable custTable;
BinData binData;
str pdfBase64;
SRSPrintDestinationSettings settings;
Filename filename;
smmReportsController controller = new smmReportsController();
Args reportArgs = new Args();

controller.parmReportName(ssrsReportStr(CustListReport, Report));
custTable = CustTable::find(customerId);
filename = @'C:\Reports\' + custTable.AccountNum + ".pdf";

settings = controller.parmReportContract().parmPrintSettings();
settings.printMediumType(SRSPrintMediumType::File);
settings.fileFormat(SRSReportFileFormat::PDF);
settings.overwriteFile(true);
settings.fileName(filename);
reportArgs.record(custTable);
controller.parmArgs(reportArgs);
controller.parmShowDialog(false);
controller.parmLoadFromSysLastValue(false);
controller.startOperation();

binData = new BinData();
binData.loadFile(filename);
pdfBase64 = binData.base64Encode();

return pdfBase64;
}

Esta función realiza las siguientes acciones:

  • Dado un identificador de cliente, generar un informe con los datos del mismo
  • Guardar el informe en formato PDF en la carpeta “C:\Reports” del servidor
  • Devolver el documento PDF en base64

Los que estáis familiarizados con Dynamics AX, seguramente ya habréis generado muchos informes en PDF, cosa que logramos utilizando la clase . Por otra parte, la clase , nos sirve para transformar el PDF en base64.

Recuperar el PDF en base64 en Power Apps y mostrar el informe

En este punto, tenemos que añadir esta nueva función a la API desarrollada en .NET para que pueda ser consumida desde Power Apps, y posteriormente, añadirla también al conector personalizado de Power Apps. Este proceso, lo podéis consultar en detalle en este artículo anterior.

Llegados a este punto, ya podemos crear una app de tipo para probar la funcionalidad. En esta aplicación le pediremos al usuario que introduzca un id de cliente (1). Con este identificador y a través de un botón (2), llamaremos a la función para obtener el pdf en base64. Guardaremos el resultado en la variable .

El contenido de la variable debería ser algo parecido a esto:

Para visualizar el informe directamente en la Power App, podemos utilizar el visor de PDFs, que actualmente está en . Para tal propósito, utilizaremos la siguiente fórmula, en la propiedad del visor:

IMPORTANTE: Si en la propiedad del visor ponemos únicamente el valor de la variable no veríamos el informe, ya que se tiene que añadir el prefijo “ data:application/pdf;base64,” para que interprete correctamente el contenido en base64. Además, tenemos que eliminar cualquier salto de línea que pueda existir. El salto de línea está representado por el carácter 10, y podemos utilizar la función para eliminarlos.

Descargar el informe utilizando Power Automate

El visor de PDF integrado en Power Apps no permite descargar el documento, por lo que tendremos que recurrir a otra solución para poder incorporar esta funcionalidad a nuestra aplicación. Una posible solución a este escenario consiste en crear un documento en Sharepoint o OneDrive, y obtener el link que nos permitirá abrir o descargar el documento desde la aplicación. Todas estas acciones las podemos llevar a cabo utilizando un flujo de Power Automate.

Como se puede observar en la imagen anterior, el flujo está formado por 4 pasos:

  1. El flujo se inicia desde Power Apps.
  2. Se crea un fichero en OneDrive utilizando dos parámetros que se envían desde la aplicación: el nombre y el contenido del fichero, en base64.
  3. Con el ID del fichero creado en el paso 2, obtenemos un link para compartir el fichero.
  4. Devolvemos el link a la aplicación, utilizando el campo FileLink

Una vez creado el flujo, ya podemos llamarlo desde Power Apps, a través de la propiedad del siguiente botón:

Por parámetro, indicamos el nombre del fichero y el contenido del mismo, que no es otro que el almacenado en la variable . En este caso, no será necesario añadir el prefijo ni eliminar los saltos de línea. Guardamos el resultado (el link) en la variable .

Una vez que ya tenemos el link en Power Apps, simplemente nos queda utilizar la función para abrir el enlace en una nueva pestaña:

Desde esta nueva pestaña, ya podemos abrir, imprimir o descargar el informe:

Además, también podemos ir a OneDrive y acceder al informe directamente, sin necesidad de utilizar la app:

Con esto llegamos al final del artículo, que espero os sirva de ayuda, entre otras cosas, para trabajar con el formato base64 en Power Apps y Power Automate.

Follow the Power {Platform}, por Miquel Vidal

Blog sobre las BizApps de Microsoft, especialmente Power Platform

Follow the Power {Platform}, por Miquel Vidal

Blog gestionado por Miquel Vidal sobre las BizApps de Microsoft, especialmente Power Platform

Miquel Vidal Morales

Written by

Technical arquitect | MCT | Power Platform | Dynamics AX/365FO | Microsoft 365

Follow the Power {Platform}, por Miquel Vidal

Blog gestionado por Miquel Vidal sobre las BizApps de Microsoft, especialmente Power Platform