Frage

Ich bin mit BIRT mit einer Skript POJO Datenquelle Berichterstattung und Probleme beim Zugriff auf Berichtsparameter habe. Ich scripting alles in Java, anstatt Javascript. Der Code ist unten:

public class StockDataSetHandler extends ScriptedDataSetEventAdapter {
 ...

 @Override
 public void open(IDataSetInstance dataSet) {
  count = 0;
  StockDaoMock mockStockDao = new StockDaoMock();
  //The code below works in javascript. How can I do the equivalent
  //in Java? Where do I get params from?
  String paramValue = params["myparameter"];
  stockData = mockStockDao.getStockValues(paramValue);
 }
}

BIRT documenation bezieht sich auf die params Sammlung. Wie komme ich an, dass in Java?

Prost Tin

War es hilfreich?

Lösung

Es ist am besten mit POJO-basierten Skriptdatenquellen über die JavaScript-Schicht in dem Report Design zu arbeiten. Dies gibt Ihnen Zugang zu berichten-Context-Elemente wie Parameter und lässt Ihre Java-Objekte Agnostiker Datenanbieter bleiben.

Hier ist, wie ich in der Regel Dinge ein:

1) Java-Schicht:

1.1) Datenmodell-Klasse: A-Klasse von Datenelementen mit Etter & Getter. Keine Arbeit wird von dieser Klasse nicht getan

1.2) Controller-Klasse: baut und unterhält eine Reihe von Instanzen des Datenmodellklasse. Dies ist die Klasse, die Sie aus dem Berichtsschicht zugreifen. Diese Klasse soll einen „Aktion“ -Methode (wie getRows(...)) implementieren, die Ihren Parameter akzeptieren und gibt ein Arraylist der „Reihen“.

2) Bericht Schicht:

2.1) Erstellen Sie eine neue Scripted Datenquelle.

2.1.1 ) außer Kraft setzt das "open" script auf der Datenquelle Ihr Controller-Objekt instanziiert. Der Code wird wie folgt aussehen (Dies ist, wie Sie Ihren Parameterwert in die Java-Schicht erhalten) :

// This will track your current row later on
count = 0;

// Create instance of the Controller class
controller = new Packages.com.your.package.path.DataSetController(); 

//Load the rows (Note here is where you are able to pass your parameter into the Java layer)
rows = controller.getRows(params["myParameter"]);

2.2) Erstellen Sie einen neuen Datensatz die Scripted Datenquelle verwendet wird.

2.2.1) überschreiben Sie die holen Skript , um die Arraylist von Ihrer Controller-Klasse gebaut zu verarbeiten. Der Code wird wie folgt aussehen:

// Iterating over the ArrayList built by the Controller Class bound to the data source.
if(count < rows.size()){
       // Set the column values on the data set off the values store in the Data model class.
       row["product"] = rows.get(count).getProduct();
       row["date"] = rows.get(count).getDate();
       row["units"] = rows.get(count).getUnits();
       count++;
       return true;
}

return false;

Das sollte den Trick tun. Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top