Vishrant
Vishrant

Reputation: 16628

How to set variable values to specific cell or element in BIRT

I have declared variable in beforeFactory of BIRT Report.

For example:

BIRT Global declaration

This variable I am incrementing in table row render like:

table render

Now when all the rows are rendered I want to set above variable to specific cell/ element. I tried

document.getElementName("numberOfMobilityFilesProcessed").text = numberOfMobilityFiles;

AND

reportContext.getDesignHandle().getElementByID

but they are not working out for me.

Upvotes: 1

Views: 6913

Answers (2)

Vlad
Vlad

Reputation: 321

Ok, you have a text element displaying a number of row in a table element. The text element appears before the table in the report.

If you are using two separate tasks RunTask and RenderTask:

Add a report variable in your report (see "variable" node on the Data Explorer view). Then you can change the report variable in onCreate() event handler of the table row:

vars["numberOfSomething"] = vars["numberOfSomething"] + 1;

and access its value in an onRender() evenet handler of some text element, for instance DynamicText:

this.text = "Number of something: " + vars["numberOfSomething"];

If you are using RunAndRenderTask, you must look for another approach. In this case an order of onCreate() and onRender() calls is different. You could bind the same DataSet to the text element displaying the counter, as the one bound to the table. Than you can add an aggregation binding to the text element that will count all rows in the dataset.

Upvotes: 0

Simulant
Simulant

Reputation: 20112

I had some problems with temporaly local variables used at multiple steps of datasource scripting so I always used global persisting.

After changing your variable you convert it to a String (because only Strings can be persisted) and before editing your variable again, you load the String from persisted context and convert it to the type you want (String to Integer are automatically converted by JavaScripts dynamic typed variables, but don't forget the toString() when you are saving otherwise you will risk an error).

Because you are using reportContext.setPersistentGlobalVariable your variable is accessable in every Element of your Report.

Example:

var rowNum = reportContext.getPersistentGlobalVariable("row_number");
if(rowNum == null){
  rowNum = -1;
}
rowNum++;
reportContext.setPersistentGlobalVariable("row_number", rowNum.toString());

Upvotes: 1

Related Questions