Birt ReportEngine Parameter

ChrisRa

Grünschnabel
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
 
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 ID:eek:rg.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
 
Ich benutze ein ScriptedDataSet dem ich ein Objekt übergebe ;)

Java:
// 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();

Java:
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
		}
	}
 

Neue Beiträge

Zurück