Script Cross-tab in BIRT 2.2
I failed to find out how to add column name for a ’dimension’ in
cross-tab item of BIRT 2.2, so I have to use scripts to create a
cross-table. The idea here is creating table columns before the create
table event。
(You may notice that the top-left part of the cross-tab in BIRT 2.2 is
blank and could not add any other report items into it. It’s
confused!??)
importPackage(Packages.org.eclipse.birt.report.model.api);
// invode a java object to get all 'usTitles' datas from Database.
usTitleService = new Packages.com.boldtech.seed.util.ReportUsTitleUtil;
usTitles = usTitleService.getUsTitles();
reportDesignHandle = reportContext.getReportRunnable().designHandle.getDesignHandle();
reportEngine = reportContext.getReportRunnable().reportEngine;
elementFactory = reportDesignHandle.getElementFactory();
// a table in the report body
employeeTable = reportDesignHandle.getBody().getContents().get(0);
header = employeeTable.getHeader().get(0);
detail = employeeTable.getDetail().get(0);
footer = employeeTable.getFooter().get(0);
group = employeeTable.getGroups().get(0);
groupFooter = group.getFooter().get(0);
computedSet = employeeTable.getColumnBindings();
usTitleSize = usTitles.size();
var startAddColumn = 2;
for(var i=0; i < usTitleSize; i++){
//--- column title
var addedColumn = startAddColumn + i;
employeeTable.insertColumn(addedColumn,1);
cell = header.getCells().get(addedColumn);
cell.getWidth().setValue("10%");
label = elementFactory.newLabel(null);
cell.getContent().add(label);
label.setText(usTitles.get(i).getSysConfigName());
//--- column value
// "employeeTitleResult" was created to keep metric values in the 'onFetch' event of table
cs1 = StructureFactory.createComputedColumn();
cs1.setName("Column_TitleCount_" + i);
cs1.setExpression("employeeTitleResult[row.__rownum][" + i + "].value");
cs1.setDataType("any");
computedSet.addItem( cs1 );
cell = detail.getCells().get(addedColumn);
data = elementFactory.newDataItem(null);
data.setResultSetColumn("Column_TitleCount_" + i);
data.setName("ColumnValue_" + i);
data.setStyleName("cell-text-center-align");
cell.getContent().add(data);
//--- summary at group footer cell
cs1 = StructureFactory.createComputedColumn();
cs1.setName("Group_TitleCount_" + i);
cs1.setAggregateFunction("SUM");
cs1.setExpression("row[\"Column_TitleCount_" + i + "\"]");
cs1.setFilterExpression("row[\"Column_TitleCount_" + i + "\"]>=1");
cs1.setDataType("any");
cs1.setAggregateOn("ProjectGroup");
computedSet.addItem( cs1 );
cell = groupFooter.getCells().get(addedColumn);
data = elementFactory.newDataItem( null );
data.setResultSetColumn("Group_TitleCount_"+i);
data.setName("GroupValue_" + i);
data.setStyleName("cell-text-center-align");
cell.getContent().add(data);
// group summary rule: do not display '0' value.
cs1 = StructureFactory.createMapRule();
cs1.setTestExpression("row[\"Group_TitleCount_" + i + "\"]");
cs1.setOperator("le");
cs1.setValue1("0");
data.getPropertyHandle("mapRules").addItem(cs1);
//--- summary at footer cell
cs1 = StructureFactory.createComputedColumn();
cs1.setName("Grand_TitleCount_" + i);
cs1.setAggregateFunction("SUM");
cs1.setExpression("row[\"Group_TitleCount_" + i + "\"]");
cs1.setFilterExpression("row[\"Group_TitleCount_" + i + "\"]>=1");
cs1.setDataType("any");
computedSet.addItem( cs1 );
cell = footer.getCells().get(addedColumn);
data = elementFactory.newDataItem( null );
data.setResultSetColumn("Grand_TitleCount_" + i);
data.setName("GrandValue_" + i);
data.setStyleName("cell-text-center-align");
cell.getContent().add(data);
// footer summary rule: do not display '0' value.
cs1 = StructureFactory.createMapRule();
cs1.setTestExpression("row[\"Grand_TitleCount_" + i + "\"]");
cs1.setOperator("le");
cs1.setValue1("0");
data.getPropertyHandle("mapRules").addItem(cs1);
}