Discussions
Categories
Groups
Community Home
Categories
INTERNAL ENABLEMENT
POPULAR
PUBLIC CLOUD
PRIVATE CLOUD
Quick Links
MY LINKS
HELPFUL TIPS
Back to website
Home
Intelligence (Analytics)
Improvement of performance for the dynamic table
mbansal
<p>Hi, I am generating a dynamic table using the following script.</p>
<p>But it takes too long. Please suggest something to improve the performance.<br>
I think it is due to adding of individual cell in the for loop. Unfortunately org.eclipse.birt.report.model.api.SlotHanle class does not have addall() method. Is there an alternative?</p>
<p> </p>
<p><span style="font-size:12px;">function preQueryDataSet(dataSetName) {<br>
var resultIterator;<br>
var queryResult;<br>
var dataReq;<br><br>
try {<br>
<br>
var dataSourceName = reportContext.getDesignHandle().findDataSet(dataSetName).getDataSourceName(); //Get DataSource Name from DataSet<br>
<br>
importPackage(Packages.java.io);<br>
importClass(org.eclipse.birt.data.engine.api.querydefn.QueryDefinition);<br>
importClass(org.eclipse.birt.report.data.adapter.api.DataRequestSession);<br>
importClass(org.eclipse.birt.report.data.adapter.api.DataSessionContext);<br><br>
// Run preQuery data set<br>
var myconfig = reportContext.getReportRunnable().getReportEngine().getConfig(); //Get report engine configurations<br>
var dataSource = reportContext.getDesignHandle().findDataSource(dataSourceName); //Get DataSource handle for "DATA_SOURCE_NAME"<br>
var dataSet = reportContext.getDesignHandle().findDataSet(dataSetName); //Get DataSet handle for "DATA_SET_NAME"<br><br>
var scriptCtx = _jsContext.getScriptContext(); //Get JavaScript context<br>
var ctx = new DataSessionContext(DataSessionContext.MODE_DIRECT_PRESENTATION, reportContext.getDesignHandle(), scriptCtx, null); //Get DataSession context<br>
dataReq = DataRequestSession.newSession(myconfig, ctx); //Get DataRequestSessionImpl (handle/object?)<br>
var modelAdapter = dataReq.getModelAdaptor(); //Get DataModelAdapter (handle/object?)<br>
var odaDataSource = modelAdapter.adaptDataSource(dataSource); //Get OdaDataSourceAdapter (handle/object?)<br>
var odaDataSet = modelAdapter.adaptDataSet(dataSet); //Get OdaDataSetAdapter (handle/object?)<br>
<br>
odaDataSet.setDataSource(dataSourceName); //Set DataSource to "DATA_SOURCE_NAME"<br><br>
dataReq.defineDataSource(odaDataSource);<br>
dataReq.defineDataSet(odaDataSet);<br>
<br>
var queryDefinition = new QueryDefinition();<br>
queryDefinition.setAutoBinding(true);<br><br>
queryDefinition.setDataSetName(odaDataSet.getName());<br><br>
var pq = dataReq.prepare(queryDefinition);<br>
queryResult = pq.execute(null);<br>
resultIterator = queryResult.getResultIterator();<br><br>
dataSetLogic(resultIterator); //Pass resultIterator to DataSetLogic function.<br>
}<br>
finally {<br>
//Close up<br>
if (resultIterator != null) {<br>
java.util.logging.Logger.getLogger("birt.report.logger").info("resultIterator.close()");<br>
resultIterator.close();<br>
}<br>
if (queryResult != null) {<br>
java.util.logging.Logger.getLogger("birt.report.logger").info("queryResult.close()");<br>
queryResult.close();<br>
}<br>
if (dataReq != null) {<br>
java.util.logging.Logger.getLogger("birt.report.logger").info("dataReq.shutdown()");<br>
dataReq.shutdown();<br>
}<br>
}<br>
}<br><br>
function dataSetLogic(resultIterator) {<br><br>
var cc = resultIterator.getResultMetaData().getColumnCount(); //Get column count<br><br>
var rsmd = resultIterator.getResultMetaData(); //Get metadata handle.<br><br>
importPackage(Packages.org.eclipse.birt.report.model.api);<br><br>
//get a reference to the ElementFactory<br>
var elementFactory = reportContext.getReportRunnable().designHandle.getElementFactory();<br><br>
//create a new table element<br>
var rptTable = elementFactory.newTableItem("rptTable", 0, 1, 0, 0); //(java.lang.String name, int columnNum, int headerRow, int detailRow, int footerRow)<br>
rptTable.setWidth("100%"); //Set table width<br>
reportContext.getReportRunnable().designHandle.getBody().add(rptTable); //Add table element to report body<br><br><br>
for (var i = 0; i < cc; i++) {<br>
rptTable.insertColumn(i, 1);<br><br>
var label = elementFactory.newLabel("Label"); //create label<br>
label.setText(rsmd.getColumnName(i + 1)); //set label text<br><br>
var tableCell = rptTable.getHeader().get(0).getCells().get(i); //get table cell<br>
tableCell.getContent().add(label); //add label to table cell<br>
}<br><br>
var rowNumber = -1; //Start counter with -1 so first<br>
while (resultIterator.next()) { //Loop through each row in the entire Data Set (iResultIterator)<br><br>
rowNumber++; //add row number<br>
rptTable.insertRow(new RowOperationParameters(2, -1, rowNumber)); //insert row<br><br>
for (var i = 0; i < cc; i++) { //Loop through each column in the row.<br><br>
<strong> var label = elementFactory.newLabel("Label"); //create label element<br>
label.setText(resultIterator.getValue(rsmd.getColumnName(i + 1))); //set "Name" text. *Note: Add 1 as column's start with 1 rather than 0<br><br>
var tableCell = rptTable.getDetail().get(rowNumber).getCells().get(i); //get table cell<br>
tableCell.getContent().add(label); //add label to cell</strong><br>
}<br>
}<br>
}<br>
//
</span></p>
<p> </p>
<p> </p>
<p>Thanks for the suggstions.</p>
Find more posts tagged with
Comments
There are no comments yet