Я интегрирую Crystal Reports с Java и смог экспортировать отчет в PDF, когда у меня нет вложенных отчетов.
Однако при включении вложенного отчета с параметрами возникает ошибка.
Параметр подотчета:
reportClientDocument.getDataDefController().getParameterFieldController().setCurrentValue("TranslateLabels","Pm-@PrintLanguage",newString("ENG"));
Ошибка:
Причина: com.crystaldecisions.reports.common.MissingParameterValuesException: в некоторых параметрах отсутствуют значения в com. crystaldecisions.reports.dataengine.DataSourceManagerCoordinator.a (SourceFile: 592) по адресу com.crystaldecisions.reports.dataengine.DataSourceManager.if (SourceFile: 1085) по адресу com.crystaldecisions.reports.dataengine.DataSourceManager.a (источник: comFile).crystaldecisions.reports.dataengine.DataProcessor2.a (Исходный файл: 734)
public static void printInvoice(int invoiceNum)throwsException{
Connection c =null;
PreparedStatement ps;
PreparedStatement pssub;
ResultSet rs =null;
ResultSet rssub =null;
String subreportName ="TranslateLabels";
String mainReportParamName ="PrintLanguage";
String mainReportParamValue ="ENG";
try{
c =DBConnectionPools.getConn();StringBuffer sb =newStringBuffer();
sb.append(" SELECT * FROM Invoice inv ");
sb.append(" LEFT JOIN Language la ON inv.PrintLang = la.PrintLang
");
sb.append(" WHERE InvoiceNum = ? ");
ps = c.prepareStatement(sb.toString());
ps.setInt(1, invoiceNum);
rs = ps.executeQuery();
//Main Report
ReportClientDocument reportClientDocument =newReportClientDocument();
reportClientDocument.open("H:Invoice.rpt",0);
reportClientDocument.getDatabaseController().setDataSource(rs);
reportClientDocument.getDataDefController().getParameterFieldController().setCurrentValue("", mainReportParamName, mainReportParamValue);
//Sub Report
pssub = c.prepareStatement("SELECT * from Language WHERE PrintLang = 'ENG' ");
rssub = pssub.executeQuery();
reportClientDocument.getSubreportController().setDataSource(subreportName, rssub);
reportClientDocument.getDataDefController().getParameterFieldController().setCurrentValue(subreportName,"Pm-@PrintLanguage","ENG");
InputStream in =(InputStream) reportClientDocument.getPrintOutputController().export(ReportExportFormat.PDF);
OutputStream out =newFileOutputStream("C:invoice.pdf");
byte[] buf =newbyte[1024];int len;
while((len = in.read(buf))>0){
out.write(buf,0, len);
}
in.close();
out.close();}catch(Exception e){
e.printStackTrace();}finally{if(null!= c){
c.close();}}}