# BIRT mit Java startten



## MScalli (5. Nov 2007)

Hi leut.
ich arbeite seit ner zeit mit BiRT und erstelle damit reports.
Jetzt will ich diesen Report mittels ner Java -Applikation aufrufen, aber das klappt einfach nicht .........

kann mir da wer helfen??
BITTTTEEEEEEEE !!!!

schon mal thx an alle die es versuchen.


----------



## JPKI (5. Nov 2007)

Keine Ahnung, was BIRT ist, aber meine Glaskugel sagt mir, dass du ein externes Programm aufrufen möchtest...
Schau dir mal ProcessBuilder an, oder einfach:

```
Runtime.getRuntime().exec("P:\fad\zur\Programmdatei.exe");
```


----------



## *Hendrik (5. Nov 2007)

Ich habe bisher noch nicht mit BIRT gearbeitet, aber vielleicht hilft Dir der BIRT Report Viewer weiter.


> The sample BIRT viewer is optimized for use within Eclipse for the preview operation. When used outside Eclipse, it simply acts as an example of the application you might build to run and view reports. Your report viewer application must be in Java so that it has access to the BIRT engine. The viewer can also be deployed as an Eclipse plugin in an RCP application.


----------



## Gast (5. Nov 2007)

@JPKI

BIRT ist ein Top-Level-Softwareprojekt der Eclipse-Foundation. Auch als Business Intelligence and Reporting Tools bekannt.
Damit kann man aus eclipse heraus Reports erstellen, betrachten, etc.
Bzw. aus Java-Aplikationen heraus Reports erstellen, da Birt ja auch in Java implementiert ist und es auch eine dementsprechende Api gibt.
Da wirst du keine .exe-Dateien finden. Da hat dich deine Glaskugel sauber angeschmiert.


----------



## JPKI (5. Nov 2007)

Jo, das Ding wollte ich schon längst wegschmeißen, doch ich hänge irgendwie dran :wink:


----------



## MScalli (6. Nov 2007)

ich versuch das jetzt schon ewig.
die seite mit dem birt report viewer hab ich mir schon paar mal angeschaut, aber ich weiss ehrlich nicht wie die das da meinen.
ich habe bis jetzt nen bericht (test.rptdesign), den habe ich mit birt erstellt.
wenn ich jetzt in eclipse auf viewer gehe geht das einwandfrei(oder auf view report as PDF usw.).
dann wird mir der Bericht im Viewer angezeigt. (ohne nen Server wie tomcat oder so) 

der Bericht soll ja später mal aus der java applikation aufgerufen und gefüllt werden..
ich hab ewig viele beispiele durchprobiert, aber das will bei mir nicht!!

das schlimme ist die beispiele sind sowas von verschieden das man nicht mal weiss was denn nun eigentlich nur zur ansicht dient  

ich hab mir da das komplettpaket installiert, also das gesamte eclipse mit birt(obwohl ich eclipse schon drauf hatte) damit ich alles mit drauf habe.. aber ich bin mir jetzt da nicht mehr so sicher.. denn in jedem beispiel fehlt mir ne andere import datei.

z.B. an der ich gerade bastele fehlt diese
import org.eclipse.birt.report.viewer.utilities.WebViewer;

die habe ich aber in anderen gar nicht gebraucht!!!!!!!
ausserdem muss es den viewer doch schon geben, da ich ihn ja mit ECLIPSE einwandfrei aufrufen kann..

