2009-09-24 4 views
1

J'utilise les rapports BIRT avec une source de données POJO scriptée et j'ai du mal à accéder aux paramètres du rapport. Je suis en train de tout écrire en Java, plutôt que de javascript. Le code est ci-dessous:accéder aux paramètres lors de l'écriture d'une source de données BIRT scriptée dans java

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); 
} 
} 

La documentation de BIRT fait référence à la collection params. Comment puis-je obtenir cela en Java?

Vive Tin

Répondre

9

Il est préférable de travailler avec des sources de données scriptés à base POJO via la couche JavaScript dans la conception de rapports. Cela vous donne accès à des éléments de contexte de rapport comme des paramètres et laisse vos objets Java pour rester des fournisseurs de données agnostiques.

Voici comment je régler les choses en général vers le haut:

1) Java couche:

1.1) Modèle de données de classe: Une classe d'éléments de données avec les organismes & getters. Aucun travail n'est effectué par cette classe

1.2) Classe de contrôleur: crée et maintient un tableau d'instances de la classe de modèle de données. C'est la classe à laquelle vous accéderez à partir de la couche de rapport. Cette classe doit implémenter une méthode "action" (comme getRows(...)) qui acceptera votre paramètre et retournera une ArrayList des "rangées".

2) Couche du rapport:

2.1) Créer une nouvelle source de données scriptée.

2.1.1) Remplacer les script "ouvert" sur la source de données à instancier votre objet contrôleur. Le code ressemblera à ceci (Voici comment vous obtenez votre valeur de paramètre dans la couche Java):

// 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) Créer un nouvel ensemble de données en utilisant la source de données scriptée. 2.2.1) Remplacer le par le script d'extraction pour traiter ArrayList construit par votre classe de contrôleur. Le code ressemblera à ceci:

// 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; 

Cela devrait faire l'affaire. Bonne chance!

+0

J'ai essayé votre chemin mais en obtenant l'erreur ci-dessous: Impossible d'exécuter le script dans la fonction __bm_FETCH(). Source: ------ "+ if (count

+0

J'ai besoin de définir une variable séparée pour params ["myParameter"]. – lwpro2

Questions connexes