# Birt Programmierung



## TJ (10. Aug 2012)

Hi Leute!

Ich bin zwar schon seit einiger Zeit mit Java gut vertraut, jedoch habe ich jetzt vor Reports zu generieren, wodurch ich auf Birt gestoßen bin.

Mir ist noch nicht ganz klar, welche Möglichkeiten das Ganze genau bietet ???:L .
Die Vielseitigkeit der Darstellungen (crosstabs, graphen, ..) gefällt mir sehr gut.

Problematisch ist dabei, dass das alles per Hand manuell gemacht werden muss (Angeben der Datenfelder usw.).

Gibt es die Möglichkeit z.B. das Generieren einer Crosstab komplett zu automatisieren, indem man Angaben zur Datenquelle im Code angibt und die Tabelle auch über den Code erzeugt wird?

Für eine Antwort und ein eventuelles Beispiel wäre ich sehr dankbar


----------



## Luebeck38 (10. Aug 2012)

Keine konkrete Antwort, sondern nur einen Hinweis auf ein Forum, wo meine BIRT-Fragen immer beantwortet werden.
Business Intelligence Software - Reporting Tools - BIRT Exchange


----------



## HoaX (10. Aug 2012)

Die Reporte sind in XML gespeichert, von dem her kann man sicherlich was per Code erzeugen. Ob es auch eine entsprechende API gibt weiß ich nicht, aber dafür wurde es nicht gemacht, von dem her denke ich mal nicht. Was du machen kannst mit BIRT, ist Reporte vordefinieren und dann im Code mit einer Datenquelle verbinden und Parameter übergeben. So kann man bei uns z.B. seine Arbeitszeiten aus der Zeiterfassung einfach als PDF erzeugen lassen. Die Anwendung sagt BIRT nur welche DB-Verbindung, welcher Report und Mitarbeiter "hoax" - schwups kommt ein hübsches PDF raus. Entsprechend kann man mit BIRT auch für andere wiederkehrende Auswertungen leicht Vorlagen erzeugen.


----------



## Gast2 (11. Aug 2012)

HoaX hat gesagt.:


> Die Reporte sind in XML gespeichert, von dem her kann man sicherlich was per Code erzeugen. Ob es auch eine entsprechende API gibt weiß ich nicht, aber dafür wurde es nicht gemacht, von dem her denke ich mal nicht.



Klar man kann ein Design direkt aufrufen...


```
IReportEngine engine = BirtFactory.createReportEngine(model);
			// Open the report design
			IReportRunnable design = BirtFactory.createReport(rptdesign, model, engine);
			// Create task to run and render the report,
			IRunAndRenderTask task = engine.createRunAndRenderTask(design);
			ByteArrayOutputStream baos = new ByteArrayOutputStream();
			PDFRenderOption options = new PDFRenderOption();
			options.setOutputStream(baos);
			options.setOutputFormat(PDFRenderOption.OUTPUT_FORMAT_PDF);
			options.closeOutputStreamOnExit(true);
			task.setRenderOption(options);
			task.run();
			task.close();

			PrintDialog pd = new PrintDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell());
			PrinterData pdata = pd.open();
			PrintService[] services = PrintServiceLookup.lookupPrintServices(null, null);
			PrintService service = null;
			for (int i = 0; i < services.length; i++) {
				if (services[i].getName().equals(pdata.name)) {
					service = services[i];
					break;
				}
			}
			DocPrintJob job = service.createPrintJob();
			InputStream fin = new ByteArrayInputStream(baos.toByteArray());
			Doc doc = new SimpleDoc(fin, DocFlavor.INPUT_STREAM.AUTOSENSE, null);
			PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
			pras.add(new Copies(1));
			job.print(doc, pras);
			doc.getStreamForBytes().close();
			fin.close();
			engine.destroy();
```


----------



## HoaX (12. Aug 2012)

SirWayne hat gesagt.:


> Klar man kann ein Design direkt aufrufen...


Lies meinen Post bitte nochmal, ich habe nirgends das Gegenteil behauptet sondern sogar geschrieben dass wir auch selbst Birt mit ferigen Reporten füttern.
Ich schrieb dass es mir nicht bekannt ist dass es eine API gibt um Reporte zu erzeugen, also zu layouten etc. Nach dem wurde nämlich in der Ausgangsfrage gefragt, soweit ich das interpretieren konnte.


----------



## Gast2 (12. Aug 2012)

HoaX hat gesagt.:


> Lies meinen Post bitte nochmal, ich habe nirgends das Gegenteil behauptet sondern sogar geschrieben dass wir auch selbst Birt mit ferigen Reporten füttern.
> Ich schrieb dass es mir nicht bekannt ist dass es eine API gibt um Reporte zu erzeugen, also zu layouten etc. Nach dem wurde nämlich in der Ausgangsfrage gefragt, soweit ich das interpretieren konnte.



Oh hab ich wohl was miss interpretiert 

Ob man Templates selber programmatisch erstellen kann bezweifel ich mal.
Die Datenquelle kannst du programmatisch mitgeben, aber die Templates selber glaub nicht.

Aber warum willst du das auch machen, mit der Script-Datenquelle kannst du doch jedes Templates genügend manipulieren.

Vielleicht noch interessant für dich
http://www.oio.de/m/konf/actuate-day2010/BIRT-Best-Practices-Actuats-Day.pdf


----------



## TJ (13. Aug 2012)

danke für die Antworten bisher :toll: .
Ich will nochmal etwas genauer beschreiben, worauf es mir ankommt.
Dann könnt ihr besser beurteilen, ob und wie das möglich ist.

Mein Ziel ist die Generierung einer Kreuztabelle. Diese Tabelle ist sehr komplex und groß und muss deshalb auf bestimmte Weise strukturiert sein.
Es sollen Zeilen und Spalten nach dieser Strukturierung unterschiedlich gefärbt sein.
Außerdem muss es möglich sein, Bilder (Icons) in manche Zellen einzufügen.

Ein Beispiel:


----------



## HoaX (13. Aug 2012)

Die Beschreibung hilft nicht weiter, und alles wichtige wurde hier schon geschrieben. Wenn du mittels Regeln, bzw. in der Datenquelle per extra Spalte angeben kannst ob ein Feld ein Icon bekommt oder nicht, dann ist das sicherlich möglich. Am Besten du bastelst dir einfach mal deinen Report zusammen, dann wirst du sicherlich ehr verstehen wovon wir hier schreiben.


----------



## Sonecc (13. Aug 2012)

Also zumindest Charts können programmatisch definiert und erzeugt werden. Warum sollte das mit Reports nicht auch gehen?

Kurze Suche ergab folgende API: Design Engine API


----------

