Monday, 8 July 2024

Call Electronic report (ER) using button click in D365 FO X++

1.Create a New class to write the logic For ER report


using Microsoft.Dynamics365.LocalizationFramework;

/// <summary>

/// The electronic reporting service class for listing report

/// </summary>

public final class HDTInvTransShipErReportService

{

    private const str DefaultExportedFileName = 'Transfer order shipment report';   


    internal void generateReportByGER(HDTInvTransShipErReportContract _contract)

    {

        ERFormatMappingId formatMappingId;


        formatMappingId = _contract.parmFormatMapping();


        try

        {

            ERModelDefinitionInputParametersAction modelDefinitionInputParametersAction = new ERModelDefinitionInputParametersAction();


            modelDefinitionInputParametersAction.addParameter("model/VoucherIDInput", _contract.parmVoucherId());


            // Call ER to generate the report.

            ERObjectsFactory::createFormatMappingRunByFormatMappingId(formatMappingId, DefaultExportedFileName)

                .withParameter(modelDefinitionInputParametersAction)

                .withFileDestination(_contract.getFileDestination())

                .run();

        }

        catch

        {

            // An error occurred while exporting data.

            error("@SYP4861341");

        }

    }


}


2.Add New class to pass paramters in contract class from Button click 


/// <summary>

/// Data contract class for <c>Listing</c> GER report.

/// </summary>

[DataContractAttribute]

internal final class HDTInvTransShipErReportContract extends ERFormatMappingRunBaseContract implements SysOperationValidatable

{

    InventTransferVoucherId voucherID;

    ERFormatMappingId formatMapping;

    str query;




    [

        DataMemberAttribute('FormatMapping'),

        SysOperationLabelAttribute(literalstr("@ElectronicReporting:FormatMapping")),

        SysOperationHelpTextAttribute(literalstr("@ElectronicReporting:FormatMapping"))

    ]

    public ERFormatMappingId parmFormatMapping(ERFormatMappingId _formatMapping = formatMapping)

    {

        formatMapping = _formatMapping;

        return formatMapping;

    }



    [

        DataMemberAttribute('VoucherIDInput'),

        SysOperationLabelAttribute(literalstr("VoucherIDInput")),

        SysOperationHelpTextAttribute(literalstr("VoucherIDInput"))

    ]

    public InventTransferVoucherId parmVoucherId(InventTransferVoucherId _voucherID = voucherID)

    {

        voucherID = _voucherID;


        return voucherID;

    }



    /// <summary>

    ///    Validates the report parameters.

    /// </summary>

    /// <returns>

    ///    true if no errors; otherwise, false.

    /// </returns>

    [Hookable(false)]

    public final boolean validate()

    {

        boolean isValid = true;


        if (!formatMapping)

        {

            isValid = checkFailed(strFmt("@SYS26332", new SysDictType(extendedTypeNum(ERFormatMappingId)).label()));

        }


        return isValid;

    }

}


3. Trigger the logic from button 


/// <summary>

/// Event handler class of Transfer order history form

/// </summary>

public class HDTInventTransferJour_F_Eventhandler

{

    /// <summary>

    /// Clicked event handler of Print managemenr ER button

    /// </summary>

    /// <param name="sender">sender</param>

    /// <param name="e">e</param>

    [FormControlEventHandler(formControlStr(InventTransferJour, HDTPrintMagmtER), FormControlEventType::Clicked)]

    public static void HDTPrintMagmtER_OnClicked(FormControl sender, FormControlEventArgs e)

    {

        ERFormatMappingTable                formatMappingTable;

        FormRun                             formRun                 = sender.formRun();

        FormDataSource                      inventTransferJour_ds   = formRun.dataSource(formDataSourceStr(InventTransferJour, InventTransferJour));

        InventTransferJour                  inventTransferJourLoc   = inventTransferJour_ds.cursor();

        HDTInvTransShipErReportContract    erReportContract        = new HDTInvTransShipErReportContract();

        HDTInvTransShipErReportService     erReportService         = new HDTInvTransShipErReportService();

        select firstonly RecId from formatMappingTable

            where formatMappingTable.Name == "Elders Transfer Order Excel";

        ERFormatMappingId                   formatMappingId         = formatMappingTable.RecId;      


        ErReportContract.parmFormatMapping(formatMappingId);

        ErReportContract.parmVoucherId(inventTransferJourLoc.VoucherId);

        erReportService.generateReportByGER(erReportContract);

    }

}

 

No comments:

Post a Comment

workflow business event configuration with power automate flow in d365 FO

  https://www.linkedin.com/pulse/purchase-order-approvals-d365fo-power-automate-ahmed-ali-el-bardisy-jyssf/