More Related Content Similar to Creating Data Driven Web Apps with BIRT - Pierre Richer (Actuate) (20) More from jaxLondonConference (19) Creating Data Driven Web Apps with BIRT - Pierre Richer (Actuate)2. Today’s Agenda and Goals
• Introduction to BIRT
• Designing BIRT Reports
• Designer
• APIs
• Deploying BIRT
• BIRT Viewer
• Report Engine (Java)
• JavaScript API
• Questions
2
Actuate Corporation © 2012
4. Actuate Launches the BIRT Project
Actuate proposed and started
BIRT
Business Intelligence
and Reporting Tools Project
… a top-level Eclipse project
Actuate Joins
Eclipse Foundation
as Strategic Developer
and Board Member
Adds BI and Reporting
as Open Source Project
Professional open source
Primary development resources
funded by Actuate
Contributions from many sources
IBM, Innovent Solutions and community
4
Actuate Corporation © 2012
AUGUST
2004
5. BIRT Release History
September 2004
BIRT Project proposal accepted, and project launched
June 2005
1.0
Eclipse Report Designer, Report Engine, Chart Engine
December 2005
2.0
Support for a wide variety of common layouts
June 2006
2.1
Advanced parameters, ability to join data sets, …
June 2007
2.2
Dynamic crosstab support, web services data source, …
June 2008
2.3
JavaScript Debugger, BiDi Support, Charts in Crosstabs, …
June 2009
2.5
Page aggregates, Multiple drill-downs in Charts, …
June 2010
2.6
New charts, more chart control, developer productivity, …
June 2011
3.7
POJO Runtime, Hive/Hadoop, Open Office emitters…
June 2012
4.2
Maven Support, Excel Data Source, Relative Time Periods…
June 2013
4.3
MongoDB & POJO ODAs, PPT & Word 2010 Support, XLSX Support…
Ground-up initiative: Innovative approach to layout and design
Developed in the open with community feedback at all stages
5
Actuate Corporation © 2012
6. Business Intelligence and Reporting Tools
A New Generation of Data Visualization Technology
• Makes all data-driven content development easy
• Modern, web-page design metaphor
• Open and standards-based
• Flexible with rich programmatic control
• Full support for libraries and reuse
• Foundation for a range of solutions
Simplicity
that makes
simple
layouts easy
6
Actuate Corporation © 2012
Power
BIRT
to create
very complex
layouts
8. BIRT Data Access
• BIRT Offers many ways to get data
• Standard Data Sources
• Flat File (CSV, TSV, SSV, PSV)
• MongoDB
• Hive Data Source
• Cassandra Scripted Data Source
• JDBC Textual or Graphical
• Web Service & XML- XPath syntax
• XLS/XLSX
• Scripted Data Source Written in Java
or JavaScript
• Open Data Access (ODA) DTP Project
• Extensible JDBC Driver Framework
8
Actuate Corporation © 2012
Community Contributions
GoogleDocs
XML/A
REST
Multi-Flat File
GitHub
Twitter JSON Search
Dropbox usage
YQL
Google Analytics
LinkedIn
Facebook FQL
9. BIRT Formatting Capabilities
• Listings, cross-tab, dashboard, pixelperfect, charts
• Grouping, advanced aggregations,
sub-totals, calculations
• Multi-section and sub-reports
• Conditional sections and logic
• Full programmatic control and
scripting
• Embedded images
• Dynamic hyperlinking
• And much more!
9
Actuate Corporation © 2012
10. BIRT Productivity Aids
• Graphical layout and design
• Query and metadata editors
• Customizable cheat sheets
and templates
• Formatting builder
• Grouping builder
10
Actuate Corporation © 2012
11. BIRT Re-use and Productivity
• Library support for publishing and sharing components
• Leverages common standards
• SQL
• Java
• JavaScript
• XML
• Cascading Style Sheets
• Integrated debugger
11
Actuate Corporation © 2012
12. BIRT Output Formats
• HTML, PDF, MS Office, Open Office
• Custom emitters : CSV, Text, …
• Internationalization of labels and text
• Localization of date and numeric fields
• Support for Asian character sets and right-to-left display
Web Viewer
12
Actuate Corporation © 2012
PDF
Excel
14. High-Level BIRT Architecture
BIRT Designer
Eclipse
Designer
Eclipse
DTP,
WTP,…
Chart
Designer
Design Engine
XML
Design
Document
BIRT Engine
Generation
Services
Data
Data
14
Actuate Corporation © 2012
Charting
Engine
Data
Services
Presentation
Services
HTML
PDF
Excel
Word
PowerPoint
PostScript
…
15. High Level BIRT Architecture
DE API
Design Engine
RE API
Report Engine
CE API
Produces XML Report,
Templates, and Library
Designs
Chart Engine
Runs Reports and
produces output – PDF,
HTML, Doc, XLS, PS,
PPT Etc
Consume Chart EMF
model and produces
Chart Output. Supports
14 Main types and many
sub types. Ouputs to
PNG, JPG, BMP, SVG,
PDF, SWT, and SWING
All Engines can be ran with or without OSGi
Core BIRT Open Source Products
Report Designer
Chart Builder
Example Viewer
Can be run outside of BIRT
15
Actuate Corporation © 2012
18. BIRT Web Viewer
Copy WebViewerExample from the
runtime download to the application
server and rename it “birt”
18
Actuate Corporation © 2012
19. BIRT Web Viewer URLs
With viewer toolbar, pagination, etc.:
http://localhost:8080/birt/frameset?__report=reportName.rptdesign
As a straight HTML output:
http://localhost:8080/birt/run?__report=reportName.rptdesign
Other servlet mappings:
preview, document, output, extract
URL parameters include:
id
title
showtitle
toolbar
navigationbar
locale
format
report
document
parameterpage
pagerange
fittopage
svg
isnull
islocale
masterpage
resourceFolder
bookmark
rtl
page
overwrite
19
Actuate Corporation © 2012
20. BIRT Web Viewer URLs
Output to PDF:
http://localhost:8080/birt/frameset?__report=reportName.rptdesign&__format=p
df
To display a single report item as a reportlet:
http://localhost:8080/birt/run?__report=SD.rptdesign&__bookmark=myTable&__i
sreportlet=true
20
Actuate Corporation © 2012
21. BIRT Viewer Tag Library
Example JSP to embed viewer
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib uri="/birt.tld" prefix="birt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>My Report - JSP</title>
</head>
<body>
<birt:viewer id="birtViewer" reportDesign= "Sales Report Summary.rptdesign"
pattern="frameset"
height="450"
width="700"
format="html"></birt:viewer>
</body>
</html>
21
Actuate Corporation © 2012
22. BIRT Viewer Tag Library
Example JSP to embed parameters
…
<html>
<style type="text/css">
.class1 { background-color:#ff0000; color: #ffffff; }
</style>
<body>
Parameter Page<br>
<birt:parameterPage
id="report1"
name="page1"
reportDesign="cascade.rptdesign"
isCustom="true"
pattern="frameset">
Cascading Parameter1: <birt:paramDef id="5" name="customer" />
<br><br>
Cascading Parameter2: <birt:paramDef id="6" name="order" cssClass="class1"/>
<br><br>
<input type="submit" name="submit" value="Submit form"/>
<br><br>
</birt:parameterPage>
<br>
</body>
</html>
22
Actuate Corporation © 2012
23. Report Engine API
public class RunReport {
Example – Running a report
IReportEngine engine=null;
IReportRunnable design = null;
RunReport( String birtHome, String logFolder ) throws BirtException
{
EngineConfig config = null;
//Configure the Engine and start the Platform
config = new EngineConfig( );
config.setBIRTHome( birtHome );
//set log config
config.setLogConfig(logFolder, Level.FINE);
//start the Platform to load the appropriate plug-ins
Platform.startup( config );
//get the factory from the platform
IReportEngineFactory factory = (IReportEngineFactory)
Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
//create the engine
engine = factory.createReportEngine( config );
}
23
Actuate Corporation © 2012
24. Report Engine API
public void run(String designName, String reportDocument) throws EngineException
{
design = engine.openReportDesign( designName );
IRunTask task = engine.createRunTask( design );
task.run( reportDocument );
task.close();
}
public void shutdown()
{
engine.destroy();
Platform.shutdown();
}
public static void main( String[] args )
{
String designName = "Reports/Run/OrderStatus.rptdesign";
String reportDocument = "Reports/Run/OrderStatus.rptdocument";
String birtHome = "C:/birt-runtime-4_3_0/ReportEngine" ;
String logFolder = "Reports/Logs";
try {
RunReport rr = new RunReport( birtHome, logFolder );
rr.run( designName, reportDocument );
rr.shutdown();
} catch (Exception e) {e.printStackTrace();}
System.out.println("RunReport: I am done!");
}
24
Actuate Corporation © 2012
25. Report Engine API
public class RunReportPDF {
Example – Running and rendering a report
IReportEngine engine=null;
IReportRunnable design = null;
RunReportPDF( String birtHome, String logFolder ) throws BirtException
{
EngineConfig config = null;
//Configure the Engine and start the Platform
config = new EngineConfig( );
config.setBIRTHome( birtHome );
//set log config
config.setLogConfig(logFolder, Level.FINE);
//start the Platform to load the appropriate plug-ins
Platform.startup( config );
//get the factory from the platform
IReportEngineFactory factory = (IReportEngineFactory)
Platform.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
//create the engine
engine = factory.createReportEngine( config );
}
25
Actuate Corporation © 2012
26. Report Engine API
public void run(String designName, String reportDocument) throws EngineException
{
design = engine.openReportDesign( designName );
IRunTask task = engine.createRunTask( design );
task.run( reportDocument );
task.close();
}
public void htmlRender( String docName, String htmlDoc) throws EngineException
{
//Open a report document
IReportDocument iReportDocument = engine.openReportDocument(docName);
IRenderTask task = engine.createRenderTask(iReportDocument);
//Set Render Options
HTMLRenderOption options = new HTMLRenderOption();
options.setOutputFileName( htmlDoc );
options.setOutputFormat("html");
options.setHtmlPagination( true );
task.setRenderOption(options);
//Render Pages 2-5
//task.setPageNumber(4);
task.setPageRange("2-5");
task.render();
}
26
Actuate Corporation © 2012
27. Report Engine API
public void pdfRender( String designName, String pdfDoc) throws EngineException
{
//Open a report design - use design to modify design, retrieve embedded images etc.
IReportRunnable design = engine.openReportDesign( designName );
//Create task to run the report - use the task to execute and run the report
IRunAndRenderTask task = engine.createRunAndRenderTask( design );
//Set parameters for the report
task.setParameterValue( "Top Count", new Integer(5) );
task.setParameterValue( "Top Percentage", new Integer(25) );
task.validateParameters();
//Set rendering options - such as file output name and format, etc.
PDFRenderOption options = new PDFRenderOption( );
options.setOutputFileName( pdfDoc );
options.setOutputFormat( "pdf" );
task.setRenderOption(options);
//run the report
task.run();
}
27
Actuate Corporation © 2012
28. Report Engine API
public void shutdown()
{
engine.destroy();
Platform.shutdown();
}
public static void main( String[] args )
{
String designName = "Reports/Run/OrderStatus.rptdesign";
String reportDocument = "Reports/Run/OrderStatus.rptdocument";
String birtHome = "C:/birt-runtime-4_3_0/ReportEngine" ;
String logFolder = "Reports/Logs";
String htmlDocument = "C:/webapps/birt/OrderStatus.html";
String pdfDesignReport = "Reports/Run/TopNPercent.rptdesign";
String pdfDocument = "C:/webapps/birt/TopNPercent.pdf";
try {
RunReportPDF runReport = new RunReportPDF( birtHome, logFolder, logFlag );
runReport.run( designName, reportDocument );
runReport.htmlRender(reportDocument, htmlDocument);
runReport.pdfRender(pdfDesignReport, pdfDocument);
runReport.shutdown();
} catch (BirtException e) {e.printStackTrace();}
System.out.println("RunReport: I am done!");
}
28
Actuate Corporation © 2012
29. Report Engine API with JSF
public class birt2jsf {
Example – Report Execution
String executeReport(String param) throws EngineException
{
IReportEngine engine=null;
EngineConfig config = null;
try{
// start up Platform
config = new EngineConfig( );
config.setLogConfig("/logs", java.util.logging.Level.FINEST);
Platform.startup( config );
// create new Report Engine
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
engine = factory.createReportEngine( config );
// open the report design
IReportRunnable design = null;
design = engine.openReportDesign("C:/webapps/JSF_2/test.rptdesign");
// create RunandRender Task
IRunAndRenderTask task = engine.createRunAndRenderTask(design);
// pass necessary parameters
task.setParameterValue("Country", param);
task.validateParameters();
29
Actuate Corporation © 2012
30. Report Engine API with JSF
// set render options including output type
HTMLRenderOption options = new HTMLRenderOption();
ByteArrayOutputStream outs = new ByteArrayOutputStream();
options.setOutputStream(outs);
options.setImageHandler(new HTMLServerImageHandler());
options.setBaseImageURL("images");
options.setImageDirectory("C:/webapps/JSF_2/images");
options.setEmbeddable(true);
options.setOutputFormat("html");
task.setRenderOption(options);
// run task
String output;
task.run();
output = outs.toString();
task.close();
engine.destroy();
return output;
}catch( Exception ex){
ex.printStackTrace();
return "Error";
}
finally
{
Platform.shutdown( );
RegistryProviderFactory.releaseDefault();
}
}
}
30
Actuate Corporation © 2012
31. Report Engine API with JSF
@ManagedBean(name="birtBean")
@SessionScoped
public class BirtBean implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
public String getReport() {
birt2jsf report = new birt2jsf( );
String reportHTML = null;
try {
reportHTML = report.executeReport(name);
} catch (EngineException e) {
e.printStackTrace();
}
return reportHTML;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
31
Actuate Corporation © 2012
Example – Bean
32. Report Engine API with JSF
Example – JSP Code
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>BIRT JSF 2.0 Example</title>
</h:head>
<h:body>
<h3>Enter Country</h3>
<h:form>
<h:inputText
value="#{birtBean.name}">
</h:inputText>
<h:commandButton value="View Report" action="page-a">
</h:commandButton>
<h:outputText value="#{birtBean.report}" escape="false"/>
</h:form>
</h:body></html>
32
Actuate Corporation © 2012
33. BIRT Viewer Toolkit (BVT) – Sneak Peek
New product being released by Actuate for use with open-source (OS)
BIRT. BVT should be released soon for download on BIRT Exchange.
Key Features:
• It’s FREE!
• It uses the Actuate Viewer (Built on OS Viewer)
• More modern look and feel
• More seamless parameter entry screen
• Calendar date-picker
• It’s built on the latest BIRT version (4.3)
• Includes JavaScript API (JSAPI) AJAX library for easier integration into
applications of all types.
33
Actuate Corporation © 2012
34. Running Reports with BVT
The URL’s used with the OS viewer can still be used with BVT.
With viewer toolbar, pagination, etc.:
http://localhost:8080/BIRTViewerToolkit/frameset?__report=TableReport.rptdesign
As a straight HTML output:
http://localhost:8080/BIRTViewerToolkit/run?__report=TableReport.rptdesign
Output to PDF:
http://localhost:8080/BIRTViewerToolkit/frameset?__report=TableReport.rptdesign&__
format=pdf
To display a single report item as a reportlet:
http://localhost:8080/BIRTViewerToolkit/run?__report=SD.rptdesign&__bookmark=myT
able
34
Actuate Corporation © 2012
35. Running Reports with BVT
Parameterized report with date picker:
http://localhost:8080/BIRTViewerToolkit/frameset?__report=DynamicParameter.rptdesi
gn
What that looks like with the OS viewer:
http://localhost:8080/birt/frameset?__report=DynamicParameter.rptdesign
35
Actuate Corporation © 2012
36. BVT and JSAPI
Example – JSAPI to view a report
<html>
<head>
<script type="text/javascript" language="JavaScript
src="http://localhost:8700/BIRTViewerToolkit/jsapi"></script>
</head>
<body onload="init();">
<div id="myDivContainer" style="border-width: 1px; border-style: solid;"></div>
<script type="text/javascript" language="JavaScript">
var myViewer;
function init() {
actuate.load("viewer");
actuate.initialize( "http://localhost:8700/BIRTViewerToolkit/", null, null, null,
createViewer );
}
function createViewer() {
myViewer = new actuate.Viewer( "myDivContainer" );
myViewer.setReportName("/reports/Customer Listing.rptdesign" );
myViewer.submit();
}
</script>
</body>
</html>
36
Actuate Corporation © 2012
37. BIRT Exchange Community Site
Centralized hub for BIRT developers
• Access demos, tutorials, tips and techniques, documentation…
• Enables developers to be more productive and build applications faster
• Marketplace for applications
Explore
• Search/sort
• Rate, comment
• Forums
Download
• Documentation
• Software
• Examples
Contribute
• BIRT designs, code
• Technical tips
• Contests
37
Actuate Corporation © 2012
39. Actuate Products Built on BIRT
BIRT Designer Pro:
Enhanced emitters, HTML5 charts, flash charts, flash gadgets, flash maps,
additional datasources, progressive viewing, etc.
BIRT Interactive Viewer:
Allows end users to add columns, apply formatting, move columns, add
charts, sort, etc.
BIRT 360:
Create visually pleasing, interactive dashboards quickly an easily using BIRT
report components, HTML5 & Flash gadgets, etc.
BIRT Studio:
Ad-hoc, web-based reporting tool for business users to create reports easily,
without sending requests to IT.
BIRT iHub:
Deploy, manage, schedule, run, and distribute BIRT documents and web
pages securely and easily.
39
Actuate Corporation © 2012