@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());
@mwilliams ,
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.