blob: 1b6124a29b6acd5d435d70925c0eafe0ae0033fb [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 transitional//EN">
<html>
<head>
<title>Deploying BIRT</title>
<link rel="stylesheet" href="../style/compose.css" type="text/css"/>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<p class="head">Integrating BIRT</p>
<p class="subhead">Integrating BIRT with PHP</p>
<h1>Motivation</h1>
<p>
BIRT is designed to be integrated into a J2EE web application. But, what if your
chosen development environment is something else, such as PHP? Can you still use
BIRT? Yes, you can.&nbsp; This page discusses how to use BIRT from PHP, but the techniques apply to
any server-side scripting environment.<p>
It turns out that the Eclipse website itself uses PHP for its web infrastructure.
This note explains what the BIRT team discovers as we figure out how to
integrate BIRT reporting with the PHP website infrastructure.</p>
<h1>Setup</h1>
<p>
PHP has the ability to call Java classes. So, one integration option is to have
the PHP engine call BIRT directly. However, this would require changes to
Eclipse web server. Another option is to host BIRT on its own app server, such
as Tomcat, and use the <a href="viewer-use.html">BIRT Viewer URLs</a> to work
with BIRT.<p>
The first step is to <a href="viewer-deploy.html">install Tomcat and the BIRT
viewer</a>. Let's assume that you've set up Tomcat on the same machine as the
web server running Apache, and that Tomcat listens on port 8080. Once the setup
works, we're ready to focus on the PHP side.<h1>
Running a Report</h1>
<p>
Next step is to run a report from within a PHP script. Let's assume we have a report named <code>test.rptdesign</code> stored
in <code>C:/temp</code>.
We use a browser redirect to run the report. The redirect appears in an HTML
header. Headers must be written before adding any content to the page:</p>
<pre class="code-block">$fname = &quot;c:/temp/test.rptdesign&quot;;
// Redirect browser
$dest = &quot;http://localhost:8080/birt-viewer/run?__report=&quot;;
$dest .= urlencode( realpath( $fname ) );
header(&quot;Location: $dest&quot; );
</pre>
<p>
The name of the report is given as an absolute path, but a relative path is also
allowed once you set up the <code>BIRT_VIEWER_REPORT_ROOT</code>
configuration variable in the BIRT viewer web app's <code>web.xml </code>file. Be sure to
encode the file name for use in a URL.</p>
<p>That's all there is to it!</p>
<h1>Passing Parameters</h1>
<p>Suppose your report takes parameters. The test report above has one parameter
called <code>sample</code>. We simply add them to the report URL in the form
described in <a href="viewer-use.html">Using the Report Viewer</a>.</p>
<p>
<pre class="code-block">$fname = &quot;c:/temp/test.rptdesign&quot;;
$paramValue = &quot;Hi there!&quot;;
// Redirect browser
$dest = &quot;http://localhost:8080/birt-viewer/run?__report=&quot;;
$dest .= urlencode( realpath( $fname ) );
$dest .= &quot;;sample=&quot; . urlencode( $paramValue );
header(&quot;Location: $dest&quot; );
</pre>
<p>
The parameter value must also be encoded when placed into the URL.</p>
<h1>Parameter Form</h1>
<p>Ideally, we could use PHP to create a UI form that prompts for the report
parameters. The BIRT viewer creates this form in Java using information in the
report design. Unfortunately, at present, there is no way to retrieve the raw
parameter descriptions from the BIRT viewer using a URL. Instead, there are two alternatives
we can use.</p>
<p>First, if we know the parameters ahead of time, we can design a custom form
in PHP that prompts the user for them. This works if we have a small number of
reports, or if we need to create a specialized parameter page for each report
anyway.</p>
<p>Second, we can let the BIRT viewer display the parameter page using the
<code>frameset</code> URL.</p>
<h1>Generating Reports Dynamically</h1>
<p>Finally, PHP provides one additional BIRT integration option: the ability to
generate report designs dynamically for a specific task. For example, suppose you
have a bug tracking system, and you'd like your user to create their own reports
via the web. You can ask the user for the columns to display, then use PHP to create a BIRT report design customized
to display those columns. PHP is
ideal for this: it allows us to insert scripting directly into HTML. Since a
BIRT design is XML, and XML is close enough to HTML for PHP, we can &quot;trick&quot; PHP
into generating a BIRT report design instead of an HTML page.</p>
<p>To generate a report design, do the following:</p>
<ul>
<li>Create a BIRT report design typical of the kind of report you want to
create.</li>
<li>Create a PHP template file that contains this design. Insert the contents
of the design file in place of the HTML you'd usually put into a PHP file.</li>
<li>Redirect PHP's output from the template file into a report design file.</li>
<li>Use PHP to generate BIRT XML for the table headings and cells the user wants. Use your
report design as a template for what is needed. Consult the ROM spec for
details on various elements and properties.</li>
<li>Within the data set in your template, create an SQL query that fetches the required columns.
(Works with other data set types as well.)</li>
<li>Use the code above to redirect the browser to run that report using the
BIRT viewer.</li>
</ul>
<p>The following PHP code redirects the output of a PHP page, <code>template.inc</code>,
into a report design called <code>temp.rptdesign</code>:</p>
<pre class="code-block">ob_start( );
require &quot;template.inc&quot;;
$page = ob_get_contents( );
ob_end_clean( );
$fw = fopen( &quot;temp.rptdesign&quot;, &quot;w&quot; );
fputs( $fw, $page, strlen( $page ) );
fclose( $fw );
</pre>
</p>
</body></html>