- 浏览: 51478 次
- 性别:
- 来自: 南京
最新评论
-
wangying95599:
type= "Hello/css " ty ...
GWT CSS -
oceanG_Y:
这个框架和struts1的差不多,也是分三部分,视图,控制器, ...
配置mojavi -
liyh:
你觉得这个框架怎么样。
配置mojavi -
chaiyanxing:
怎么不写完呀?
Struts2 分页 -
hurui3550:
原文地址:
http://s2container.seasar ...
开源框架 Seasar2
引用自:http://forum.java.sun.com/thread.jspa?threadID=543125&messageID=2703479
Integrating Crystal Reports with a J2EE Application:
A Case Study
Introduction
In this paper, we discuss our experience with integrating Crystal Reports with a J2EE
application, Task Workbench (TWB). The goal of this paper is to help others evaluate the
benefits and drawbacks of using Crystal Reports in the context of a J2EE application.
Task Workbench (www.taskworkbench.com) is a work management tool that provides real-time
information about projects and day-to-day operations. It is a web application that uses JSPs for
the presentation layer and EJBs for the business logic. Persistence is via container managed
persistence (CMP) Entity Enterprise Java Beans (EJBs) mapped to an Oracle relational database.
TWB helps project managers stay informed about the progress of projects by providing various
ways to track the number of hours that employees spend on each project. When designing the
this application, an important requirement was to provide project managers and administrative
staff with a high-level view of the team member and project data.
Figure 1: Task Workbench displays an employeeýs tasks and the hours spent on each task.
Initially we created reports in TWB using JSP, however this approach proved to be prohibitively
time consuming, especially for complex reports, so a Java reporting solution for web
applications was sought. Our basic requirements were that the solution should make it fast and
easy to create and modify reports, and that it could be integrated with a J2EE application with
minimum implementation effort.
We selected the Crystal Reports Java Reporting Component because it met all of our
requirements. It is also a mature, industry-leading product with a range of tools available for
it. This was an important consideration because we wanted to ensure that our reporting
solution could grow as TWB's requirements expanded.
Ensemble Systems Inc.
Integrating Crystal Reports with a J2EE Application
Copyright 2003, Ensemble Systems Inc. Page 2 of 13
www.ensemble-systems.com
The first section of this paper briefly describes the original report implementation using handcoded
JSP, and the problems that we encountered with this approach. The next section
explains why we selected the Crystal Java Reporting Component as our reporting solution. The
remainder of the paper discusses how we integrated Crystal Reports with TWB, and details the
pros and cons of using Crystal Reports.
Original Report Implementation
The early versions of TWB implemented reports using hand-coded JSP. In most cases, the
report data used JDBC to connect directly to the database for performance reasons. An
additional advantage of implementing reports in this way was that the queries already existed
for a precursor application, and these complex queries had been proved to be correct.
This approach quickly became problematic for a number of reasons:
ý Query optimization was difficult since the queries had to be dynamically altered, based
on multiple report settings.
ý The implementation effort for reports with grouped data proved to be prohibitive.
ý We had no practical way to rapidly prototype reports for cases where the requirements
were unclear or unstable. This discouraged experimentation and lead to certain reports
not adequately meeting the customerýs requirements.
ý Maintenance became very time-consuming as the schema changed and new features
were introduced.
ý Customization of the output of the reports for specific uses (e.g. printing) was timeconsuming.
Our initial implementation used CMP entity EJBs to obtain the data for reports. The
shortcomings of this naýve implementation quickly become apparent ý in particular, it did not
scale well for large datasets and a significant amount of work would have been required to
address this deficiency.
These issues made it clear that we needed a much better solution to our reporting
requirements; we needed a way to create more sophisticated reports with much less effort. We
turned to Crystal Reports for this solution.
Selecting a Reporting Solution
Our difficulties with creating reports with JSP in TWB caused us to look to better reporting
solutions. Our requirements were that the reporting solution should:
ý Have a visual report editor to make it fast and easy to create and modify reports.
ý Generate highly presentable reports, both on the screen and when printed.
ý Include the ability to generate grouped reports with graphs.
ý Obtain the report data via an instance of javax.sql.DataSource, or a JDBC connection.
ý Be a pure Java solution.
We considered open source alternatives such as Jasper Reports. However, we found that none
of the open source options met our basic requirement for a visual report editor and we judged
them unlikely to provide adequately sophisticated solutions without a lot of additional work.
We elected to use a solution based on Crystal Reports, because we had been impressed with
Crystal Reports when we used it with an unrelated project.
Integrating Crystal Reports with a J2EE Application
Copyright 2003, Ensemble Systems Inc. Page 3 of 13
www.ensemble-systems.com
There are three classes of Crystal Reporting solutions: Java Reporting Component, Report
Application Server (RAS), and Crystal Enterprise. The Java Reporting Component provides a
simple, pure Java solution for viewing reports in cases where there is likely to be low
concurrent usage and where report management functionality is not required. The RAS provides
a basic set of services for processing, viewing and modifying reports locally and remotely. Since
report processing is done on demand, RAS is best suited for smaller datasets and small numbers
of concurrent users. Crystal Enterprise is a set of products with features designed to support
large installations with more demanding requirements. The basic features of Crystal Enterprise
include load management (clustering, report scheduling, etc), availability (fail-over), and
row/column level security.
We selected the Crystal Java Reporting Component for TWB since this solution met all our
requirements and we anticipated that there would be a small number of concurrent users for
reports. We also did not need the advanced report interactivity options as users would only
require basic report viewing and printing capabilities.
Implementation
The Crystal Java Reporting Component was integrated into TWB with emphasis on two key
goals: The first was to provide an implementation that required the least possible effort to
add new reports and maintain existing reports. The second goal was to make it simple to switch
to a more sophisticated Crystal reporting solution, such as Crystal Enterprise, in order to
provide for scalability if required.
The Crystal Java Reporting Component has a JSP tag library that provides a simple way to
display basic reports; direct access to the API is provided for cases where more features are
required. We chose to implement our own custom JSP tag that uses the Crystal Reporting
Component to display the reports. This approach allowed us to customize the appearance of
the reports and to set report parameters while keeping the design simple and easy to maintain.
The simplicity of this approach is illustrated by the fact that the only Java code required in the
JSP is a single method call to a factory class to obtain an instance of the report to be displayed
on the page. Figure 2, simple_banked_time_report.jsp provides a basic example of a JSP that
might be used to request a report. This form passes the required parameters to view_report.jsp
(Figure 3).
Integrating Crystal Reports with a J2EE Application
Copyright 2003, Ensemble Systems Inc. Page 4 of 13
www.ensemble-systems.com
<%@ page import="com.ensemsys.twb.presentation.crystal.ReportParameter,
com.ensemsys.twb.presentation.crystal.ReportType"%><html>
<head>
<title>Report Viewer</title>
<link rel="stylesheet" href="style/main.css" type="text/css"/>
</head>
<body>
<h1>Simple Banked Hours Report</h1>
<p>Enter the date range for the report and click "Submit" to view
the report.</p>
<form method="post" action="view_report.jsp">
<input type="hidden" name="<%=ReportParameter.TYPE%>"
value="<%=ReportType.BANKED_TIME_SIMPLE%>"/>
<table>
<tr>
<td class="label">Start Date:</td>
<td>
<input type="text" name="<%=ReportParameter.START_DATE%>"
value="2003.06.30"/>
</td>
</tr>
<tr>
<td class="label">End Date:</td>
<td>
<input type="text" name="<%=ReportParameter.END_DATE%>"
value="2003.12.01"/>
</td>
</tr>
<tr>
<td> </td>
<td style="text-align: right">
<input type="submit" name="submitBtn" value="Submit"/>
</td>
</tr>
</table>
</form>
</body>
</html>
Figure 2: simple_banked_time_report.jsp, an example of a simple form that can be used to
display a report.
Integrating Crystal Reports with a J2EE Application
Copyright 2003, Ensemble Systems Inc. Page 5 of 13
www.ensemble-systems.com
<%@ page import="com.ensemsys.twb.presentation.crystal.ReportFactory,
com.ensemsys.twb.presentation.crystal.Report"%>
<%@ taglib uri="/simplereportviewer.tld" prefix="viewer" %>
<html>
<head>
<title>Report</title>
<link rel="stylesheet" href="style/main.css" type="text/css"/>
</head>
<body>
<%
// "CrystalEventTarget" is the report action name used by Crystal
final String REPORT_NAME = "CrystalEventTarget";
String reportName = (String) session.getAttribute( REPORT_NAME );
// refresh might have done via a report action
if ( reportName == null )
{
reportName = (String) request.getParameter( REPORT_NAME );
}
Report report = null;
if ( reportName == null )
{
report = ReportFactory.newInstance( request );
reportName = report.getName();
session.setAttribute( REPORT_NAME, reportName );
session.setAttribute( reportName, report );
}
else
{
report = (Report) session.getAttribute( reportName );
}
%>
<viewer:viewer report="<%=report%>" />
</body>
</html>
Figure 3: view_report.jsp, the JSP used to display a report.
The class ReportFactory creates an instance of Report, using the parameters in the request to
determine the type of report to be created and to create the report's parameters (see Figure
4). This approach neatly encapsulates the business logic specific to individual reports in one
method. Factory methods for more complex types of reports are best implemented in a
subclass of ReportFactory - the ReportFactory can then delegate to the subclass when creating
that type of report.
Integrating Crystal Reports with a J2EE Application
Copyright 2003, Ensemble Systems Inc. Page 6 of 13
www.ensemble-systems.com
Figure 4: ReportFactory.java creates an instance of a Report, based on parameters
submitted from a form.
package com.ensemsys.twb.presentation.crystal;
import com.crystaldecisions.sdk.occa.report.data.Fields;
import com.crystaldecisions.sdk.occa.report.data.ParameterField;
import com.crystaldecisions.sdk.occa.report.data.ParameterFieldDiscreteValue;
import com.crystaldecisions.sdk.occa.report.data.Values;
import javax.servlet.ServletRequest;
import javax.servlet.jsp.JspException;
import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
* Provides methods for creating an instance of a Report
* from the parameters in the request.
*/
public class ReportFactory
{
public static final DateFormat FORMAT =
new SimpleDateFormat( "yyyy.MM.dd" );
public static Report newInstance( ServletRequest request )
throws JspException
{
String reportType = getParameter( request, ReportParameter.TYPE );
Report report = null;
// For brevity, only the simple report type is shown here
if ( reportType.equals( ReportType.BANKED_TIME_SIMPLE ) )
{
report = newSimpleBankedTimeReport( request );
}
else
{
throw new InvalidReportTypeException( reportType );
}
return report;
}
Integrating Crystal Reports with a J2EE Application
Copyright 2003, Ensemble Systems Inc. Page 7 of 13
www.ensemble-systems.com
Figure 4: ReportFactory.java (continued).
private static Report newSimpleBankedTimeReport( ServletRequest request )
throws JspException
{
Date startDate = getDateParameter( request, ReportParameter.START_DATE );
Date endDate = getDateParameter( request, ReportParameter.END_DATE );
Fields fields = new Fields();
ParameterField prevYearField = newDateField( "Prev Fiscal Year", startDate
);
ParameterField reportDateField = newDateField( "Report Date", endDate );
fields.add( prevYearField );
fields.add( reportDateField );
return new Report( "protected/reports/bhr_simple_demo.rpt",
ReportType.BANKED_TIME_SIMPLE, fields );
}
public static ParameterField newDateField( String name, Date date )
{
ParameterField field = new ParameterField();
Values vals = new Values();
ParameterFieldDiscreteValue value = new ParameterFieldDiscreteValue();
field.setName( name );
value.setValue( date );
field.setReportName( "" );
value.setDescription( "" );
vals.add( value );
field.setCurrentValues( vals );
return field;
}
public static Date newDate( String s )
throws InvalidDateStringException
{
java.sql.Date date = null;
try
{
date = new java.sql.Date( FORMAT.parse( s ).getTime() );
}
catch ( ParseException e )
{
throw new InvalidDateStringException( e );
}
return date;
}
protected static void assertHasParameter( ServletRequest request, String name
)
{
String parameter = request.getParameter( name );
if ( parameter == null || parameter.equals( "" ) )
{
throw new NoSuchParameterException( name );
}
}
Integrating Crystal Reports with a J2EE Application
Copyright 2003, Ensemble Systems Inc. Page 8 of 13
www.ensemble-systems.com
Figure 5: SimpleReportViewerTag.java is the implementation of the custom JSP tag for
displaying a Report.
protected static Date getDateParameter( ServletRequest request, String name )
throws JspException
{
String parameter = getParameter( request, name );
Date date = null;
try
{
date = newDate( parameter );
}
catch ( InvalidDateStringException e )
{
throw new JspException( e );
}
return date;
}
protected static String getParameter( ServletRequest request, String name )
{
assertHasParameter( request, name );
return request.getParameter( name );
}
}
Figure 4: ReportFactory.java (continued).
The class SimpleReportViewerTag (Figure 5) renders the report; this class uses the Crystal Java
Reporting Component API to perform the drawing of the report. This class is quite
straightforward - it creates an instance of CrystalReportViewer, sets the database connection
information and the parameters that the report requires, and then displays the report. The
corresponding TLD, simplereportviewer.tld, is shown in Figure 6.
This approach is very clean and is easy to maintain, as the design ensures that the logic for
each report is in a single location.
package com.ensemsys.twb.presentation.crystal;
import com.crystaldecisions.report.web.viewer.CrystalReportViewer;
import
com.crystaldecisions.reports.reportengineinterface.JPEReportSourceFactory;
import com.crystaldecisions.sdk.occa.report.data.ConnectionInfo;
import com.crystaldecisions.sdk.occa.report.data.ConnectionInfos;
import com.crystaldecisions.sdk.occa.report.data.Fields;
import com.crystaldecisions.sdk.occa.report.data.IConnectionInfo;
import com.crystaldecisions.sdk.occa.report.lib.ReportSDKExceptionBase;
import com.crystaldecisions.sdk.occa.report.reportsource.IReportSource;
import com.crystaldecisions.sdk.occa.report.reportsource.IReportSourceFactory2;
import com.ensemsys.twb.ApplicationProperties;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import java.util.Locale;
Integrating Crystal Reports with a J2EE Application
Copyright 2003, Ensemble Systems Inc. Page 9 of 13
www.ensemble-systems.com
Figure 5: SimpleReportViewerTag.java (continued).
/**
* Displays a Crystal report.
*/
public class SimpleReportViewerTag extends TagSupport
{
private Report report;
public Report getReport()
{
return report;
}
public void setReport( Report report )
{
this.report = report;
}
public int doEndTag() throws JspException
{
CrystalReportViewer viewer = newViewer( report );
try
{
IReportSourceFactory2 rptSrcFactory = new JPEReportSourceFactory();
IReportSource reportSource =
(IReportSource) rptSrcFactory.createReportSource(
report.getReportFileName(), getLocale() );
viewer.setReportSource( reportSource );
viewer.setDatabaseLogonInfos( newDBConnectionInfos() );
viewer.setEnableLogonPrompt( false );
Fields fields = report.getFields();
if ( fields != null )
{
viewer.setParameterFields( fields );
viewer.setEnableParameterPrompt( false );
}
viewer.processHttpRequest(
(HttpServletRequest) pageContext.getRequest(),
(HttpServletResponse) pageContext.getResponse(),
pageContext.getServletConfig().getServletContext(),
pageContext.getOut() );
}
catch ( ReportSDKExceptionBase e )
{
throw new JspException( e );
}
finally
{
if ( viewer != null )
{
viewer.dispose();
}
}
return EVAL_PAGE;
}
Integrating Crystal Reports with a J2EE Application
Copyright 2003, Ensemble Systems Inc. Page 10 of 13
www.ensemble-systems.com
private Locale getLocale()
{
// generally you want to change this method
// to return the specific locale that your J2EE
// application is using
return pageContext.getRequest().getLocale();
}
private static ConnectionInfos newDBConnectionInfos()
{
ConnectionInfos infos = new ConnectionInfos();
IConnectionInfo con = new ConnectionInfo();
con.setUserName( ApplicationProperties.getJDBCUser() );
con.setPassword( ApplicationProperties.getJDBCPassword() );
infos.add( con );
return infos;
}
private static CrystalReportViewer newViewer( Report report )
{
CrystalReportViewer viewer = new CrystalReportViewer();
viewer.setName( report.getName() );
// set the viewer formatting and behaviour options
//viewer.setSeparatePages( false );
//viewer.setBestFitPage( true );
// ... and so on
return viewer;
}
}
Figure 5: SimpleReportViewerTag.java (continued).
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE taglib
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>Crystal Viewer Tag Library</short-name>
<description>Display a Crystal Report with paramters</description>
<tag>
<name>viewer</name>
<tagclass>
com.ensemsys.twb.presentation.crystal.SimpleReportViewerTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>report</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
</taglib>
Figure 6: simplereportviewer.tld - the TLD for the SimpleReportViewer tag extension.
Integrating Crystal Reports with a J2EE Application
Copyright 2003, Ensemble Systems Inc. Page 11 of 13
www.ensemble-systems.com
Since TWB only allows project managers to view reports, TWBýs existing access control
mechanisms were sufficient for controlling access to reports. It is anticipated that a future
version of TWB may require more fine-grained access control - for example, users may be
restricted to seeing data about specific projects on a report. In this case, we would utilize the
Crystal Enterprise security features for this level of access control.
Evaluation of Implementation
Our report implementation, using a combination of Crystal Reports and the Crystal Java
Reporting Component had several advantages and a few disadvantages when compared with
our previous JSP implementation.
The biggest advantage was the speed and simplicity of creating visually appealing reports. An
important factor contributing to the speed of creating reports is that the Crystal Reports visual
editor makes it possible to design and edit reports without having to build and deploy TWB. An
additional benefit is that the ease of creating and modifying reports means that the developer
does not need to have expertise in J2EE, meaning that a larger pool of developers are available
to work with the reports.
Figure 7: Example of a Crystal Report integrated with Task Workbench.
The Crystal API made it very simple to integrate the reports into a web application. Using a
custom JSP tag took this simplicity a step further, with very little code being required to
display a report. Making changes to reports is now almost trivial. Huge time savings were also
Integrating Crystal Reports with a J2EE Application
Copyright 2003, Ensemble Systems Inc. Page 12 of 13
www.ensemble-systems.com
realized by the fact that we did not need to write code to support requirements such as
printing, exporting reports, tuning queries, etc.
A comparison of the implementation effort of the original approach using hand-coded JSP
versus the equivalent implementation with Crystal Reports is shown in Table 1.
As outlined in this document, one of the reasons we choose Crystal technology is that Crystal
Decisions (recently acquired by Business Objects) offers a number of solutions to address
scalability issues, particularly in the Crystal Enterprise suite. The performance experienced
when using the Crystal Java Reporting Component was adequate for our current requirements,
but under higher loads we will need to switch to a more full-featured Crystal solution. This is a
very simple change, due to the way we have integrated Crystal Reports with TWB. Essentially,
the only changes required would be to alter the implementation of the SimpleReportViewerTag
to use a Crystal RAS (or Crystal Enterprise) report source, and to alter the path to the reports
themselves, in the ReportFactory class.
Task Original JSP Crystal Reports
One-time
Setup/Familiarization
(Assumes JSP/java
knowledge)
3 days (JDBC, queries) 4 days (Product, Integration)
Initial Report Design and
Implementation
4 days (input and output
pages)
10 days (creating and
optimizing queries,
organizing the data returned
to match the output format)
2 days (input pagesleveraged
existing)
1 day (Crystal Reports
Designer)
Make reports available as CSV 8 days (summary, create
hierarchy CSVs)
1 day
Integration/Test/Maintenance 5 days (introduction of subprojects,
project groups)
1 day
Total 30 days 9 days
Table 1: Comparison of implementation effort in TWB for hand coded JSP ýVs- Crystal
Reports.
The main disadvantage of using Crystal Reports in TWB is that some reports are not easy to reuse
across different databases. Naturally, our development and QA environments use different
databases from the production environment, and it is important to be able to deploy the
application using an arbitrary database type/schema that have the same tables but are
otherwise different. The only solution available to us has been to create reports by hand for
each database.
Crystal Reports connect to the database directly using SQL via JDBC. This allows reports to
perform better, but the trade-off is that the report is dependent on a database schema that is
automatically generated and updated when the CMP entity beans are built. The developers
responsible for the CMP entity beans need to keep this in mind when they make any changes.
Using the database directly in the context of an EJB application can lead to concurrency issues,
so care must be taken to ensure that the EJB container is configured for non-exclusive access.
Despite the drawbacks mentioned, using Crystal Reports has proved to be a much better
approach to creating reports for TWB, because of the huge time savings at both, the
Integrating Crystal Reports with a J2EE Application
Copyright 2003, Ensemble Systems Inc. Page 13 of 13
www.ensemble-systems.com
implementation and maintenance phases of development. In short, integrating Crystal Reports
with TWB has allowed us to produce a superior reporting capability with room for future
requirement expansion - in a fraction of the time that it took to implement a hand-coded JSP
solution.
Summary
The Crystal Java Reporting Component successfully fulfilled our requirements for a
sophisticated Java reporting solution that was simple to integrate with a J2EE application and
that provides high quality reports which are easy to create. Our method of integration, using a
custom JSP tag combined with a factory class, provided a very simple way to integrate Crystal
Reports with TWB. The main drawback of using Crystal Reports is the lack of portability of
individual reports, but the magnitude of the productivity gains we experienced using Crystal
Reports far outweighed this.
发表评论
-
Extjs grid数据手动排序
2010-01-10 11:31 0在使用ExtJS的grid控件的时候,经常需要对gri ... -
关于 商业智能
2009-04-21 00:29 143各位版油们,有没有是做商务智能行业的,请大家谈谈对该行业未来. ... -
XMLHttpRequest对象池
2008-12-06 11:20 873在ajax应用中,通常一个页面要同时发送多个请求,如果只有一个 ... -
程序员的七种武器
2008-11-22 23:43 885程序员的七种武器 第 ... -
java 数据库 基础知识
2008-10-18 13:32 1016数据库方面: 1. 存储过程和函数的区别 存储过程是用 ... -
java 基本知识
2008-10-18 13:31 886面向对象的特征有哪些方面 1. 抽象: 抽 ... -
GWT Grid 列合并
2008-05-31 12:08 978我建了一个10行2列的grid的表格;我想让某一行或多行的两列 ... -
GWT CSS
2008-05-29 23:25 1295在Hello.gwt.xml里加上 <styleshee ... -
DIV 层 透明
2008-05-27 22:32 1897<center><div style=&qu ... -
API Developer's Guide: Java
2008-05-19 23:44 1075引自:http://code.google.com/apis/ ... -
妻子的说明书
2008-05-19 17:16 784妻子的说明书 (已经国家食药监局注册司备案)【品名】妻子 ... -
IE Developer
2008-05-15 11:13 855Name:piaodown.com Serial:88QWS- ... -
GWT学习笔记(一)
2008-05-12 20:20 1800Language Support Intrinsi ... -
GWT开发的8个忠告
2008-05-11 22:06 1171Google Web工具包(GWT)确 ... -
GWT开发中注意点:
2008-05-11 21:47 1216引自:http://www.blogjava.net/stee ... -
Google Web ToolKit
2008-05-10 00:49 864引自:http://www.ibm.com/developer ... -
工作中,一般都会用几种语言?
2008-05-05 13:48 1544我工作中,用JAVA和PHP,还有C#,交替开发;都要给累死了 ... -
开源框架 Seasar2
2008-04-25 16:51 9510在日本,Seasar2这个框架十分的流行。Seasar2其实就 ... -
Struts2 分页
2008-04-25 16:31 2846一、 准备工作 开发环境:MyEclipse5.0 ... -
Spring 配XML的技巧!
2008-04-25 14:16 777Spring 配XML的技巧! 1. 避免使用自动装配 Spr ...
相关推荐
Crystal Reports 9.2 中文版(水晶报表) 下载,,软件版本:9.2.0.448不过现已出了Crystal Reports Professional v9.2.2.634 (c) Crystal Decisions,有足够的空间就提供.这是一个很不错的报表控件,我相信很多朋友都听说...
### Crystal Reports 11 教程:从安装到高级应用的全面指南 #### 水晶报表:概览与入门 Crystal Reports 11是一款由Business Objects开发的强大报告设计工具,旨在帮助用户从各种数据源中提取、分析并呈现数据。自...
《Crystal Reports:与Visual Studio 和 Crystal Reports 实现报表制作》是Mahmoud Elkoush所著的一本关于报表开发的图书。本书专注于教授读者如何使用Visual Studio和Crystal Reports来从零开始创建一个报表应用...
在这个“Crystal Reports for java jsp web”案例中,我们将探讨如何在Java JSP Web环境中有效地集成并使用水晶报表。 首先,让我们了解一下水晶报表的基本概念。水晶报表允许开发人员通过拖放方式设计报告,包括...
Make the most of the SAP Crystal Reports, developer version for Microsoft Visual Studio runtime by designing your reports in SAP Crystal Reports 2011 software. Utilize Crystal Reports 2011 and spend ...
**Crystal Reports联机帮助文档详解** Crystal Reports是一款强大的报表设计工具,广泛应用于商业智能和数据分析领域。它允许用户从各种数据源(如数据库、Excel表格、XML文件等)设计和生成复杂的报告,提供了丰富...
《CrystalDecisions.CrystalReports.Engine:深入了解与应用》 CrystalDecisions.CrystalReports.Engine 是一款由 SAP AG 开发的报表引擎组件,主要用于创建、查看和管理 Crystal Reports 报表。这个组件广泛应用...
CrystalReports 水晶报表 11.5 CrystalReports11.55安装包
Make the most of the SAP Crystal Reports, developer version for Microsoft Visual Studio runtime by designing your reports in SAP Crystal Reports 2011 software. Utilize Crystal Reports 2011 and spend ...
**知识点生成:Crystal Reports 使用指南** ### 概览与专利信息 - **产品版本与所有权**:“Crystal Reports 11版”是BusinessObjects公司的产品,该公司拥有与该产品相关的多项美国专利,包括但不限于5,555,403、...
**Crystal Reports for .NET Framework 2.0 32位 msi** 水晶报表(Crystal Reports)是一款强大的报表设计工具,广泛应用于数据可视化和业务智能领域。这个特定的标题指的是为.NET Framework 2.0设计的32位版本的...
SAP Crystal Reports 2016 用户指南;ReportsSAP Crystal Reports 2016(Crystal Reports) 设计为可用于处理数据库,帮助分析和解释重要信息。Crystal Reports 使用户能够方便地创建简单报表,同时它也提供了创建复杂...
水晶报表SAP Crystal Reports 2016是一款强大的报表设计软件,它能够帮助用户从多种数据源中提取信息,并通过图形化的方式展示数据。本指南将详细介绍如何使用SAP Crystal Reports 2016进行报表的设计与开发,包括...
1. **Java SDK for Crystal Reports**:要从Java访问Crystal Reports,首要任务是安装并配置SAP Business Objects Java SDK。这个SDK包含必要的库和类,让Java应用程序能够与报表引擎通信。你需要在项目中添加这些库...
《CrystalDecisions.CrystalReports.Engine:深入解析与应用》 在信息技术领域,报表系统扮演着至关重要的角色,它能够帮助企业、机构等高效地管理和分析数据。Crystal Reports是一款由SAP公司开发的著名报表工具,...
这个“CrystalReports10_5安装包”包含了用于安装该软件的必要组件,便于用户在自己的计算机上搭建水晶报表环境。 安装包中的文件: 1. **CRRedist2008_x64.msi**:这是64位版本的 Crystal Reports 运行时组件安装...
《Crystal Reports 2008 示例》是针对Business Objects公司推出的报表工具——Crystal Reports 2008的一个详细实例集合。这款强大的报表软件允许用户从各种数据源创建复杂的报告,包括数据库、Excel表格、文本文件等...
Crystal Reports Advanced v9.2
《Crystal Reports 2008 水晶报表官方中文傻瓜教程》是针对初学者设计的一份详尽教程,旨在帮助用户快速掌握Crystal Reports 2008这一强大的报表设计工具。本教程以中文版的形式呈现,降低了学习难度,使得非英语...