2

我目前正在使用 AX 2009 SP1 Rollup 7。当我的方法运行时,我正在尝试创建一个 PDF,将 CustQuotationJour 表中的报价 ID 发送到 SalesQuotation 报告。

该方法工作正常,但报告被发送到打印预览屏幕而不是创建 PDF。我假设它的 SalesQuotation 报告重置我的打印设置恢复到屏幕。我的猜测是在 fetch 方法中,但我不应该修改它,对吧?

是否还有其他我可能遗漏的打印设置?提前致谢

ReportRun                   salesQuotationReport;
Args                        args = new Args();
PrintJobSettings            printJobSettings;
CustQuotationJour           custQuotationJour;
;

custQuotationJour = CustQuotationJour::findFromSalesQuotationQuotation(_quotationId);


args.name(reportStr(SalesQuotation));
args.record(custQuotationJour);
salesQuotationReport = new ReportRun(args);
salesQuotationReport.init();

printJobSettings = salesQuotationReport.printJobSettings();
printJobSettings.setTarget(PrintMedium::File);
printJobSettings.preferredTarget(PrintMedium::File);
printJobSettings.format(PrintFormat::PDF);
printJobSettings.preferredFileFormat(PrintFormat::PDF);
printJobSettings.fileName(_path);

salesQuotationReport.unpackPrintJobSettings(printJobSettings.packPrintJobSettings());
salesQuotationReport.run();
4

2 回答 2

4

所以这是我的评论转换为答案......

添加以下行;

printSettings.lockDestinationProperties(true);

这将防止报告中的任何代码覆盖您的 printSettings。

于 2013-06-05T21:38:40.193 回答
0

我在 AX 2012 上做了类似的销售确认,除了这个工作:)

该方法在 CustComfirmJour 表上,因此this指的是已确认的记录。

FileName saveAs(FileName fileName)
{
    SalesConfirmController      salesConfirmController;
    SalesConfirmContract        salesConfirmContract;
    SRSPrintDestinationSettings printSettings;
    Args                        args = new Args();
    ;
    args.record(this);
    salesConfirmController = new SalesConfirmController();
    salesConfirmController.parmReportName(ssrsReportStr(SalesConfirm,Report));
    salesConfirmController.parmArgs(args);
    salesConfirmController.parmReportContract().parmRdlContract().parmLanguageId(this.LanguageId);
    salesConfirmContract = salesConfirmController.parmReportContract().parmRdpContract();
    salesConfirmContract.parmRecordId(this.RecId);
    printSettings = salesConfirmController.parmReportContract().parmPrintSettings();
    printSettings.printMediumType(SRSPrintMediumType::File);
    printSettings.overwriteFile(true);
    printSettings.fileFormat(SRSReportFileFormat::PDF);
    fileName = printSettings.fileName(fileName);
    salesConfirmController.runReport();
    return fileName;
}

这在 AX 2009 中不起作用。

在这里,您在Axaptapedia中记录的方法应该有效,但不能!

FileName saveAs(FileName fileName)
{
    ReportRun                   report;
    PrintJobSettings            printSettings;
    Args                        args = new Args(reportStr(SalesConfirm));
    ;
    args.record(this);
    report = classfactory.reportRunClass(args);
    report.init();
    printSettings = report.printJobSettings();
    printSettings.setTarget(PrintMedium::File);
    printSettings.preferredTarget(PrintMedium::File);
    printSettings.format(PrintFormat::PDF);
    printSettings.preferredFileFormat(PrintFormat::PDF);
    printSettings.fileName(fileName);
    printSettings.lockDestinationProperties(true); //Did the trick!?!
    report.unpackPrintJobSettings(printSettings.packPrintJobSettings());
    report.run();
    return fileName;
}

跑步:

static void SalesConfirmSaveAs(Args _args)
{
    CustConfirmJour jour;
    select firstonly jour;
    jour.saveAs(@"V:\Temp\confirm.pdf");
}

输出进入屏幕!

也许报告本身搞砸了?

更新:已添加printSettings.lockDestinationProperties(true);但尚未测试。

于 2013-06-03T11:22:57.727 回答