web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

No record found.

Community site session details

Community site session details

Session Id :
Finance | Project Operations, Human Resources, ...
Unanswered

Print management in x++

(0) ShareShare
ReportReport
Posted on by 351

Hi all,

How to add the newly developed report in print management.

I had added to report in print management when the report is running sending the error
 FormletterReport::Construct() incorrectly called.
i did the debug in controller class 349th throwing the error.
3566.image-_2800_5_2900_.png
 Code:
[ExtensionOf(classStr(PrintMgmtReportFormatPopulator))]
public final class PrintMgmtReportFormatPopulatorAppSuite_custom_Extension
{
    #ISOCountryRegionCodes
    #PrintMgmtSetup

    protected void addDocuments()
    {
        // Purchasing documents
        this.customAddSalesDocuments();
        this.customAddSODDocuments();
        this.customAddRemittanceDocuments();

        next addDocuments();
    }

    ///
    /// Adds purchase records to the PrintMgmtReportFormat table.
    ///
    protected void customAddSalesDocuments()
    {
        this.addOther(PrintMgmtDocumentType::GridTelSalesOrderInvoice, ssrsReportStr(GridcoSalesInvoice, Report), ssrsReportStr(GridcoSalesInvoice, Report), #NoCountryRegionId);
    }

    protected void customAddSODDocuments()
    {
        this.addOther(PrintMgmtDocumentType::SODSalesOrderInvoice, ssrsReportStr(GridcoSODInvoice, Report), ssrsReportStr(GridcoSODInvoice, Report), #NoCountryRegionId);
    }

    protected void customAddRemittanceDocuments()
    {
        this.addOther(PrintMgmtDocumentType::GDCRemittanceAdvice, ssrsReportStr(GDCRemittaceAdviceReport, Report), ssrsReportStr(GDCRemittaceAdviceReport, Report), #NoCountryRegionId);
    }

}

888888888888888888888888888888888888888888888888888888888888

[ExtensionOf(classStr(PrintMgmtNode_VendTable))]
public final class PrintMgmtNode_VendTable_Extension
{
  
    public List getDocumentTypes()
    {
        List ret = next getDocumentTypes();

        ret.addEnd(PrintMgmtDocumentType::GDCRemittanceAdvice);

        return ret;
    }

}
**********************************************************************************************

[ExtensionOf(classStr(PrintMgmtNode_sales))]
public final class PrintMgmtNode_Sales_Extension
{
   

  

    public List getDocumentTypes()
    {
        List ret = next getDocumentTypes();

        ret.addEnd(PrintMgmtDocumentType::GridTelSalesOrderInvoice);
        ret.addEnd(PrintMgmtDocumentType::SODSalesOrderInvoice);

        return ret;
    }

}
**************************************************************


[ExtensionOf(classStr(PrintMgmtNode_PurchTable))]
public final class PrintMgmtNode_PurchTable_Extension
{
  
    public List getDocumentTypes()
    {
        List ret = next getDocumentTypes();

        ret.addEnd(PrintMgmtDocumentType::GDCRemittanceAdvice);

        return ret;
    }

}

**************************************


[ExtensionOf(classStr(PrintMgmtNode_Purch))]
public final class PrintMgmtNode_Purch_Extension
{
  
    public List getDocumentTypes()
    {
        List ret = next getDocumentTypes();

        ret.addEnd(PrintMgmtDocumentType::GDCRemittanceAdvice);

        return ret;
    }

}

******************************************************


[ExtensionOf(classStr(PrintMgmtDelegatesHandler))]
final class PrintMgmtDelegatesHandler_Extension
{
    protected static PrintMgmtPrintDestinationPartyType getPartyType(PrintMgmtDocumentType _docType, Common _jour)
    {
        PrintMgmtPrintDestinationPartyType PrintMgmtPrintDestinationPartyType = next getpartytype(_docType,_jour);

        if(_docType == PrintMgmtDocumentType::GridTelSalesOrderInvoice || _docType == PrintMgmtDocumentType::SODSalesOrderInvoice)
        {
            return PrintMgmtPrintDestinationPartyType::Customer;
        }
        if(_docType == PrintMgmtDocumentType::GDCRemittanceAdvice)
        {
            return PrintMgmtPrintDestinationPartyType::Vendor;
        }
        return PrintMgmtPrintDestinationPartyType;
    }

}
****************************************************************************************

[ExtensionOf(classStr(PrintMgmtDelegatesHandler))]
final class PrintMgmtDelegatesHandler_Extension
{
    protected static PrintMgmtPrintDestinationPartyType getPartyType(PrintMgmtDocumentType _docType, Common _jour)
    {
        PrintMgmtPrintDestinationPartyType PrintMgmtPrintDestinationPartyType = next getpartytype(_docType,_jour);

        if(_docType == PrintMgmtDocumentType::GridTelSalesOrderInvoice || _docType == PrintMgmtDocumentType::SODSalesOrderInvoice)
        {
            return PrintMgmtPrintDestinationPartyType::Customer;
        }
        if(_docType == PrintMgmtDocumentType::GDCRemittanceAdvice)
        {
            return PrintMgmtPrintDestinationPartyType::Vendor;
        }
        return PrintMgmtPrintDestinationPartyType;
    }

}
*******************************************
class GDCRemittanceAdviceController   extends  SrsPrintMgmtFormLetterController //SrsReportRunController
{
    LedgerJournalTable  ledgerJournalTable;
    GDCRemittanceAdviceContract contract;
    SRSPrintDestinationSettings destnationSettings;
    UsePrintMgmt                advSettlPaymentUsePrintMgmt;
    protected void prePromptModifyContract()
    {
        ledgerJournalTable = this.parmArgs().record();
        contract = this.parmReportContract().parmRdpContract() as GDCRemittanceAdviceContract;
        contract.parmRecId(ledgerJournalTable.RecId);

        
        super();
    }

    public void setRange(Args _args, Query _query)
    {
        QueryBuildDataSource qbds;
        QueryBuildRange qbr;
        if (_args && _args.dataset())
        {
            switch(_args.dataset())
            {
                case tableNum(LedgerJournalTable):
                    ledgerJournalTable = _args.record();
                    break;
                

            }
        }
        qbds = _query.dataSourceTable(tableNum(LedgerJournalTable));
        qbds.clearRanges();
        qbr = qbds.addRange(fieldName2id(tableNum(LedgerJournalTable),fieldStr(LedgerJournalTable, RecId)));
        if (!qbr)
        {
            qbr = qbds.addRange(fieldNum(LedgerJournalTable, RecId));
        }
        if(ledgerJournalTable)
        {
            qbr.value(any2Str(ledgerJournalTable.RecId));
        }
    }

    public boolean showQueryValues(str parameterName)
    {
        return true;
    }

    public static GDCRemittanceAdviceController construct(Args _args)
    {
        GDCRemittanceAdviceController controller = new GDCRemittanceAdviceController();
        controller.parmArgs(_args);
        return controller;
    }

    public str reportname()
    {
        str reportnamerun =  "GDCRemittaceAdviceReport.Report";
        return reportnamerun;
    }

    public static void main(Args _args)
    {
        GDCRemittanceAdviceController controller = new GDCRemittanceAdviceController();
        str reportnamerun = controller.reportname();
        controller.parmReportName(PrintMgmtDocType::construct(PrintMgmtDocumentType::GDCRemittanceAdvice).getDefaultReportFormat());
      //  controller.parmReportName(reportnamerun);
        controller.parmArgs(_args);
        controller.setRange(_args, controller.parmReportContract().parmQueryContracts().lookup(controller.getFirstQueryContractKey()));
        controller.parmShowDialog(true);
        controller.startOperation();
    }

    public void getFromDialog()
    {
        SrsReportDataContract   dataContract = this.parmReportContract();

        destnationSettings = dataContract.parmPrintSettings();

        super();
    }

    [Hookable(false)]
    public final boolean isRetryable()
    {
        return false;
    }

    public void outputReport()
    {
        //contract.parmPrintType(
        //    formLetterReport.getCurrentPrintSetting().parmType() == PrintMgmtDocInstanceType::Copy ? "@SYS108914" : "@SYS108913");

        super();
    }

    //public UsePrintMgmt parmUsePrintMgmt(UsePrintMgmt _advSettlPaymentUsePrintMgmt = advSettlPaymentUsePrintMgmt)
    //{
    //    GDCRemittanceAdviceContract contractlocal;
    //    SrsReportDataContract       dataContract = this.parmReportContract();

    //    SalesInvoiceContractLocal = dataContract.parmRdpContract();

    //    //if (_advSettlPaymentUsePrintMgmt == SalesInvoiceContractLocal.parmUsePrintManagement())
    //    //{
    //    //    advSettlPaymentUsePrintMgmt = _advSettlPaymentUsePrintMgmt;
    //    //}
    //    ////If the check box on the dialog is off then run "current print destination"
    //    //else
    //    //{
    //    //    advSettlPaymentUsePrintMgmt = SalesInvoiceContractLocal.parmUsePrintManagement();
    //    //}

    //    return advSettlPaymentUsePrintMgmt;
    //}

    protected void initFormLetterReport()
    {
        formLetterReport = FormLetterReport::construct(PrintMgmtDocumentType::GDCRemittanceAdvice);
        formLetterReport.parmPrintType(PrintCopyOriginal::OriginalPrint);
        formLetterReport.parmReportRun().parmCheckScreenOutput(true);

       contract = this.parmReportContract().parmRdpContract() as GDCRemittanceAdviceContract;

        super();
    }

    protected void runPrintMgmt()
    {
        QueryRun queryRun = new QueryRun(this.getFirstQuery());
        
        formLetterReport.parmDefaultCopyPrintJobSettings(this.getReportContract().parmPrintSettings());
        formLetterReport.parmDefaultOriginalPrintJobSettings(this.getReportContract().parmPrintSettings());

        formLetterReport.parmUsePrintMgmtDestinations(contract.parmUsePrintManagement());
        boolean isEncounteredException = false;
        while (queryRun.next() && !this.parmCancelRun())
        {
            try
            {

                ledgerJournalTable = this.parmArgs().record();

                SalesTable salestable ;//= salestable::find(CustInvoiceJour.salesid);

                formLetterReport.loadPrintSettings(ledgerJournalTable, salestable,ledgerJournalTable.LanguageId);

                

                if (formLetterReport.moveNextPrintSetting())
                {
                    PrintMgmtPrintSettingDetail printSettingDetail = formLetterReport.getCurrentPrintSetting();
                    this.parmReportName(ssrsReportStr(GDCRemittaceAdviceReport, report));
                    printSettingDetail.parmReportFormatName(this.parmReportName());
                    formLetterReport.parmReportRun().loadSettingDetail(printSettingDetail);
                }

                contract.parmRecId(ledgerJournalTable.RecId);

                ///  this.showJournalPrinterInfoLog(CustInvoiceJour, CustInvoiceJour.JournalPrinted);

                this.outputReports();

                //DocumentAttachment documentAttachment = DocumentAttachment::construct(PrintMgmtDocumentType::GridTelSalesOrderInvoice);
                //documentAttachment.parmJournal(CustInvoiceJour);
                //documentAttachment.parmInnerReportDataContract(reportContract);
                //documentAttachment.parmPrintCopyOriginal(formLetterReport.parmPrintType());
                //// documentAttachment.parmERContract(erDocumentAttachmentContract);
                //documentAttachment.run();
            }
            catch (Exception::Error)
            {
                isEncounteredException = true;
                //error(strFmt("@AccountsReceivable:CustCollectionNotePrintError", (queryRun.get(tableNum(CustCollectionLetterJour)) as CustCollectionLetterJour).CollectionLetterNum));
            }
        }
        if (isEncounteredException)
        {
            //This error has been thrown just to fail the batch after processing all the collection letter notes and
            //later on this error message is overwritten by the framework generic message.
            throw Error('');
        }
       
    }

}
*************************************************************
[PrintMgmtDocumentTypeFactoryAttribute(PrintMgmtDocumentType::GDCRemittanceAdvice)]
class CustomRemittanceReport_PromptLetter // extends FormLetter
{
    ///
    /// Returns the default printer settings for the specified PrintSetupOriginalCopy enumeration value.
    ///
    ///
    /// The PrintSetupOriginalCopy enumeration value that specifies whether the Original
    /// or Copy destinations should be retrieved.
    ///
    ///
    /// The default printer settings for the specified PrintSetupOriginalCopy enumeration value.
    ///
    ///
    /// The general pattern for implementing this method is to use the printer destinations from the appropriate
    /// FormLetter class.  These printer destinations will be used if no Print Management destinations are
    /// found or used.
    ///
    protected container getDefaultPrintJobSettings(PrintSetupOriginalCopy _printCopyOriginal)
    {
        if (_printCopyOriginal == PrintSetupOriginalCopy::Original)
        {
            return salesFormLetter::getPrinterSettingsFormletter(DocumentStatus::None,PrintSetupOriginalCopy::Original);
        }
        else
        {
            return salesFormLetter::getPrinterSettingsFormletter(DocumentStatus::None,PrintSetupOriginalCopy::Copy);
        }
    }

    ///
    /// Returns the PrintMgmtDocumentType enumeration value that specifies what document this FormLetterReport class controls.
    ///
    ///
    /// The PrintMgmtDocumentType enumeration value that specifies what document this FormLetterReport class controls.
    ///
    ///
    /// This value is used to retrieve the appropriate Print Management settings for the report.
    ///
    public PrintMgmtDocumentType getPrintMgmtDocumentType()
    {
        return PrintMgmtDocumentType::GDCRemittanceAdvice;
    }

    ///
    /// Returns the PrintMgmtHierarchyType enumeration value that specifies what hierarchy this FormLetterReport class uses.
    ///
    ///
    /// The PrintMgmtHierarchyType enumeration value that specifies what hierarchy this FormLetterReport class uses.
    ///
    ///
    /// This value is used to retrieve the appropriate Print Management settings for the report.
    ///
    protected PrintMgmtHierarchyType getPrintMgmtHierarchyType()
    {
        return PrintMgmtHierarchyType::Purch;
    }

    ///
    /// Returns the PrintMgmtNodeType enumeration value that specifies what node this FormLetterReport class uses.
    ///
    ///
    /// The PrintMgmtNodeType enumeration value that specifies what node this FormLetterReport class uses.
    ///
    ///
    /// This value is used to retrieve the appropriate Print Management settings for the report.
    ///
    protected PrintMgmtNodeType getPrintMgmtNodeType()
    {
        return PrintMgmtNodeType::PurchTable;
    }

}
class GDCRemittanceAdviceContract
{
    boolean usePrintManagement;
    RecId   RecId;
    ParmId  ParmId;



    [DataMemberAttribute(identifierStr(boolean)),
         SysOperationLabelAttribute(literalStr("@SYS93922"))]
    public boolean parmUsePrintManagement(boolean _usePrintManagement = usePrintManagement)
    {
        usePrintManagement = _usePrintManagement;
        return usePrintManagement;
    }

    [DataMemberAttribute("RecId")]
    public RecId parmRecId(RecId _RecId = RecId)
    {
        ;

        RecId = _RecId;
        return RecId;
    }

}
What is the issue ? how can i solve this.
Thanks 
I have the same question (0)
  • waytod365 Profile Picture
    351 on at

    Still I'm getting error, what could be the causes and resolutions ?

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Responsible AI policies

As AI tools become more common, we’re introducing a Responsible AI Use…

Neeraj Kumar – Community Spotlight

We are honored to recognize Neeraj Kumar as our Community Spotlight honoree for…

Leaderboard > Finance | Project Operations, Human Resources, AX, GP, SL

#1
Martin Dráb Profile Picture

Martin Dráb 611 Most Valuable Professional

#2
André Arnaud de Calavon Profile Picture

André Arnaud de Cal... 529 Super User 2025 Season 2

#3
Sohaib Cheema Profile Picture

Sohaib Cheema 285 User Group Leader

Last 30 days Overall leaderboard

Product updates

Dynamics 365 release plans