Monday, 8 July 2024

call new electronic reporting from form buttons using print management D365 FO X++

 Add Enum in  PrintMgmtDocumentType.HDTExtension

1.Add New class to set the new print type


/// <summary>

/// Extension class of BusinessDocumentUtils class

/// </summary>

[ExtensionOf(classStr(BusinessDocumentUtils))]

final static class HDT_BusinessDocumentUtils_Extension

{

    public static container SupportedBusinessDocumentPrintManagementTypesLoc;


    /// <summary>

    /// CoC of isDocumentTypeSupported method

    /// </summary>

    /// <param name = "_typeId">_typeId</param>

    /// <returns>docType</returns>

    public static boolean isDocumentTypeSupported(PrintMgmtDocumentType _typeId)

    {

        boolean docType = next isDocumentTypeSupported(_typeId);


        if (_typeId == PrintMgmtDocumentType::HDT_DeliveryNote)

            docType = true;

        return docType;

    }


}


2.Add New Class


/// <summary>

/// Class to load print management settings

/// </summary>

[PrintMgmtDocumentTypeFactoryAttribute(PrintMgmtDocumentType::HDT_DeliveryNote)]

public class HDT_InventFormLetterReport extends FormLetterReport

{

    /// <summary>

    /// To override default print job settings

    /// </summary>

    /// <param name = "_printCopyOriginal">_printCopyOriginal</param>

    /// <returns>container</returns>

    protected container getDefaultPrintJobSettings(PrintSetupOriginalCopy _printCopyOriginal)

    {

        return new SRSPrintDestinationSettings().pack();

    }


    /// <summary>

    /// to get print management document type

    /// </summary>

    /// <returns>PrintMgmtDocumentType</returns>

    public PrintMgmtDocumentType getPrintMgmtDocumentType()

    {

        return PrintMgmtDocumentType::HDT_DeliveryNote;

    }


    /// <summary>

    /// To get print management hierarchy type

    /// </summary>

    /// <returns>PrintMgmtHierarchyType</returns>

    protected PrintMgmtHierarchyType getPrintMgmtHierarchyType()

    {

        return PrintMgmtHierarchyType::Invent;

    }


    /// <summary>

    /// To get print management node type

    /// </summary>

    /// <returns>PrintMgmtNodeType</returns>

    protected PrintMgmtNodeType getPrintMgmtNodeType()

    {

        return PrintMgmtNodeType::Invent;

    }


}


3.Add New class Contract


[DataContractAttribute]

class HDT_InvTransShipContract extends SrsReportDataContract

{

    InventTransferVoucherId voucherID;

    Str                     documentTitle;


    [DataMemberAttribute('@SYS12371')]

    public InventTransferVoucherId parmVoucherId(InventTransferVoucherId _voucherID = voucherID)

    {

        voucherID = _voucherID;


        return voucherID;

    }


    [DataMemberAttribute('DocumentTitle')]

    public str parmDocumentTitle(str _documentTitle = documentTitle)

    {

        documentTitle = _documentTitle;


        return documentTitle;

    }


    public boolean validate()

    {

        boolean ret = true;


        if (!voucherID)

        {

            ret = checkFailed(strFmt("@SYS26332", new SysDictType(extendedTypeNum(InventTransferVoucherId)).label()));

        }


        return ret;

    }


}


4.Add New class Controller


class HDT_InvTransShipController extends TradeDocumentReportController implements BatchRetryable

{

    InventTransferJour      inventTransferJour;


    protected str  documentTitle()

    {

        str documentTitle =  (printCopyOriginal == PrintCopyOriginal::Copy) ? "Delivery note copy" : "Delivery note";


        return documentTitle;

    }


    protected RecId getRecordId()

    {

        return inventTransferJour.RecId;

    }


    protected void setDataContractRecord(Common _common)

    {

        inventTransferJour = args.record();

    }


    public static void main(Args _args)

