使用java将日期参数传递给水晶报表

时间:2014-02-12 07:09:46

标签: java sql-server crystal-reports

我是java和crysal报道的新手。两天后,我尝试使用java和jsf创建一个水晶报告pdf。一切正常,但当我在代码中包含参数传递时,我得到错误

 *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*

(完整消息见下文)

我使用的是MSSQL Server 2008 Express。

这是Java代码:

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();
        }

似乎这是日期格式的问题,传递给参数StartDate和EndDate。我将此参数用于水晶报表中的以下过滤器:

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

当我删除此过滤器时,一切正常。当我使用没有密码的sql用户时,ll也能正常工作。当我使用没有日期格式的参数时,一切正常。

请帮助我,我变得绝望......

非常感谢你的帮助。

这里是来自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)

1 个答案:

答案 0 :(得分:0)

我得到了解决方案:我错过了在连接信息中设置密码。因此报告只有在使用缓存中的数据时才能工作(不需要数据库连接)通过传递新参数,crystal report尝试连接数据库,然后出现错误信息。我通过添加以下代码解决了这个问题:

  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);