Override the Print Management Settings Report without modify the settings using code in D365FO

In My case, I need to invoke custom sales proforma report without modifying the standard setup.

So i have done my changes in SalesInvoiceController as per the requirement.

[ExtensionOf(classStr(SalesInvoiceController))]
final class SalesInvoiceController_Extension
{
public SRSCatalogItemName parmReportName(SRSCatalogItemName _reportNamee)
{
Args reportArgs = this.parmArgs();
SRSCatalogItemName reportName = next parmReportName(_reportNamee);
if (reportArgs.menuItemName() == menuItemOutputStr(SalesInvoice))
{ reportName = ssrsReportStr(ASalesInvoice, HSReport);
}
return reportName;
}
public PrintMgmtPrintSettingDetail LoadPrintJobSettings()
{
PrintMgmtPrintSettingDetail printSettingDetail = new PrintMgmtPrintSettingDetail();
PrintMgmtReportFormat printMgmtReportFormat;

    printSettingDetail.parmReportFormatName(ssrsReportStr(ASalesInvoice, HSReport)); 
    printSettingDetail.parmType(PrintMgmtDocInstanceType::Original); 
    printSettingDetail.parmInstanceName(enum2str(PrintMgmtDocInstanceType::Original)); 
    printSettingDetail.parmNumberOfCopies(1); 
    printSettingDetail.parmSSRS(PrintMgmtSSRS::SSRS); 

    printSettingDetail.parmPrintJobSettings(formLetterReport.parmReportRun().parmDefaultOriginalPrintJobSettings()); printSettingDetail.parmPrintJobSettings().printMediumType(SRSPrintMediumType::Screen); return printSettingDetail; 
} 

protected PrintMgmtPrintSettingDetail printSettingDetail()
{
    Args reportArgs = this.parmArgs();
    PrintMgmtPrintSettingDetail settingDetail = next printSettingDetail(); 

    if (reportArgs.menuItemName() == menuItemOutputStr(SalesInvoice)) 
    { 
        settingDetail = this.LoadPrintJobSettings(); 
    } 
    return settingDetail; 
}

}

Adding custom check box in SalesEditLines form and get the value in SalesFormLetter Customizations in D365FO

Requirement: We need to call the print management configured report with some modifications,
by adding another checkbox control in SalesEditLines form.

Whenever they clicking the standard checkbox, standard print management report needs to open
and when clicking the custom check box, our custom report needs to open.

  1. SalesInvoiceController
    [ExtensionOf(classStr(SalesInvoiceController))]
    final class SalesInvoiceController_Extension
    {
    public SRSCatalogItemName parmReportName(SRSCatalogItemName _reportNamee)
    {
    Args reportArgs = this.parmArgs();
    SRSCatalogItemName reportName = next parmReportName(_reportNamee); if (reportArgs.menuItemName() == menuItemOutputStr(SalesInvoice)) { reportName = ssrsReportStr(ASalesInvoice, HSReport); } return reportName; } public PrintMgmtPrintSettingDetail LoadPrintJobSettings()
    {
    PrintMgmtPrintSettingDetail printSettingDetail = new PrintMgmtPrintSettingDetail();
    PrintMgmtReportFormat printMgmtReportFormat; printSettingDetail.parmReportFormatName(ssrsReportStr(ASalesInvoice, HSReport)); printSettingDetail.parmType(PrintMgmtDocInstanceType::Original); printSettingDetail.parmInstanceName(enum2str(PrintMgmtDocInstanceType::Original)); printSettingDetail.parmNumberOfCopies(1); printSettingDetail.parmSSRS(PrintMgmtSSRS::SSRS); printSettingDetail.parmPrintJobSettings(formLetterReport.parmReportRun().parmDefaultOriginalPrintJobSettings()); printSettingDetail.parmPrintJobSettings().printMediumType(SRSPrintMediumType::Screen); return printSettingDetail; } protected PrintMgmtPrintSettingDetail printSettingDetail()
    {
    Args reportArgs = this.parmArgs();
    PrintMgmtPrintSettingDetail settingDetail = next printSettingDetail(); if (reportArgs.menuItemName() == menuItemOutputStr(SalesInvoice)) { settingDetail = this.LoadPrintJobSettings(); } return settingDetail; }

}

  1. SalesEditLines
    [ExtensionOf(formstr(SalesEditLines))]
    final class SalesEditLinesForm_Extension
    {
    void setFieldAccess()
    {
    next setFieldAccess();
    HScusPrintFormLetter.enabled(!cusPrintFormLetter.value());
    cusPrintFormLetter.enabled(!HScusPrintFormLetter.value()); } protected void initializeSalesFormLetter()
    {
    salesFormLetter.cusPrintFormLetter(HScusPrintFormLetter.value()); next initializeSalesFormLetter(); }

}

  1. FormLetterServiceController
    [ExtensionOf(classStr(FormLetterServiceController))]
    internal final class FormLetterServiceControllerClass_Extension
    {
    boolean cusPrintFormLetter(boolean _cusPrintFormLetter = contract.parmcusPrintFormLetter())
    {
    return contract.parmcusPrintFormLetter(_cusPrintFormLetter);
    }

}

  1. FormLetterJournalPrint
    [ExtensionOf(classStr(FormletterJournalPrint))]
    final class FormletterJournalPrintClass_Extension
    {
    public NoYes cusPrintFormLetter; public NoYes parmcusPrintFormLetter(NoYes _cusPrintFormLetter = cusPrintFormLetter)
    {
    cusPrintFormLetter = _cusPrintFormLetter;
    return cusPrintFormLetter;
    } static public FormletterJournalPrint newFromFormletterContract(FormLetterContract _formLetterContract)
    {
    FormletterJournalPrint formletterJournalPrint = next newFromFormletterContract(_formLetterContract);
    var formLetterType = FormletterTypeBase::singletonFromFormletterType(_formLetterContract.getFormLetterType()); if (formLetterType) { if (formletterJournalPrint) { formletterJournalPrint.parmcusPrintFormLetter(_formLetterContract.parmcusPrintFormLetter()); } } return formletterJournalPrint; } public void printJournal(Set _journalList)
    {
    next printJournal(_journalList); if (this.parmcusPrintFormLetter()) { if (journalList.len() > 0) { this.doPrint(); } } }

}

  1. FormLetterContract
    [ExtensionOf(classStr(FormLetterContract))]
    final class FormLetterContractClass_Extension
    {
    public NoYes cusPrintFormLetter; [DataMember]
    public NoYes parmcusPrintFormLetter(NoYes _cusPrintFormLetter = cusPrintFormLetter)
    {
    cusPrintFormLetter = _cusPrintFormLetter;
    return cusPrintFormLetter;
    } public boolean isPrinting()
    {
    boolean ret = next isPrinting(); ret = this.parmcusPrintFormLetter() == NoYes::Yes || this.parmcusPrintFormLetter() == NoYes::Yes; return ret; }

}

  1. CustInvoiceJour Table
    [ExtensionOf(tableStr(CustInvoiceJour))]
    final class CustInvoiceJourTable_Extension
    {
    protected MenuFunction getSalesInvoiceMenuForPrinting(SalesInvoiceJournalPrint _journalPrint)
    {
    MenuFunction menuFunction; menuFunction = next getSalesInvoiceMenuForPrinting(_journalPrint); if (_journalPrint.parmcusPrintFormLetter()) { menuFunction = new MenuFunction(menuitemOutputStr(SalesInvoice), MenuItemType::Output); } return menuFunction; }

}