ich weiss echt nicht mehr weiter..
hat den keiner ein beispiel mit dem man nen Bericht(es reicht ein leerer bericht.. kann auch ein hello world sein 
aufrufen kann. bis jetzt habe ich nur die .rptdesign
bin echt am verzweifeln


----------



## M.L. (6. Nov 2007)

Hallo.

Vielleicht bringt ein Blick in die Berichte zu BIRT unter http://www.eclipsemag.net/ eine Erleuchtung....


----------



## MScalli (6. Nov 2007)

@ m.l 
das schau ich mir mal an in der Zeitung da !!

@hendrik
ich hab mir jetzt tomcat drauf gemacht und kann mir das *.rptdesign file anschaun.
ist halt bisschen verschoben.
ist aber leider auch nicht das was ich suche.. 
dazu muss ich meinen report in das verzeichniss webapps von tomcat kopieren und dann so aufrufen

http://localhost:8080/birt-viewer/preview?__report=test.rptdesign&sample=my+parameter

das kann ich bestimmt auch aus meinem Programm aufrufen.. aber ich brauch es ja eh als pdf.
ich denke nicht das das die lösung meines problems ist, da ich später ja auch ein paar CSV dateien übergeben muss usw.
also die *.rptdesign kann ich hier anzeigen und dann auch als pdf speichern, aber das sollte alles im Hintergrund passieren und nicht beim aufruf des Browsers.

wenn noch wer nen link hat oder ne idee wie das geht.. oder bisschen quellcode  
.. IMMER HER MIT!!!!


----------



## *Hendrik (6. Nov 2007)

Der Report Viewer ist offensichtlich für JEE Anwendungen gedacht, bei denen die Darstellung des Reports im Browser erfolgt. 
Nach diesem Artikel



> Because the RE API is the main API responsible for generating the reports, this article will focus on the available options for its deployment. Some of the most common deployment options are listed below:
> Deploy the BIRT Viewer to a J2EE application server.
> Create a servlet that wraps the RE API and deploy it to a J2EE application server.
> Add the BIRT plugins to an existing Eclipse Rich Client Platform (RCP) application and use the BIRT Web Viewer plugin for generating and viewing reports.
> ...



benötigst Du nur die Report Engine und eine Beschreibung dazu gibts hier. (Aber wahrscheinlich wirst Du sie Dir bereits angesehen haben.)

Vielleicht ist auch ein Buch wie "Integrating and Extending BIRT" ganz hilfreich.

Edit: Hier ein Auszug aus dem o.g. Buch.


----------



## MScalli (7. Nov 2007)

joop, diese sachen kann ich bald auswendig 
aber nie verkehrt wenn man paar links mitschickt!!!

habe jetzt zwar paar sachen fertig gebracht(denk ich mal) aber BIRT will net so wie ich will.
mein Prog sieht so aus, und ich rufe nen leeren bericht auf(erst mal)


```
import java.util.HashMap;
import java.util.logging.Level;
import org.eclipse.birt.report.viewer.utilities.WebViewer; 
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.EngineConstants;
import org.eclipse.birt.report.engine.api.EngineException;
import org.eclipse.birt.report.engine.api.HTMLCompleteImageHandler;
import org.eclipse.birt.report.engine.api.HTMLRenderContext;
import org.eclipse.birt.report.engine.api.HTMLRenderOption;
import org.eclipse.birt.report.engine.api.IReportDocument;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IRunAndRenderTask;
import org.eclipse.birt.report.engine.api.IRunTask;
import org.eclipse.birt.report.engine.ir.Report;
public class ExecuteReport {

static void executeReport() throws EngineException
{
	String path = ("D:\\birt-runtime-2_2_1\\birt-runtime-2_2_1\\ReportEngine");
	String path_logfile = ("d:\\birt\\logfiles");
	IReportEngine engine=null;
	
	EngineConfig config;
	try{
		config = new EngineConfig( );
		config.setEngineHome( path );
		config.setLogConfig(path_logfile, Level.ALL);
		
		Platform.startup( config );
		System.out.println("Platform.startup wurde durchgeführt");
		IReportEngineFactory factory = (IReportEngineFactory) Platform
					.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
		engine = factory.createReportEngine( config );
		engine.changeLogLevel( Level.WARNING );
		System.out.println("nach Engine");
	}catch( Exception ex){
		System.out.println("EXCEPTION: ExecuteReport/executeReport");
		ex.printStackTrace();
		System.exit(0);
	}
	
	// run Reports *******************************************************************************************************
	String name_rptdesign = "D:/apache-tomcat-5.5.25/apache-tomcat-5.5.25/webapps/birt-viewer/test.rptdesign";
	String name_rptdocument = "D:/apache-tomcat-5.5.25/apache-tomcat-5.5.25/webapps/birt-viewer/test.rptdocument"; 
	String name_output = "D:/apache-tomcat-5.5.25/apache-tomcat-5.5.25/webapps/birt-viewer/test.html";
	
	// Methode die ein *.rptdocument generiert(geht)
	//getIRunTask(name_rptdesign, name_rptdocument, engine); 

	//Open a report design - use design to modify design, retrieve embedded images etc. 
	IReportRunnable design = engine.openReportDesign(name_rptdesign); 
			
	//Create task to run the report and render the report
	IRunAndRenderTask task = engine.createRunAndRenderTask(design); 
			
	//Set Render context to handle url and image locataions
	HTMLRenderContext renderContext = new HTMLRenderContext();
	renderContext.setImageDirectory("image");
	HashMap contextMap = new HashMap();
	contextMap.put( EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT, renderContext );
	task.setAppContext( contextMap );
			
	//Set rendering options - such as file or stream output, 
	//output format, whether it is embeddable, etc
	HTMLRenderOption options = new HTMLRenderOption();
	//options.setOutputStream(System.out);
	options.setOutputFileName(name_output);
	options.setOutputFormat(HTMLRenderOption.OUTPUT_FORMAT_HTML);
	task.setRenderOption(options);
			
	task.run();
	// ENDE run Reports **************************************************************************************************
	
	// shut down engine
	engine.shutdown();
	Platform.shutdown();
} 
private static void getIRunTask(String name_rptdesign, String name_rptdocument, IReportEngine engine) {
	IReportRunnable design;
	try {
		design = engine.openReportDesign( name_rptdesign );
		IRunTask task = engine.createRunTask(design);
		task.run(name_rptdocument);		//hier wird das *.rptdocument erzeugt
		task.close();
	} catch (EngineException e) {
		System.out.println("EXCEPTION: ExecuteReport/getIRunTask");
		e.printStackTrace();
		System.exit(0);
	}	
}
/**
 * @param args
 */
public static void main(String[] args) {
	try
	{
		System.out.println("Start <--");
		executeReport( );
		System.out.println("Ende  <--");
		System.exit(0);
	}
	catch ( Exception e )
	{
		System.out.println("EXCEPTION : ExecuteReport/Main");
		e.printStackTrace();
		System.exit(0);
	}
}

}
```

jetzt bekomme ich ne fehlermeldung die mich hoffen lässt^^
ich poste mal die ganze ausgabe


```
Start <--
07.11.2007 11:36:43 org.eclipse.birt.report.data.oda.sampledb.SampledbPlugin start
INFO: Sampledb plugin starts up. Current startCount=0
07.11.2007 11:36:43 org.eclipse.birt.report.data.oda.sampledb.SampledbPlugin init
INFO: Creating Sampledb database at location C:\DOKUME~1\sm\LOKALE~1\Temp\/BIRTSampleDB_1194431803390_1ba94d
Platform.startup wurde durchgeführt
nach Engine
07.11.2007 11:36:46 org.eclipse.birt.report.engine.api.impl.EngineTask createContentEmitter
SCHWERWIEGEND: Report engine can not create html emitter.
EXCEPTION : ExecuteReport/Main
org.eclipse.birt.report.engine.api.EngineException: Report engine fails to initialize html emitter, please make sure required libraries for this emitter are installed.
	at org.eclipse.birt.report.engine.api.impl.EngineTask.createContentEmitter(EngineTask.java:1105)
	at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:88)
	at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:68)
	at ExecuteReport.executeReport(ExecuteReport.java:74)
	at ExecuteReport.main(ExecuteReport.java:101)
```

Ich hab zu der Fehlermeldung zwar was gefunden, aber irgendwie klappt das was bei anderen geht bei mir nie 
kann mir da noch wer helfen.. bitte
Ich hab so ne masse an Jar files eingebunden das ich ich nicht denke das mir da noch eins fehlt?!?!
das prog lst sonst lauffähig.
wenn mann task.run(); auskommentiert läuft es durch. auch das erstellen der rptdocuments geht!!

@ hendrik
vielen dank für deine hilfe, hatte die sachen zwar schon paar mal durchgelesen aber wie gesagt ich bin sehr froh über jede hilfe.. ausserdem kann man sehr schnell was übersehen!!
merci!!


----------



## *Hendrik (7. Nov 2007)

Offensichtlich hast Du zuviele JARs eingebunden :wink: 

dev.eclipse.org/newslists/news.eclipse.birt/msg23582.html

Also alle JARs aus dem Plugin-Verzeichnis rausnehmen. (Bei mir läufts so ohne Fehler durch.)


----------



## MScalli (7. Nov 2007)

ich hab das auch gelesen.. das sagen sie sogar in mehr foren.
aber was soll ich denn jetzt einbinden???
ich habs schon einzeln versucht, aber dann geht irgendwie gar nichts mehr!!
dann läuft mein prog gar nicht mehr 

irgendwie sind die ganzen sachen auch doppelt und dreifach in allen möglichen ordnern..
bei dir läuft das also so, was hast du denn alles in eclipse eingebunden.. also die externel jars... und aus welchem ordner..
muss das jetzt doch mal zum laufen bringen.. das gibts doch gar net^^
lass mich jetzt bitte nicht allein


----------



## MScalli (7. Nov 2007)

lol...
gar nichts aus dem ordner plugins einbinden...
das war der ganze fehler..

ich häng hier schon tage.. denn ich musste die sachen(nach mehreren anleitungen) zuerst alle einbinden.
vielen vielen dank für deine hilfe hendrik.
thx auch an alle anderen dies probiert haben ^^
war echt kurz vorm verzweifeln..

ich hoffe der rest mit birt(parameter übergeben usw.) ist nicht so übel...
aber wenn wer nen guten link hat oder code  kann er ihn ja vorsichtshalber posten
*hehe*

gruss
MScalli


----------



## MasterTH (9. Nov 2007)

..,- ich suche einen Mscalli kann es sein das du es bist?-,..


----------

