Workshop:Integration von JasperReports in ADempiere

From ADempiere
Jump to: navigation, search
This Wiki is read-only for reference purposes to avoid broken links.

Einführung

Dieser Workshop fand auf dem Linuxtag 2008 statt und wurde von User:nwessel gehalten. Ziel war es, Know-How über Jasper in die Deutsche Community zu bringen.

Voraussetzung

Ziel

Austauschen des Standardberichts für einen Verkaufsbericht durch einen JasperReport

Vorgehensweise

Jasper Bericht erstellen

Berichtsassistent1.png

  • Header Report: Assistenten starten (Datei -> Berichtsassistent)
    • Datenquelle mit dem org.postgresql.Driver anlegen (Button: Neu)
    • query: select * from c_order;

Berichtsassistent5.png

  • Felder c_order_id und description hinzufügen

Bericht starten.png

  • testen ohne Datenquelle mit "Bericht starten" (Build -> Report starten)
    • Bericht wird ohne Daten angezeigt (nur Layout)
  • testen mit Datenquelle mit "Bericht starten (Aktive Verbindung nutzen)"
    • Sämtliche Aufträge werden angezeigt

Parameter1.pngParameter2.png

  • Parameter "C_Order_ID" hinzufügen (Gross-/Kleinschreibung beachten für die Parameterübergabe aus ADempiere)
    • Haken bei interaktiv abfragen um testen zu können
  • Paramenter in Datenquelle übernehmen (Bearbeiten -> Report Anfrage)
    • where c_order_id = $P{C_Order_ID}
  • testen - bei Abfrage der C_Order_ID "100" eingeben
    • Bericht enthält nur den Auftrag mit der ID 100

Subreport1.png

  • Felder in PageHeader rücken
  • Subreport anlegen
    • Icon Subreport anklicken
    • Bereich für Subreport malen
    • neuen Bericht erstellen

Subreport2.pngSubreport3.png

    • Query: Select * from c_orderline;
    • Felder raussuchen
    • wichtig: Tabellen Layout
    • Parameter c_order_id anlegen (im Subreport)
    • Paramenter in SQL Query eintragen - where c_order_id = $P{c_order_id} (Bearbeiten -> Report Anfrage)

Subreport verknuepfung.png

  • Verknüpfung zwischen Header und Subreport
    • Parameter im Header Report anlegen wie Datei ohne .jasper (Beispiel: "Auftrag_subreport0") mit Typ String
    • Doppelklick auf den Subreport-Bereich im Header Report
    • Reiter Subreport (anderer)
      • Parameter in Feld "Ausdruck für Unterreport" eintragen, der genauso heißt wie die Datei ohne .jasper
      • auf "Hinzufügen" klicken um c_order_id als Subreport-Parameter zu übergeben
  • Im Header Report den Parameter Subreport_Dir löschen

Diese Art der Verknüpfung funktioniert nur wenn der Report aus ADempiere heraus gestartet wird! Nicht wundern, wenn in der Vorschau aus IReport der Subreport nicht eingebunden wird. Zum Testen in IReport kann einfach der Name des Subreports + .jasper (in Anführungszeichen) als Ausdruck für den Unterreport angegeben werden ("Auftrag_subreport0.jasper").

Vorgehensweise bei Sub-Subreports

Bei tiefer verschachtelten Reports (Subreport der einen weiteren Subreport beinhaltet) reicht es nicht aus im Subreport einfach nur einen Parameter mit dem gleichen Namen wie dem Sub-Subreport anzulegen und im "Ausdruck für Unterreport" einzutragen. Zusätzlich muss dieser Parameter vom Hauptreport an den Subreport übergeben werden:

  • Im Hauptreport einen Parameter mit dem Namen des Sub-Subreports anlegen (Typ String)
  • Nach Doppelklick auf den Subreport im Reiter 'Subreport (anderer)'
    • auf "Hinzufügen" klicken und einen Subreport Parameter mit dem Namen des Sub-Subreports anlegen
    • als Ausdruck für den default Wert $P{Sub-SubreportName} eintragen
  • Im Subreport wie oben beschrieben vorgehen um den Sub-Subreport einzubinden

Einbindung in ADempiere

  • System Admin: Reports & processes öffnen
  • neuen Prozess anlegen
    • Show help: Bei Belegen muss hier Run silently - Take Defaults stehen
    • JasperReport: Hier steht der JasperReport als angehängtes Attachments in der Syntax "attachment:"<Dateiname>
      • anderer prefix kann z.B. http sein
      • ressource: erwartet kompilierte .jar Datei im Adempiere lib-Verzeichnis
  • an den Prozess sämtliche Attachments wie .jasper file hinterlegen
  • an den Prozess eine leere Datei (Textdatei mit einem Zeilenumbruch) namens Berichtsname_en_US.properties hängen
  • Achtung: Für jede Sprache wird eine weitere Textdatei benötigt (Berichtsname_de_DE.properties usw.)
  • in Tab Parameter wechseln
    • DB Column Name: enthält den DB-Spaltenname in Klartext
    • System Element: enthält AD_element, das übergeben werden soll
    • Reference: String einstellen
    • Default Logic: Enthält System Element Name mit der Syntax "@"<system element>"@"
    • wichtig: Groß- und Kleinschreibung bei Systemelement beachten!
  • In Mandant wechseln =>System Admin =>General Rules => Printing => Print Format
  • Neuen Orderheader anlegen
    • in Feld Jasper Process den vorher definierten Prozess hinterlegen
    • Tablenamen übernehmen
  • Druckformat in DocType in Feld Print Format das neue Druckformat hinterlegen

Für Fenster ohne DocType wie z.B. Mail Template oder Request

  • System Admin: Jasper Prozess anlegen (wie oben)
  • Application Dictionary -> Window, Tab & Field
    • Fenster wählen aus dem gedruckt werden soll (z.B. Request)
    • Tab wählen aus dem gedruckt werden soll
    • Den neuen Jasper Process im Feld 'Process' setzen

English Versions