views:

796

answers:

1

Dear All, I'm facing a problem in Crystal Report with Eclipse.

I am using a servlet to render the crystal report viewer by writing the viewer object to the response like:

public class ReportViewer extends HttpServlet {

    @SuppressWarnings("deprecation")
    public void doGet(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
     try {
      String reportName = "WEB-INF/includes/reports/"+request.getParameter("ReportName");
      ReportClientDocument clientDoc = (ReportClientDocument) request.getSession().getAttribute(reportName);

      if (clientDoc == null) {
       // Report can be opened from the relative location specified in the CRConfig.xml, or the report location
       // tag can be removed to open the reports as Java resources or using an absolute path
       // (absolute path not recommended for Web applications).

       clientDoc = new ReportClientDocument();

       // Open report
       clientDoc.open(reportName, OpenReportOptions._discardSavedData);
       // Store the report document in session
       ConnectionInfo info = new ConnectionInfo();
       info.setUserName("sa");
       info.setPassword("sa");
       Tables t = clientDoc.getDatabaseController().getDatabase().getTables();
       for (com.crystaldecisions.sdk.occa.report.data.ITable table : t) {
        IConnectionInfo Ic = table.getConnectionInfo();
        Ic.setPassword("sa");
        Ic.setUserName("sa");
        table.setConnectionInfo(Ic);     
       }
       request.getSession().setAttribute(reportName, clientDoc);

      }



        // Create the CrystalReportViewer object
        CrystalReportViewer crystalReportPageViewer = new CrystalReportViewer();

        // set the reportsource property of the viewer
        IReportSource reportSource = clientDoc.getReportSource();    
        crystalReportPageViewer.setReportSource(reportSource);

        // set viewer attributes
        crystalReportPageViewer.setOwnPage(true);
        crystalReportPageViewer.setOwnForm(true);

        // Apply the viewer preference attributes



        // Process the report
        crystalReportPageViewer.processHttpRequest(request, response, request.getSession(false).getServletContext(), null); 


     } catch (ReportSDKExceptionBase e) {
         System.out.println(e);
     } 
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
     doGet(request, response);
    }
}

When I am trying to request this servlet it redirects me to jdbc login page then it goes back to this servlet. I need to avoid jdbc login step by hardcoding it somewhere. please help me, every single comment will be appreciated.

A: 

Hi, Have you checked out the wiki over at https://wiki.sdn.sap.com/wiki/display/BOBJ/Crystal%20Reports%20Java%20%20SDK%20Samples

There are a JSP example you maybe could use:

    <%@ page import="com.crystaldecisions.sdk.occa.report.application.OpenReportOptions,
                 com.crystaldecisions.sdk.occa.report.application.ReportClientDocument,
                 com.crystaldecisions.sdk.occa.report.exportoptions.ReportExportFormat,
                 java.io.ByteArrayInputStream,
                 java.util.Calendar"
%><%
String reportPath;
String db_username;
String db_password;
ReportClientDocument reportClientDocument;
ByteArrayInputStream byteArrayInputStream;
byte[] byteArray;
int bytesRead;

reportPath  = request.getParameter("report_path");
db_username = request.getParameter("db_username");
db_password = request.getParameter("db_password");

/*
 * Instantiate ReportClientDocument and specify the Java Print Engine as the report processor.
 * Open a rpt file.
 */

reportClientDocument = new ReportClientDocument();
reportClientDocument.setReportAppServer(ReportClientDocument.inprocConnectionString);
reportClientDocument.open(reportPath, OpenReportOptions._openAsReadOnly);


/*
 * Set the database logon for all connections in main report.
 */

reportClientDocument.getDatabaseController().logon(db_username, db_password);


/*
 * Retrieve PDF format of report and stream out to web browser.
 */

byteArrayInputStream = (ByteArrayInputStream) reportClientDocument
        .getPrintOutputController().export(ReportExportFormat.PDF);

response.reset();

response.setHeader("Content-disposition", "inline;filename=crreport.pdf");
response.setContentType("application/pdf");

byteArray = new byte[1024];
while((bytesRead = byteArrayInputStream.read(byteArray)) != -1) {
    response.getOutputStream().write(byteArray, 0, bytesRead); 
}

response.getOutputStream().flush();
response.getOutputStream().close();

reportClientDocument.close();

%>
rafn