Java Crystal Report SDK (подотчет с параметрами) генерирует исключение MissingParameterValuesException - PullRequest
0 голосов
/ 10 октября 2019

Я интегрирую 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();}}}

...