Adding an image to monitor progress of report
I was going through the IProgressMonitor interface available in BIRT 2.5. I would like to know how we can provide an image while the report is being generated and link the progress of that image using this IProgressMonitor interface.
Thank you.
Comments
-
If you want to use a page header, you can implement something like:
package REAPI;
import org.eclipse.birt.report.engine.api.IPageHandler;
import org.eclipse.birt.report.engine.api.IReportDocumentInfo;;
public class MyPageHandler implements IPageHandler
{
public void onPage( int pageNumber, boolean checkpoint, IReportDocumentInfo doc){
//Checkpoint is set true on page 1, 10, 50 and then multiples of 100 and end of report;
if( checkpoint == true){
System.out.println("Page " + pageNumber + " is Complete");
//can use doc to open the report document and render
//update your gui progress here
}
}
}
and then in the run task set the page handler like:
IReportRunnable design = null;
//Open the report design
design = engine.openReportDesign("Reports/crosstabscripthighlight.rptdesign");
IRunTask task = engine.createRunTask(design);
task.setPageHandler(new MyPageHandler());
task.run("output/resample/myreport.rptdocument");
OR
You could try something like the following if you want to use the IProgressMonitor:
package REAPI;
import org.eclipse.birt.report.engine.api.IEngineTask;
import org.eclipse.birt.report.engine.api.IProgressMonitor;
public class MyProgressMonitor implements IProgressMonitor {
public void onProgress(int task, int val) {
if( task == IProgressMonitor.START_PAGE){
System.out.println( "Start Page " + val);
}
if( task == IProgressMonitor.END_PAGE){
System.out.println( "End Page " + val);
}
if( task == IProgressMonitor.START_QUERY){
System.out.println( "Start Query for Element Id " + val);
}
if( task == IProgressMonitor.END_QUERY){
System.out.println( "End Query for Element Id " + val);
}
if( task == IProgressMonitor.FETCH_ROW){
System.out.println( "Fetching Row " + val);
}
if( task == IProgressMonitor.START_TASK || task == IProgressMonitor.END_TASK){
String taskStr = " Ending ";
if( task == IProgressMonitor.START_TASK)taskStr = " Starting ";
switch( val ){
case IEngineTask.TASK_RUN:
System.out.println( taskStr + " Run Task");
break;
case IEngineTask.TASK_RENDER:
System.out.println( taskStr + " Render Task");
break;
case IEngineTask.TASK_RUNANDRENDER:
System.out.println( taskStr + " RunAndRender Task");
break;
case IEngineTask.TASK_DATAEXTRACTION:
System.out.println( taskStr + " Data Extraction Task");
break;
case IEngineTask.TASK_DATASETPREVIEW:
System.out.println( taskStr + " Data Set Preview Task");
break;
case IEngineTask.TASK_GETPARAMETERDEFINITION:
System.out.println( taskStr + " Get Parameter Definition Task");
break;
case IEngineTask.TASK_UNKNOWN:
System.out.println( taskStr + " Unknown Task");
break;
}
}
}
}
Then on the engine task set the progress monitor like:
task = engine.createRunAndRenderTask(design);
task.setProgressMonitor(new MyProgressMonitor());Warning No formatter is installed for the format ipb0 -
Hi,
I have already tried using IProgressMonitor, but it shows the progress by printing on the console. I want something like a progress bar component that the user can see while the report is taking time to render. This component should be tied to IProgressMonitor. Any idea how this can be done.
Thank You0 -
@mwilliams said:
If you want to use a page header, you can implement something like:
package REAPI;
import org.eclipse.birt.report.engine.api.IPageHandler;
import org.eclipse.birt.report.engine.api.IReportDocumentInfo;;
public class MyPageHandler implements IPageHandler
{
public void onPage( int pageNumber, boolean checkpoint, IReportDocumentInfo doc){
//Checkpoint is set true on page 1, 10, 50 and then multiples of 100 and end of report;
if( checkpoint == true){
System.out.println("Page " + pageNumber + " is Complete");
//can use doc to open the report document and render
//update your gui progress here
}
}
}
and then in the run task set the page handler like:
IReportRunnable design = null;
//Open the report design
design = engine.openReportDesign("Reports/crosstabscripthighlight.rptdesign");
IRunTask task = engine.createRunTask(design);
task.setPageHandler(new MyPageHandler());
task.run("output/resample/myreport.rptdocument");
OR
You could try something like the following if you want to use the IProgressMonitor:
package REAPI;
import org.eclipse.birt.report.engine.api.IEngineTask;
import org.eclipse.birt.report.engine.api.IProgressMonitor;
public class MyProgressMonitor implements IProgressMonitor {
public void onProgress(int task, int val) {
if( task == IProgressMonitor.START_PAGE){
System.out.println( "Start Page " + val);
}
if( task == IProgressMonitor.END_PAGE){
System.out.println( "End Page " + val);
}
if( task == IProgressMonitor.START_QUERY){
System.out.println( "Start Query for Element Id " + val);
}
if( task == IProgressMonitor.END_QUERY){
System.out.println( "End Query for Element Id " + val);
}
if( task == IProgressMonitor.FETCH_ROW){
System.out.println( "Fetching Row " + val);
}
if( task == IProgressMonitor.START_TASK || task == IProgressMonitor.END_TASK){
String taskStr = " Ending ";
if( task == IProgressMonitor.START_TASK)taskStr = " Starting ";
switch( val ){
case IEngineTask.TASK_RUN:
System.out.println( taskStr + " Run Task");
break;
case IEngineTask.TASK_RENDER:
System.out.println( taskStr + " Render Task");
break;
case IEngineTask.TASK_RUNANDRENDER:
System.out.println( taskStr + " RunAndRender Task");
break;
case IEngineTask.TASK_DATAEXTRACTION:
System.out.println( taskStr + " Data Extraction Task");
break;
case IEngineTask.TASK_DATASETPREVIEW:
System.out.println( taskStr + " Data Set Preview Task");
break;
case IEngineTask.TASK_GETPARAMETERDEFINITION:
System.out.println( taskStr + " Get Parameter Definition Task");
break;
case IEngineTask.TASK_UNKNOWN:
System.out.println( taskStr + " Unknown Task");
break;
}
}
}
}
Then on the engine task set the progress monitor like:
task = engine.createRunAndRenderTask(design);
task.setProgressMonitor(new MyProgressMonitor());I'm implementing this, but i don't know where exactly:
1) Where to set my handler in the run task
2) what should i do in my handler in case i'm not writing my report my hard disk ( i'm sending the request to a servlet /frameset) ?Thanks.
0
Categories
- All Categories
- 108 Developer Announcements
- 53 Articles
- 106 General Questions
- 144 IM Services
- 43 OpenText Hackathon
- 32 Developer Tools
- 20.6K Analytics
- 4.1K AppWorks
- 8.9K Extended ECM
- 899 Cloud Fax and Notifications
- 77 Digital Asset Management
- 9.3K Documentum
- 29 eDOCS
- 120 Exstream
- 39.8K TeamSite
- 1.7K Web Experience Management