简体   繁体   中英

passing date parameters to crystal reports with java

I'm a newby with java and crysal reports. Since two days I try to create a crystal reports pdf with java and jsf. All works fine, but when I include the passing of parameters in the code, I get the error

 *HTTP Status 500 - com.crystaldecisions.sdk.occa.report.lib.ReportSDKLogonException: Fehler bei der Anmeldung: Fehler bei der Anmeldung für den Benutzer 'ipc'. ClientConnectionId:b09ff5cf-3e6c-4446-9a74-21464b23ded9---- Error code:-2147217393 Error code name:dbLogonFailed*

(complete mesage see below)

I use MSSQL Server 2008 Express.

Here is the Java Code:

public void openReport(String report) throws IOException, ReportSDKException, ParseException {
            System.out.println("Aufruf Open Report: " + report);
            int Project_Nr = ProjektCriteriaBean.getInstance().getSelectedProjekt().getProjekt_Nr();
            java.util.Date StartDate = ProjektCriteriaBean.getInstance().getStartDate();
            java.util.Date EndDate = ProjektCriteriaBean.getInstance().getEndDate();


            FacesContext facesContext = FacesContext.getCurrentInstance();
            ExternalContext externalContext = facesContext.getExternalContext();
            HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
                BufferedInputStream input = null;
            BufferedOutputStream output = null;
            ReportClientDocument reportClientDoc = new ReportClientDocument();

            reportClientDoc.open("/reports/" + report, OpenReportOptions._retrieveNoReportDefinition);
            ParameterFieldController paramController = reportClientDoc.getDataDefController().getParameterFieldController();

            paramController.setCurrentValue("","Projekt",Project_Nr);
            paramController.setCurrentValue("","StartDate", StartDate);
            paramController.setCurrentValue("","EndDate",EndDate);


            try {

                input = new BufferedInputStream( (ByteArrayInputStream) reportClientDoc.getPrintOutputController().export(ReportExportFormat.PDF));
                // Init servlet response.
                response.reset();
                response.setHeader("Content-Type", "application/pdf");

                output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
                // Write file contents to response.
                byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
                int length;
                while ((length = input.read(buffer)) > 0) {
                    output.write(buffer, 0, length);
                }
                // Finalize task.
                output.flush();
            } finally {
                // Gently close streams.
                close(output);
                close(input);
            }
            // Inform JSF that it doesn't need to handle response.
            // This is very important, otherwise you will get the following exception in the logs:
            // java.lang.IllegalStateException: Cannot forward after response has been committed.
            facesContext.responseComplete();
        }

It seems that that here is a problem withe the date format, passed to the parameter StartDate and EndDate. I use this parameter for the following filter in crystal reports:

Datensatzfilter
{View_ProjectOverview.Auftragseingang} >= {?StartDate} and
 {View_ProjectOverview.Auftragseingang} <= {?EndDate} and
 {View_ProjectOverview.Status} = 1  

When I delete this filter, all works fine. When I use a sql-user without password, ll works fine, too. When I use paramters without date format, all works fine, too.

Please help me, I become desperate…

Thank you so much for your help.

