# Birt ReportEngine Parameter



## ChrisRa (26. August 2009)

Hallo zusammen,

ist es möglich in Birt beim aufruf der ReportEngine als Parameter eine JavaObjekt zu übergeben.
so z.B

protected HashMap getParameters() {
  HashMap params = new HashMap();
  params.put("PatternResult", pattern);
  return params;
 }

ich dachte das ich diesen Parameter dann so im Report.rptdesign benutzen könnte.
param["PatternResult"].value.getFilename

Das funktioniert aber nicht.
Hat jemand eine Idee?
Oder übergibt man generell kein Objekt als Parameter

mfg
Christian


----------



## zeja (27. August 2009)

Was möchtest du denn mit dem Parameter machen?


----------



## ChrisRa (27. August 2009)

Hallo 

ich würde gerne dieses Objekt als Basis für meine Reports benutzen.
Eine Alternative wäre das ich das Objekt  in einem Scripted Data Set über Hibernate lade.
Jetzt kommen wir aber auch schon zu meinem nächsten Problem.  

Im open-Script versuche ich so zu starten: 

Packages.database.DatabaseFactoryPostgres.initializeDatabaseFactoryPostgres();
factory = Packages.database.DatabaseFactoryPostgres.getDatabaseFactory();
delicts = factory.readAllDelicts();

A BIRT exception occurred.
  Plug-in Provider:Eclipse.org
  Plug-in Name:BIRT Data Engine
  Plug-in IDrg.eclipse.birt.data
  Version:2.3.2.r232_v20090521
  Error Code:data.engine.BirtException
  Error Message:A BIRT exception occurred: There are errors evaluating script "__bm_open()":
org/hibernate/HibernateException.. See next exception for more information.
There are errors evaluating script "__bm_open()":
org/hibernate/HibernateException.

Ich weiss an dieser Stelle im Moment nicht weiter.
Jetzt sind es also zwei Fragen. 
1. Macht die Übergabe eines Objektes Sinn 
2. Ist das Vorgehen über Scripted Data Set / Hibernate sinnvoller
wenn ja was muss ich beachten

mfg
Christian


----------



## zeja (27. August 2009)

Ich benutze ein ScriptedDataSet dem ich ein Objekt übergebe 


```
// Task für das Rendering erstellen
IRunAndRenderTask task = engine.createRunAndRenderTask(design);
task.setRenderOption(options);

// Bean für das DataSet zur Verfügung stellen
Map<String, Object> contextMap = new HashMap<String, Object>();
contextMap.put(CONTEXT_NAME, bean);
task.setAppContext(contextMap);

// run the report
task.run();
task.close();
```


```
public class ExportDataSet extends ScriptedDataSetEventAdapter {

	private List<String[]> data;

	private int currentRow;

	private int totalRows;

	@Override
	public void close(IDataSetInstance dataSet) {
		this.data = null;
		this.currentRow = 0;
		this.totalRows = 0;

		super.close(dataSet);
	}

	@Override
	public boolean fetch(IDataSetInstance dataSet, IUpdatableDataSetRow row) {
		if (this.currentRow >= totalRows) {
			return false;
		}

		final String[] rowData = this.data.get(currentRow);
		try {
			row.setColumnValue("date", rowData[0]);
		} catch (ScriptException e) {
			e.printStackTrace();
		}

		this.currentRow++;

		return true;
	}

	@Override
	public void open(IDataSetInstance dataSet) {
		super.open(dataSet);

		this.currentRow = 0;
		this.totalRows = this.data.size();
	}

	@Override
	public void beforeOpen(IDataSetInstance dataSet, IReportContext reportContext) {
		super.beforeOpen(dataSet, reportContext);

		final Map appContext = reportContext.getAppContext();
		this.data = (List<String[]>) appContext.get(CONTEXT_NAME);
		if (this.data == null) {
			// TODO FEhler
		}
	}
```


----------