    {

        SrsReportRunController      formLetterController = HDT_InvTransShipController::construct();

        HDT_InvTransShipController  controller;


        controller = formLetterController;

        controller.initArgs(_args, PrintMgmtDocType::construct(PrintMgmtDocumentType::HDT_DeliveryNote).getDefaultReportFormat());

        

        formLetterController.startOperation();

    }


    public static HDT_InvTransShipController construct()

    {

        return new HDT_InvTransShipController();

    }


    protected void initFormLetterReport()

    {

        printCopyOriginal = this.parmArgs().parmEnum();


        journalList = this.splitToRecordList();


        formLetterReport = FormLetterReport::construct(PrintMgmtDocumentType::HDT_DeliveryNote);

        formLetterReport.parmPrintType(printCopyOriginal);

        if (printCopyOriginal == PrintCopyOriginal::OriginalPrint)

        {

            formLetterReport.parmUsePrintMgmtDestinations(true);

        }

        formLetterReport.parmSSRS(PrintMgmtSSRS::NonSSRS);

        formLetterReport.parmUseUserDefinedDestinations(true);


        super();

    }


    protected RecordSortedList splitToRecordList()

    {

        RecordSortedList recordList;


        if (this.parmArgs().record())

        {

            recordList  = FormLetter::createJournalListCopy(this.parmArgs().record());

        }

        else

        {

            recordList  = this.parmArgs().object();

        }


        return recordList;

    }


    protected boolean getFirstJournal()

    {

        return journalList.first(inventTransferJour);

    }


    protected boolean getNextJournal()

    {

        return journalList.next(inventTransferJour);

    }


    protected void output()

    {

        formLetterReport.loadPrintSettings(inventTransferJour, null, currentUserLanguage());


        this.parmReportContract().parmRdlContract().parmLanguageId(currentUserLanguage());

        this.parmReportContract().parmRdlContract().parmLabelLanguageId(currentUserLanguage());


        if(inventTransferJour)

        {

            HDT_InvTransShipContract invTransShipContract = new HDT_InvTransShipContract();


            invTransShipContract.parmRdlContract(this.parmReportContract().parmRdlContract());

            invTransShipContract.parmVoucherId(inventTransferJour.VoucherId);

            invTransShipContract.parmDocumentTitle(this.documentTitle());


            this.parmReportContract(invTransShipContract);

            this.parmReportContract().parmRdpContract(invTransShipContract);

        }


        super();

    }


    protected boolean validate()

    {

        boolean ret;

    

        ret = true;

    

        return ret;

    }


}


4.Add New class for PrintMgmtDelegatesHandler


[ExtensionOf(classStr(PrintMgmtDelegatesHandler))]

final class HDT_PrintMgmtDelegatesHandler_Extension

{

    protected static PrintMgmtPrintDestinationPartyType getPartyType(PrintMgmtDocumentType _docType, Common _jour)

    {

        PrintMgmtPrintDestinationPartyType ret = next getPartyType(_docType, _jour);


        if(ret == PrintMgmtPrintDestinationPartyType::Unknown && _docType == PrintMgmtDocumentType::HDT_PurchOrderConfirmedReport)

        {

            ret = PrintMgmtPrintDestinationPartyType::Vendor;

        }   


        if(ret == PrintMgmtPrintDestinationPartyType::Unknown && _docType == PrintMgmtDocumentType::HDT_DeliveryNote)

        {

            ret = PrintMgmtPrintDestinationPartyType::Unknown;

        }

        return ret;

    }


}


5.Add New Class for HDT_PrintMgmtDocType


public static class HDT_PrintMgmtDocType_Extension

{

    [SubscribesTo(classStr(PrintMgmtDocType), delegateStr(PrintMgmtDocType, getDefaultReportFormatDelegate))]

    public static void getDefaultReportFormatDelegate(PrintMgmtDocumentType _docType, EventHandlerResult _result)

    {

        switch(_docType)

        {

            case PrintMgmtDocumentType::HDT_DeliveryNote:

                _result.result(ssrsReportStr(InventTransferShip, Report));

                break;

        }

    }


    [SubscribesTo(classstr(PrintMgmtDocType), delegatestr(PrintMgmtDocType, getPartyTypeDelegate))]

    public static void getPartyTypeDelegateHandler(PrintMgmtDocumentType _docType, Common _jour, EventHandlerResult _result)

    {

        switch (_docType)

        {

            case PrintMgmtDocumentType::HDT_DeliveryNote:

                _result.result(PrintMgmtPrintDestinationPartyType::Unknown);

                break;

        }

    }


}


6. Add New class for PrintMgmtNode


[ExtensionOf(classStr(PrintMgmtNode_Invent))]

public final class HDT_PrintMgmtNode_Invent_Extension

{

    public List getDocumentTypes()

    {

        List ret = next getDocumentTypes();


        ret.addEnd(PrintMgmtDocumentType::HDT_DeliveryNote);


        return ret;

    }


}


7.Add New Class for WHS AddPrintMgmtReportFormat


public class HDT_WHSAddPrintMgmtReportFormat

{

    /// <summary>

    /// Add new report format in print management method

    /// </summary>

    /// <param name = "_type">PrintMgmtDocumentType</param>

    /// <param name = "_name">PrintMgmtReportFormatName</param>

    /// <param name = "_description">PrintMgmtReportFormatDescription</param>

    /// <param name = "_countryRegionId">PrintMgmtReportFormatCountryRegionId</param>

    /// <param name = "_system">PrintMgmtReportFormatSystem</param>

    /// <param name = "_ssrs">PrintMgmtSSRS</param>

    public static void addPrintMgmtReportFormat(

        PrintMgmtDocumentType _type,

        PrintMgmtReportFormatName _name,

        PrintMgmtReportFormatDescription _description,

        PrintMgmtReportFormatCountryRegionId _countryRegionId,

        PrintMgmtReportFormatSystem _system = false,

        PrintMgmtSSRS _ssrs = PrintMgmtSSRS::SSRS)

    {

        PrintMgmtReportFormat printMgmtReportFormat;

 

        select firstonly printMgmtReportFormat

            where printMgmtReportFormat.DocumentType == _type

                && printMgmtReportFormat.Description == _description

                && printMgmtReportFormat.CountryRegionId == _countryRegionId;

 

        if (!printMgmtReportFormat)

        {

            // Add the new format

            printMgmtReportFormat.clear();

            printMgmtReportFormat.DocumentType = _type;

            printMgmtReportFormat.Name = _name;

            printMgmtReportFormat.Description = _description;

            printMgmtReportFormat.CountryRegionId = _countryRegionId;

            printMgmtReportFormat.System = _system;

            printMgmtReportFormat.ssrs = _ssrs;

            printMgmtReportFormat.insert();

        }

    }


}


7.Duplicated Menu items from standard added to form it will print like as standard 


Output Menu items

HDT_ERTransfer

HDT_ERTransferCopy

HDT_ERTransferOriginal


8.To call the report on click button 


[ExtensionOf(classStr(InventTransferPrintCommandShip))]

final class HDT_InventTransferPrintCommandShip_Extension

{

    public void printout()

    {

        MenuFunction    menuFunction;

        Args            args = new Args();


        next printout();


        if(this.parmInventTransferParmTable().HDT_UsePrintManagement)

        {

            InventTransferPrintDataProviderShip dataProviderShip = this.parmPrintDataProvider() as InventTransferPrintDataProviderShip;


            menuFunction = new MenuFunction(menuitemOutputStr(HDT_ERTransfer), MenuItemType::Output);

            args.record(dataProviderShip.parmInventTransferJour());

            menuFunction.run(args);

        }

    }


}


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/