Here the complete error message from Java:

 Feb 12, 2014 12:58:25 AM com.sun.faces.lifecycle.InvokeApplicationPhase execute
    WARNING: #{crystal.openReport('Projektübersicht.rpt')}: com.crystaldecisions.sdk.occa.report.lib.ReportSDKLogonException: Fehler bei der Anmeldung: Fehler bei der Anmeldung für den Benutzer 'ipc'. ClientConnectionId:b09ff5cf-3e6c-4446-9a74-21464b23ded9---- Error code:-2147217393 Error code name:dbLogonFailed
    javax.faces.FacesException: #{crystal.openReport('Projektübersicht.rpt')}: com.crystaldecisions.sdk.occa.report.lib.ReportSDKLogonException: Fehler bei der Anmeldung: Fehler bei der Anmeldung für den Benutzer 'ipc'. ClientConnectionId:b09ff5cf-3e6c-4446-9a74-21464b23ded9---- Error code:-2147217393 Error code name:dbLogonFailed
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118)
        at javax.faces.component.UICommand.broadcast(UICommand.java:315)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    Caused by: javax.faces.el.EvaluationException: com.crystaldecisions.sdk.occa.report.lib.ReportSDKLogonException: Fehler bei der Anmeldung: Fehler bei der Anmeldung für den Benutzer 'ipc'. ClientConnectionId:b09ff5cf-3e6c-4446-9a74-21464b23ded9---- Error code:-2147217393 Error code name:dbLogonFailed
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
        ... 26 more
    Caused by: com.crystaldecisions.sdk.occa.report.lib.ReportSDKLogonException: Fehler bei der Anmeldung: Fehler bei der Anmeldung für den Benutzer 'ipc'. ClientConnectionId:b09ff5cf-3e6c-4446-9a74-21464b23ded9---- Error code:-2147217393 Error code name:dbLogonFailed
        at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.if(SourceFile:237)
        at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.export(SourceFile:147)
        at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.export(SourceFile:128)
        at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.export(SourceFile:111)
        at imbpc.bean.crystal.openReport(crystal.java:132)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
        at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
        at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
        ... 27 more
    Caused by: com.crystaldecisions.reports.common.LogonFailureException: Fehler bei der Anmeldung: Fehler bei der Anmeldung für den Benutzer 'ipc'. ClientConnectionId:b09ff5cf-3e6c-4446-9a74-21464b23ded9
        at com.crystaldecisions.reports.queryengine.Connection.br(SourceFile:1799)
        at com.crystaldecisions.reports.queryengine.Connection.bs(SourceFile:505)
        at com.crystaldecisions.reports.queryengine.Connection.t4(SourceFile:2993)
        at com.crystaldecisions.reports.dataengine.dfadapter.DFAdapter.a(SourceFile:696)
        at com.crystaldecisions.reports.dataengine.dfadapter.DFAdapter.for(SourceFile:706)
        at com.crystaldecisions.reports.reportdefinition.ReportHelper.a(SourceFile:198)
        at com.businessobjects.reports.sdk.requesthandler.ReportViewingRequestHandler.long(SourceFile:957)
        at com.businessobjects.reports.sdk.requesthandler.ReportViewingRequestHandler.a(SourceFile:635)
        at com.businessobjects.reports.sdk.requesthandler.ReportViewingRequestHandler.int(SourceFile:672)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter.do(SourceFile:1943)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter.if(SourceFile:660)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter.a(SourceFile:166)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter$2.a(SourceFile:528)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter$2.call(SourceFile:526)
        at com.crystaldecisions.reports.common.ThreadGuard.syncExecute(SourceFile:102)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter.for(SourceFile:524)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter.int(SourceFile:423)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter.request(SourceFile:351)
        at com.businessobjects.sdk.erom.jrc.a.a(SourceFile:54)
        at com.businessobjects.sdk.erom.jrc.a.execute(SourceFile:67)
        at com.crystaldecisions.proxy.remoteagent.RemoteAgent$a.execute(SourceFile:716)
        at com.crystaldecisions.proxy.remoteagent.CommunicationChannel.a(SourceFile:125)
        at com.crystaldecisions.proxy.remoteagent.RemoteAgent.a(SourceFile:537)
        at com.crystaldecisions.sdk.occa.report.application.ds.a(SourceFile:186)
        at com.crystaldecisions.sdk.occa.report.application.ReportSource.a(SourceFile:1558)
        at com.crystaldecisions.sdk.occa.report.application.ReportSource.a(SourceFile:337)
        at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.if(SourceFile:223)
        ... 39 more
    Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: Fehler bei der Anmeldung für den Benutzer 'ipc'. ClientConnectionId:b09ff5cf-3e6c-4446-9a74-21464b23ded9
        at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
        at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:254)
        at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2908)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2234)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2220)
        at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1326)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
        at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
        at com.crystaldecisions.reports.queryengine.driverImpl.jdbc.JDBCConnection.Open(Unknown Source)
        at com.crystaldecisions.reports.queryengine.JDBConnectionWrapper.Open(SourceFile:123)
        at com.crystaldecisions.reports.queryengine.Connection.br(SourceFile:1786)
        ... 65 more

    Feb 12, 2014 12:58:25 AM org.apache.catalina.core.StandardWrapperValve invoke
    SEVERE: Servlet.service() for servlet [Faces Servlet] in context with path [/IMBProject] threw exception [com.crystaldecisions.sdk.occa.report.lib.ReportSDKLogonException: Fehler bei der Anmeldung: Fehler bei der Anmeldung für den Benutzer 'ipc'. ClientConnectionId:b09ff5cf-3e6c-4446-9a74-21464b23ded9---- Error code:-2147217393 Error code name:dbLogonFailed] with root cause
    com.microsoft.sqlserver.jdbc.SQLServerException: Fehler bei der Anmeldung für den Benutzer 'ipc'. ClientConnectionId:b09ff5cf-3e6c-4446-9a74-21464b23ded9
        at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)
        at com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:254)
        at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2908)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:2234)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:2220)
        at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1326)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)
        at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)
        at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1012)
        at com.crystaldecisions.reports.queryengine.driverImpl.jdbc.JDBCConnection.Open(Unknown Source)
        at com.crystaldecisions.reports.queryengine.JDBConnectionWrapper.Open(SourceFile:123)
        at com.crystaldecisions.reports.queryengine.Connection.br(SourceFile:1786)
        at com.crystaldecisions.reports.queryengine.Connection.bs(SourceFile:505)
        at com.crystaldecisions.reports.queryengine.Connection.t4(SourceFile:2993)
        at com.crystaldecisions.reports.dataengine.dfadapter.DFAdapter.a(SourceFile:696)
        at com.crystaldecisions.reports.dataengine.dfadapter.DFAdapter.for(SourceFile:706)
        at com.crystaldecisions.reports.reportdefinition.ReportHelper.a(SourceFile:198)
        at com.businessobjects.reports.sdk.requesthandler.ReportViewingRequestHandler.long(SourceFile:957)
        at com.businessobjects.reports.sdk.requesthandler.ReportViewingRequestHandler.a(SourceFile:635)
        at com.businessobjects.reports.sdk.requesthandler.ReportViewingRequestHandler.int(SourceFile:672)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter.do(SourceFile:1943)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter.if(SourceFile:660)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter.a(SourceFile:166)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter$2.a(SourceFile:528)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter$2.call(SourceFile:526)
        at com.crystaldecisions.reports.common.ThreadGuard.syncExecute(SourceFile:102)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter.for(SourceFile:524)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter.int(SourceFile:423)
        at com.businessobjects.reports.sdk.JRCCommunicationAdapter.request(SourceFile:351)
        at com.businessobjects.sdk.erom.jrc.a.a(SourceFile:54)
        at com.businessobjects.sdk.erom.jrc.a.execute(SourceFile:67)
        at com.crystaldecisions.proxy.remoteagent.RemoteAgent$a.execute(SourceFile:716)
        at com.crystaldecisions.proxy.remoteagent.CommunicationChannel.a(SourceFile:125)
        at com.crystaldecisions.proxy.remoteagent.RemoteAgent.a(SourceFile:537)
        at com.crystaldecisions.sdk.occa.report.application.ds.a(SourceFile:186)
        at com.crystaldecisions.sdk.occa.report.application.ReportSource.a(SourceFile:1558)
        at com.crystaldecisions.sdk.occa.report.application.ReportSource.a(SourceFile:337)
        at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.if(SourceFile:223)
        at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.export(SourceFile:147)
        at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.export(SourceFile:128)
        at com.crystaldecisions.sdk.occa.report.application.PrintOutputController.export(SourceFile:111)
        at imbpc.bean.crystal.openReport(crystal.java:132)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.apache.el.parser.AstValue.invoke(AstValue.java:278)
        at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:274)
        at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
        at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
        at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
        at javax.faces.component.UICommand.broadcast(UICommand.java:315)
        at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)
        at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)
        at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
        at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
        at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
        at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)

I got the solution: I missed to set the password in connection infos. So the report only works, when it uses the data from cache (no database connection needed) By passing new parameters, crystal report try to connect the database, and then the error message appears. I solved the problem by adding this code:

  ConnectionInfos infos = reportClientDoc.getDatabaseController().getConnectionInfos(null);
            IConnectionInfo oldCon = infos.get(0);
            IConnectionInfo newCon = new ConnectionInfo();
            PropertyBag bag = new PropertyBag(oldCon.getAttributes());
          //  changePropertyBag(bag);
            newCon.setAttributes(bag);
            newCon.setUserName("username");
            newCon.setPassword("password");
//            newCon.setKind(ConnectionInfoKind.SQL);
            reportClientDoc.getDatabaseController().replaceConnection (oldCon, newCon, null,0);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM