acessando parâmetros quando se escreve uma fonte de dados BIRT script em java
Pergunta
Eu estou usando BIRT relatórios com uma fonte de dados POJO roteiro e estou tendo parâmetros de relatório problemas para acessar. Estou scripting tudo em Java, em vez de javascript. O código está abaixo:
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);
}
}
documenation de BIRT refere-se à coleção parâmetros. Como faço para se apossar do que em Java?
Felicidades Tin
Solução
É melhor trabalhar com fontes de dados scripts baseados em POJO através da camada de JavaScript no design do relatório. Isto dá-lhe o acesso a elementos relatório ao contexto como parâmetros e folhas seus objetos Java para permanecer provedores de dados agnósticos.
Aqui está como eu geralmente definir as coisas:
1) Camada Java:
1,1) Dados Classe Modelo: Uma classe de elementos de dados com setters e getters. Sem o trabalho é feito por esta classe
1,2) Controlador Classe: Constrói e mantém um conjunto de instâncias de uma classe modelo de dados. Esta é a classe que você irá acessar a partir da camada Report. Esta classe deve implementar um método de "ação" (como getRows(...)
) que irá aceitar o seu parâmetro e retornar um ArrayList das "linhas".
2) Relatório da camada:
2.1) Criar uma nova fonte de dados baseado num guião.
2.1.1 ) Substituir o script "aberto" na fonte de dados para instanciar o objeto controlador. O código será parecido com este (Isto é como você começa o seu valor de parâmetro para a camada de 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) Criar um novo conjunto de dados usando a fonte de dados no script.
2.2.1) Substituir o buscar roteiro para processar o ArrayList construído por sua classe de controlador. O código será parecido com este:
// 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;
Isso deve fazer o truque. Boa sorte!