Проверка подлинности Crystal Report DB в Java - PullRequest
2 голосов
/ 17 мая 2009

Я столкнулся с проблемой в Crystal Report с Eclipse.

Я использую сервлет для рендеринга средства просмотра отчетов Crystal, записывая объект просмотра в ответ, например:

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

Когда я пытаюсь запросить этот сервлет, он перенаправляет меня на страницу входа в jdbc, затем возвращается к этому сервлету. Мне нужно избегать шага входа в jdbc, где-то жестко его кодировать Пожалуйста, помогите мне, каждый комментарий будет оценен.

1 Ответ

1 голос
/ 06 ноября 2009

Вы уже просмотрели вики на https://wiki.sdn.sap.com/wiki/display/BOBJ/Crystal%20Reports%20Java%20%20SDK%20Samples

Есть пример JSP, который вы, возможно, могли бы использовать:

    <%@ 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();

%>
...