top of page

ER en memoria!

En el siguiente enlace podéis consultar la documentación oficial de Microsoft sobre como desarrollar un informe usando la funcionalidad de Informes Electrónicos:



Pero, ¿y si queremos enviar este informe a algún servicio externo? ¿Podemos obtener el contenido del informe en una variable?

La respuesta es SÍ!!

Os dejo un fragmento de código que lanza un informe GER obteniendo el contenido en una variable ByteArray (byteER):



using Microsoft.Dynamics365.LocalizationFramework;
/// <summary>
/// The electronic reporting service class for a custom ER report
/// </summary>
class CustomErReportService extends SysOperationServiceBase
{
    public const str ERModelDataSourceName = 'model';
    public const str DefaultExportedFileName = 'Custom report';
    public const str ParametersDataSourceName = 'RunTimeParameters';

    /// <summary>
    /// Generates report by using Electronic reporting framework
    /// </summary>
    /// <param name = "_contract">The Custom report contract</param>
    public void generateReportByGER(CustomErReportContract _contract)
    {
        ERFormatMappingId formatMappingId;
        CustomErReportDP  dataProvider;
        dataProvider = CustomErReportDP::construct();
        formatMappingId = _contract.parmFormatMapping();
        if (formatMappingId)
        {
            try
            {
                ERIModelDefinitionParamsAction parameters = new             ERModelDefinitionParamsUIActionComposite()
                    .add(new ERModelDefinitionObjectParameterAction(ERModelDataSourceName, ParametersDataSourceName, _contract, true));

                // Call ER to generate the report.
                ERIFormatMappingRun formatMappingRun = ERObjectsFactory::createFormatMappingRunByFormatMappingId(formatMappingId, DefaultExportedFileName);
                runner.parmShowPromptDialog(false);
                runner.withShowDestinationTab(false);

                ERFileDestinationMemory fileDestinationMemory = new ERFileDestinationMemory();
                runner.withFileDestination(fileDestinationMemory);

                str stream = runner.withParameter(parameters).run();
                System.Byte[] byteER = fileDestinationMemory.GetByteArray();
                }
            }
            catch
            {
                // An error occurred while exporting data.
                error("@SYP4861341");
            }
        }
        else
        {
            // There is no data available.
            info("@SYS300117");
        }
    }
}


bottom of page