2013-05-30 93 views
2

我目前處於AX 2009 SP1彙總7.我試圖在我的方法運行時將CustQuotationJour表中的報價ID發送到SalesQuotation報表來創建PDF。打印銷售報價至PDF AX 2009

該方法工作正常,但報告發送到打印預覽屏幕而不是創建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(); 

回答

3

所以這裏是我的意見轉換成答案...

添加以下行;

printSettings.lockDestinationProperties(true);

這將阻止該報告中的任何代碼重寫你的printSettings。

+0

使用谷歌搜索的方法:http://ax4dev.wordpress.com/2010/07/27/writing-a-report-to-file-through-code/ –

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);但尚未測試。

+0

我對這份報告非常有信心。正在使用提取方法來適應每個AX 2009報告的打印設置。特別是,下面的代碼聲明讓我相信我提供的打印設置正在被丟棄。 salesFormLetterReport.loadPrintSettings( custQuotationJour, salesQuotationTable, custQuotationJour.LanguageId); 我認爲這是事實,但我在調試時沒有看到它。如果有辦法讓報告知道保留我的設置,我就會陷入困境。 –

+1

嘗試添加'printSettings.lockDestinationProperties(true);'這可能會阻止報告本身覆蓋打印設置 – AnthonyBlake

+0

我很欣賞你的努力,非常感謝。 @AnthonyBlake只要我補充說它工作並創建PDF文件。這絕對是我的一天。希望有一種方法可以將評論標記爲答案。 –