# hilfe bei BIRT



## casusangelus (15. Oktober 2008)

Hi!
Ich brauche wen, der sich mit BIRT auskennt. Ich habe das programm letztens entdeckt und das tutorial durchgearbeitet, aber jetzt komme ihc nciht weiter.
ich möchte als datenquelle für einen bericht ein java programm bentuzen. dazu habe ihc eins geschrieben, was mir mehrere zufallszahlen ausgibt. wie kann ich das programm als datenquelle benutzen?
ich hoffe es kann mri jemand helfen!


----------



## Cojote (15. Oktober 2008)

Das Zauberwort nennt sich Scripted DataSource. Hier mal das Tutorial von der Eclipse Birt Seite dazu http://www.eclipse.org/birt/phoenix/examples/scripting/scripteddatasource/

Ansonsten kannst du ja nochmal nachfragen wenn du auf konkrete Probleme stößt.


----------



## casusangelus (15. Oktober 2008)

danke schön, das hat mir schonmal sehr geholfen. habe das eben ausprobiert mit einer Funktion "Zufall", die ich in dem Programm erstellt habe. funktioniert das denn auch, wenn ich nur die main funktion in dem programm habe?


----------



## Cojote (15. Oktober 2008)

In BIRT ist es ja bei einer Datenquelle wie folgt:
Du rufst ne Funktion auf (auf nem Objekt oder statisch,...). Diese Funktion liefert dir irgendwelche Rückgabewerte und die werden dann in BIRT verarbeitet.
Wenn du mit main die public static void main meinst:
Die kannst du zwar aufrufen und die wird auch ausgeführt aber sie ist eben void. d.h. du kannst dort keine Daten rausziehen. Du solltest BIRT in etwa vergleichen mit einer fremden Klasse die auf deine Java Klasse zugreift. 
Du kannst dein Java Objekt also instanziieren, bestimmte Methoden aufrufen um es z.B. in irgendeinen Zustand zu versetzen und dann per getter oder sonstwas Daten auslesen.


----------



## casusangelus (16. Oktober 2008)

ich habe ein neues problem ^^
ich habe in meinem programm die funktion quad(int x), die mir eine quadratzahl ausgeben soll. wenn ich die jetzt in das dataset einbaue mit:
DataSourceClass = new Packages.uebungen.Beispiel();
DataSource=DataSourceClass.quad(int x);
sagt er, "identifier is a reserved word".
wenn ich es so einbaue:
DataSourceClass = new Packages.uebungen.Beispiel();
DataSource=DataSourceClass.quad(x);
sagt er, "cannot find function quad.", genauso wie wenn ihc das x weglasse.
wie baue ich das richtig in das data set ein?


----------



## Cojote (16. Oktober 2008)

Die Programmierung in BIRt erfolgt mit Hilfe von Rhino Script. Rhino Script ist der Programmiersprache Java sehr ähnlich, bis auf die Tatsache, dass Rhino untypisiert ist

Du hast die Funktion public int quad(int x). wie würdest du sie in Java aufrufen? x muss natürlich einen Wert haben ansonsten ist x null und eine Funktion quad(Object o) existiert nicht. auf quad(int x) passt null nicht so ganz.

Probier mal:
x = 5;
DataSourceClass = new Packages.uebungen.Beispiel();
DataSource=DataSourceClass.quad(x);

Ich weiß nicht genau was du machen willst aber um Quadratzahlen oder sonstige Rechnungen durchzuführen bietet BIRT zahlreiche andere Möglichkeiten. Du musst also nicht jede kleinere Rechnung in ne Java Klasse auslagern. Aber ich nehme an du testest bisher nur.


----------



## casusangelus (16. Oktober 2008)

der sagt immer noch, "cannot find function quad". 

es geht mir jetzt nich unbedingt darum, quadratzahlen auszugeben, sondern ein bisschen rumzuprobieren, mit birt funktionen aus java programmen aufzurufen und quadratzahlen war jetzt das einfachste was mir eingefallen ist(da ich noch nich sooo viel kann^^)


----------



## Cojote (16. Oktober 2008)

Könntest du evtl nen Auszug aus deinen Scripts und der Java Klasse posten. Ansonsten läuft es auf raten raus.


----------



## casusangelus (17. Oktober 2008)

also ich weiß nicht wieso, aba als ihc es jetzt nochmal ausprobiert habe, hat es plötzlich funktioniert 

jetzt kommt aber gleich die nächste frage ^^
wie baue ich denn so einen bericht in ein javaprogramm ein? am besten so, dass er die daten aus dem programm kriegt und der bericht dann immer wieder erneuert wird(verständlich?). habe mir schon diese seite: http://www.eclipse.org/birt/phoenix/deploy/reportEngineAPI.php angeguckt, aba da meine englisch und programmierkenntnisse noch nicht so gut sind, habe ihc leider nicht wirklich was verstanden


----------



## Cojote (17. Oktober 2008)

Leider verstehe ich nicht so ganz was du meinst.

