Zugriff auf Parameter, wenn eine Skript BIRT Datenquelle in Java-Schreiben
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
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!