Wenn du BIRT in dein eigenes Java Programm integrieren möchtest warst du da auch schon auf der richtigen Seite. Die ReportEngine die du dazu in dein Programm integrieren musst ist nicht sehr leicht zu bedienen und schon gar nicht zu integrieren. 
Mehr als in der Doku steht kann ich dir leider nicht erklären und ja es ist wirklich so schwierig. BIRT ist ein riesiger Klotz. Die Integration beschränkt sich deshalb nicht auf ein paar Jars die man in den Klassenpfad legt.
Es gibt auch sehr viele Einstellungen um einen Bericht zu rendern. Die musst du BIRT in deinem Programm anhand von Objekten übergeben. Ohne sehr gute Java Kenntnisse ist die Integration nicht durchführbar in meinen Augen.


Um Berichte auszuführen ist glaube ich beim Download der ReportEngine ne .bat Datei dabei. Der kannst du auf Kommandozeilenebene per Parameter eine Berichtsdatei, das Format übergeben sowie ne Zieldatei angeben. Wäre auch ne Möglichkeit von deinem Java Programm das Teil auf Konsole zu starten und die resultierende Datei danach zu öffnen. Ist jedenfalls sehr viel einfacher als BIRT in das Programm zu integrieren.


----------



## casusangelus (17. Oktober 2008)

Cojote hat gesagt.:


> Wenn du BIRT in dein eigenes Java Programm integrieren möchtest warst du da auch schon auf der richtigen Seite. Die ReportEngine die du dazu in dein Programm integrieren musst ist nicht sehr leicht zu bedienen und schon gar nicht zu integrieren.
> Mehr als in der Doku steht kann ich dir leider nicht erklären und ja es ist wirklich so schwierig. BIRT ist ein riesiger Klotz. Die Integration beschränkt sich deshalb nicht auf ein paar Jars die man in den Klassenpfad legt.
> Es gibt auch sehr viele Einstellungen um einen Bericht zu rendern. Die musst du BIRT in deinem Programm anhand von Objekten übergeben. Ohne sehr gute Java Kenntnisse ist die Integration nicht durchführbar in meinen Augen.


ok, dann lasse ich das wohl lieber erstmal



Cojote hat gesagt.:


> Um Berichte auszuführen ist glaube ich beim Download der ReportEngine ne .bat Datei dabei. Der kannst du auf Kommandozeilenebene per Parameter eine Berichtsdatei, das Format übergeben sowie ne Zieldatei angeben. Wäre auch ne Möglichkeit von deinem Java Programm das Teil auf Konsole zu starten und die resultierende Datei danach zu öffnen. Ist jedenfalls sehr viel einfacher als BIRT in das Programm zu integrieren.


kannst du mir das vielleicht nohc ein bisschen näher erklären, wie ihc das mache und was dann da eig passiert?


----------



## casusangelus (20. Oktober 2008)

so, ihc habe (mal wieder) ein problem mit birt.
ich hab ein einem programm eine funktion, die zwar werte ausspuckt, wenn ich das programm starte, aber keinen wirklichen rückgabewert(also sie ist void und es steht auch kein return da). jetzt wollte ich aber gerne die daten, die die funktion ausspuckt, mit birt in einem bericht verarbeiten. wie mache ich das? und geht das überhaupt?
wenn ich die funktion im dataset so aufrufe, wie mit den andren funktionen vorher, sagt er immer nur, er kann die funktion nicht finden.


----------



## Cojote (20. Oktober 2008)

Hallo,



> ich hab ein einem programm eine funktion, die zwar werte ausspuckt, wenn ich das programm starte, aber keinen wirklichen rückgabewert(also sie ist void und es steht auch kein return da). jetzt wollte ich aber gerne die daten, die die funktion ausspuckt, mit birt in einem bericht verarbeiten. wie mache ich das? und geht das überhaupt?



Was bedeutet Ausspuckt? Wenn du mit ausspuckt auf Konsole ausgeben meinst: Nein das geht nicht. BIRT muss die Daten ja irgendwie "bekommen". Von Konsole auslesen kann BIRT nicht.


----------



## casusangelus (21. Oktober 2008)

ja das meinte ich. wenn ihc das programm starte, stehen die dann da inner konsole.
schade. kann ich dass denn iwie über nen umweg hinkriegen?


----------



## Cojote (21. Oktober 2008)

Wozu brauchst du den Umweg?

Du könntest dir natürlich ein Java Programm schreiben, dass dein eigentliches Java Programm startet, seine Konsolenausgaben einliest und so bearbeitet dass daraus wieder ne Liste oder ähnliches wird, die dann von dem Programm an BIRT geliefert werden. Dieses Vorgehen ist jedoch äußerst fragwürdig, tierisch aufwändig und zudem ein richtiger Performancekiller. Also Hände weg.

Ich würde viel eher das Programm umschreiben, dass es die Werte nicht auf Konsole ausgibt sondern in eine Liste oder ähnliches schreibt und sie am Ende der Funktion zurückgibt. Das lässt sich doch bestimmt irgendwie einrichten.


----------



## casusangelus (22. Oktober 2008)

ich meinte umweg, weil ich dachte, dass das gar nicht geht. naja, das mit dem programm verändern hat sich erledigt, da das programm funktionen aus nem .jar-archiv. ich wollte jetzt versuchen, die funktionen in dem scripted data source aus dem .jar-archiv aufzurufen. funktioniert das dann genauso, wie aus ner .java-datei?


----------



## Cojote (22. Oktober 2008)

Ja tut es. Das .jar ist nur eine gezippte Datei die viele .class (kompilierte java Dateien) enthält.


----------

