Discussions
Categories
Groups
Community Home
Categories
INTERNAL ENABLEMENT
POPULAR
THRUST SERVICES & TOOLS
CLOUD EDITIONS
Quick Links
MY LINKS
HELPFUL TIPS
Back to website
Home
Intelligence (Analytics)
Dynamic parametes from application.
dhruvavrao
Hi All,
I have integrated the birtreports with java application. Currently I am selecting the report generation criteria
from a jsp and then building the URL based on the criteria selected to generate the report. ie passing the already known parameters dynamically.
My current requirement is to build my jsp based on the already designed report(example.rptdesign)
I need to access those parameters in example.jsp from the application which is built in Java(JSF) ,
Ie : I have 2 reports viz report1.rptdesign
and report2.rptdesign
On click of report1 I should read the selection parameters from report1 and display in example.jsp
if report1.rptdesign has 2 selection criteria : Employee Name and Age , This must only be displayed.
if report2.rptdesign had 1 selection criteria : Salary , This must only be displayed.
Can anyone help me in this !! this is my ID dhruva.vasudevarao@arisglobal.co.in
Its urgent.!!!!!
Find more posts tagged with
Comments
JasonW
Can you write a servlet and add it to your app? Here is a generic command line class that iterates all the parameter information for a report:
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.logging.Level;
import org.eclipse.birt.core.framework.Platform;
import org.eclipse.birt.report.engine.api.EngineConfig;
import org.eclipse.birt.report.engine.api.EngineException;
import org.eclipse.birt.report.engine.api.IGetParameterDefinitionTask;
import org.eclipse.birt.report.engine.api.IParameterDefnBase;
import org.eclipse.birt.report.engine.api.IParameterGroupDefn;
import org.eclipse.birt.report.engine.api.IParameterSelectionChoice;
import org.eclipse.birt.report.engine.api.IReportEngine;
import org.eclipse.birt.report.engine.api.IReportEngineFactory;
import org.eclipse.birt.report.engine.api.IReportRunnable;
import org.eclipse.birt.report.engine.api.IScalarParameterDefn;
import org.eclipse.birt.report.model.api.CascadingParameterGroupHandle;
import org.eclipse.birt.report.model.api.ScalarParameterHandle;
public class ReportParameters {
@SuppressWarnings("
;unchecked")
static void executeReport() throws EngineException
{
HashMap parmDetails = new HashMap();
IReportEngine engine=null;
EngineConfig config = null;
try{
config = new EngineConfig( );
config.setBIRTHome("C:\\birt\\birt-runtime-2_6_2\\birt-runtime-2_6_2\\ReportEngine");
config.setLogConfig(null, Level.OFF);
Platform.startup( config );
IReportEngineFactory factory = (IReportEngineFactory) Platform
.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
engine = factory.createReportEngine( config );
}catch( Exception ex){
ex.printStackTrace();
}
//Open a report design
IReportRunnable design = engine.openReportDesign("reports/parameters.rptdesign");
IGetParameterDefinitionTask task = engine.createGetParameterDefinitionTask( design );
Collection params = task.getParameterDefns( true );
//task.getSelectionListForCascadingGroup();
Iterator iter = params.iterator( );
while ( iter.hasNext( ) )
{
IParameterDefnBase param = (IParameterDefnBase) iter.next( );
if ( param instanceof IParameterGroupDefn )
{
IParameterGroupDefn group = (IParameterGroupDefn) param;
System.out.println( "Parameter Group: " + group.getName( ) );
// Do something with the parameter group.
// Iterate over group contents.
Iterator i2 = group.getContents( ).iterator( );
while ( i2.hasNext( ) )
{
IScalarParameterDefn scalar = (IScalarParameterDefn) i2.next( );
//System.out.println("\t" + scalar.getName());
parmDetails.put( scalar.getName(), loadParameterDetails( task, scalar, design, group));
}
}
else
{
IScalarParameterDefn scalar = (IScalarParameterDefn) param;
//System.out.println(param.getName());
parmDetails.put( scalar.getName(),loadParameterDetails( task, scalar, design, null));
}
}
task.close();
engine.destroy();
Platform.shutdown();
System.out.println("Finished");
}
private static HashMap loadParameterDetails(IGetParameterDefinitionTask task, IScalarParameterDefn scalar, IReportRunnable report, IParameterGroupDefn group){
HashMap parameter = new HashMap();
if( group == null){
parameter.put("Parameter Group", "Default");
}else{
parameter.put("Parameter Group", group.getName());
}
parameter.put("Name", scalar.getName());
parameter.put("Help Text", scalar.getHelpText());
parameter.put("Display Name", scalar.getDisplayName());
//this is a format code such as > for UPPERCASE
parameter.put("Display Format", scalar.getDisplayFormat());
if( scalar.isHidden() ){
parameter.put("Hidden", "Yes");
}else{
parameter.put("Hidden", "No");
}
if( scalar.isHidden() ){
parameter.put("Hidden", "Yes");
}else{
parameter.put("Hidded", "No");
}
if( scalar.isRequired() ){
parameter.put("Is Required", "Yes");
}else{
parameter.put("Is Required", "No");
}
if( scalar.isValueConcealed() ){
parameter.put("Conceal Entry", "Yes"); //ie passwords etc
}else{
parameter.put("Conceal Entry", "No");
}
switch (scalar.getControlType()) {
case IScalarParameterDefn.TEXT_BOX: parameter.put("Type", "Text Box"); break;
case IScalarParameterDefn.LIST_BOX: parameter.put("Type", "List Box"); break;
case IScalarParameterDefn.RADIO_BUTTON: parameter.put("Type", "List Box"); break;
case IScalarParameterDefn.CHECK_BOX: parameter.put("Type", "List Box"); break;
default: parameter.put("Type", "Text Box");break;
}
switch (scalar.getDataType()) {
case IScalarParameterDefn.TYPE_STRING: parameter.put("Data Type", "String"); break;
case IScalarParameterDefn.TYPE_FLOAT: parameter.put("Data Type", "Float"); break;
case IScalarParameterDefn.TYPE_DECIMAL: parameter.put("Data Type", "Decimal"); break;
case IScalarParameterDefn.TYPE_DATE_TIME: parameter.put("Data Type", "Date Time"); break;
case IScalarParameterDefn.TYPE_BOOLEAN: parameter.put("Data Type", "Boolean"); break;
default: parameter.put("Data Type", "Any"); break;
}
ScalarParameterHandle parameterHandle = ( ScalarParameterHandle ) scalar.getHandle();
parameter.put("Default Value", scalar.getDefaultValue());
parameter.put("Prompt Text", scalar.getPromptText());
parameter.put("Data Set Expression", parameterHandle.getValueExpr());
if(scalar.getControlType() != IScalarParameterDefn.TEXT_BOX)
{
//System.out.println("dynamic parameter");
if ( parameterHandle.getContainer( ) instanceof CascadingParameterGroupHandle ){
Collection sList = Collections.EMPTY_LIST;
if ( parameterHandle.getContainer( ) instanceof CascadingParameterGroupHandle )
{
String groupName = parameterHandle.getContainer( ).getName( );
//used for Cascading parms see IGetParameterDefinitionTask.java code for comments
//task.evaluateQuery( groupName );
//Need to load this for calls to get next level.
//This just gets the first level
Object [] keyValueTmp = new Object[1];
sList = task.getSelectionListForCascadingGroup( groupName, keyValueTmp );
for ( Iterator sl = sList.iterator( ); sl.hasNext( ); )
{
IParameterSelectionChoice sI = (IParameterSelectionChoice) sl.next( );
Object value = sI.getValue( );
Object label = sI.getLabel( );
System.out.println( label + "--" + value);
}
}
}else{
Collection selectionList = task.getSelectionList( scalar.getName() );
if ( selectionList != null )
{
HashMap dynamicList = new HashMap();
for ( Iterator sliter = selectionList.iterator( ); sliter.hasNext( ); )
{
IParameterSelectionChoice selectionItem = (IParameterSelectionChoice) sliter.next( );
Object value = selectionItem.getValue( );
String label = selectionItem.getLabel( );
//System.out.println( label + "--" + value);
//Display label unless null then display value. Value is the what should get passed to the report.
dynamicList.put(value,label);
}
parameter.put("Selection List", dynamicList);
}
}
}
Iterator iter = parameter.keySet().iterator();
System.out.println("======================Parameter =" + scalar.getName());
while (iter.hasNext()) {
String name = (String) iter.next();
if( name.equals("Selection List")){
HashMap selList = (HashMap)parameter.get(name);
Iterator selIter = selList.keySet().iterator();
while (selIter.hasNext()) {
Object lbl = selIter.next();
System.out.println( "Selection List Entry ===== Key = " + lbl + " Value = " + selList.get(lbl));
}
}else{
System.out.println( name + " = " + parameter.get(name));
}
}
return parameter;
}
/**
*
@param
args
*/
public static void main(String[] args) {
try
{
executeReport( );
}
catch ( Exception e )
{
e.printStackTrace();
}
}
}
Jason
dhruvavrao
<blockquote class='ipsBlockquote' data-author="'JasonW'" data-cid="81059" data-time="1312388580" data-date="03 August 2011 - 09:23 AM"><p>
Can you write a servlet and add it to your app? Here is a generic command line class that iterates all the parameter information for a report:<br />
<br />
<br />
<br />
<br />
<br />
import java.util.Collection;<br />
import java.util.Collections;<br />
import java.util.HashMap;<br />
import java.util.Iterator;<br />
import java.util.logging.Level;<br />
<br />
import org.eclipse.birt.core.framework.Platform;<br />
import org.eclipse.birt.report.engine.api.EngineConfig;<br />
import org.eclipse.birt.report.engine.api.EngineException;<br />
import org.eclipse.birt.report.engine.api.IGetParameterDefinitionTask;<br />
import org.eclipse.birt.report.engine.api.IParameterDefnBase;<br />
import org.eclipse.birt.report.engine.api.IParameterGroupDefn;<br />
import org.eclipse.birt.report.engine.api.IParameterSelectionChoice;<br />
import org.eclipse.birt.report.engine.api.IReportEngine;<br />
import org.eclipse.birt.report.engine.api.IReportEngineFactory;<br />
import org.eclipse.birt.report.engine.api.IReportRunnable;<br />
import org.eclipse.birt.report.engine.api.IScalarParameterDefn;<br />
import org.eclipse.birt.report.model.api.CascadingParameterGroupHandle;<br />
import org.eclipse.birt.report.model.api.ScalarParameterHandle;<br />
<br />
public class ReportParameters {<br />
<br />
@SuppressWarnings("
;unchecked")<br />
static void executeReport() throws EngineException<br />
{<br />
HashMap parmDetails = new HashMap();<br />
IReportEngine engine=null;<br />
EngineConfig config = null;<br />
try{<br />
<br />
config = new EngineConfig( ); <br />
config.setBIRTHome("C:\\birt\\birt-runtime-2_6_2\\birt-runtime-2_6_2\\ReportEngine");<br />
config.setLogConfig(null, Level.OFF);<br />
Platform.startup( config );<br />
IReportEngineFactory factory = (IReportEngineFactory) Platform<br />
.createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );<br />
engine = factory.createReportEngine( config );<br />
}catch( Exception ex){<br />
ex.printStackTrace();<br />
}<br />
<br />
<br />
//Open a report design <br />
IReportRunnable design = engine.openReportDesign("reports/parameters.rptdesign"); <br />
<br />
IGetParameterDefinitionTask task = engine.createGetParameterDefinitionTask( design );<br />
Collection params = task.getParameterDefns( true );<br />
<br />
<br />
//task.getSelectionListForCascadingGroup();<br />
Iterator iter = params.iterator( );<br />
while ( iter.hasNext( ) )<br />
{<br />
IParameterDefnBase param = (IParameterDefnBase) iter.next( );<br />
<br />
if ( param instanceof IParameterGroupDefn )<br />
{<br />
IParameterGroupDefn group = (IParameterGroupDefn) param;<br />
System.out.println( "Parameter Group: " + group.getName( ) );<br />
<br />
<br />
// Do something with the parameter group.<br />
// Iterate over group contents.<br />
<br />
Iterator i2 = group.getContents( ).iterator( );<br />
while ( i2.hasNext( ) )<br />
{<br />
IScalarParameterDefn scalar = (IScalarParameterDefn) i2.next( );<br />
//System.out.println("\t" + scalar.getName());<br />
parmDetails.put( scalar.getName(), loadParameterDetails( task, scalar, design, group));<br />
}<br />
<br />
}<br />
else<br />
{<br />
<br />
IScalarParameterDefn scalar = (IScalarParameterDefn) param;<br />
//System.out.println(param.getName());<br />
parmDetails.put( scalar.getName(),loadParameterDetails( task, scalar, design, null)); <br />
<br />
<br />
}<br />
}<br />
<br />
task.close();<br />
engine.destroy();<br />
Platform.shutdown();<br />
System.out.println("Finished");<br />
}<br />
<br />
private static HashMap loadParameterDetails(IGetParameterDefinitionTask task, IScalarParameterDefn scalar, IReportRunnable report, IParameterGroupDefn group){<br />
<br />
<br />
<br />
HashMap parameter = new HashMap();<br />
<br />
if( group == null){<br />
parameter.put("Parameter Group", "Default");<br />
}else{<br />
parameter.put("Parameter Group", group.getName()); <br />
}<br />
parameter.put("Name", scalar.getName());<br />
parameter.put("Help Text", scalar.getHelpText());<br />
parameter.put("Display Name", scalar.getDisplayName());<br />
//this is a format code such as > for UPPERCASE<br />
parameter.put("Display Format", scalar.getDisplayFormat());<br />
<br />
if( scalar.isHidden() ){<br />
parameter.put("Hidden", "Yes");<br />
}else{<br />
parameter.put("Hidden", "No");<br />
}<br />
if( scalar.isHidden() ){<br />
parameter.put("Hidden", "Yes");<br />
}else{<br />
parameter.put("Hidded", "No");<br />
}<br />
if( scalar.isRequired() ){<br />
parameter.put("Is Required", "Yes"); <br />
}else{<br />
parameter.put("Is Required", "No");<br />
}<br />
if( scalar.isValueConcealed() ){<br />
parameter.put("Conceal Entry", "Yes"); //ie passwords etc<br />
}else{<br />
parameter.put("Conceal Entry", "No");<br />
}<br />
<br />
<br />
switch (scalar.getControlType()) {<br />
case IScalarParameterDefn.TEXT_BOX: parameter.put("Type", "Text Box"); break;<br />
case IScalarParameterDefn.LIST_BOX: parameter.put("Type", "List Box"); break;<br />
case IScalarParameterDefn.RADIO_BUTTON: parameter.put("Type", "List Box"); break;<br />
case IScalarParameterDefn.CHECK_BOX: parameter.put("Type", "List Box"); break;<br />
default: parameter.put("Type", "Text Box");break;<br />
}<br />
<br />
<br />
switch (scalar.getDataType()) {<br />
case IScalarParameterDefn.TYPE_STRING: parameter.put("Data Type", "String"); break;<br />
case IScalarParameterDefn.TYPE_FLOAT: parameter.put("Data Type", "Float"); break;<br />
case IScalarParameterDefn.TYPE_DECIMAL: parameter.put("Data Type", "Decimal"); break;<br />
case IScalarParameterDefn.TYPE_DATE_TIME: parameter.put("Data Type", "Date Time"); break;<br />
case IScalarParameterDefn.TYPE_BOOLEAN: parameter.put("Data Type", "Boolean"); break;<br />
default: parameter.put("Data Type", "Any"); break;<br />
}<br />
<br />
<br />
ScalarParameterHandle parameterHandle = ( ScalarParameterHandle ) scalar.getHandle(); <br />
<br />
parameter.put("Default Value", scalar.getDefaultValue());<br />
parameter.put("Prompt Text", scalar.getPromptText());<br />
parameter.put("Data Set Expression", parameterHandle.getValueExpr());<br />
<br />
if(scalar.getControlType() != IScalarParameterDefn.TEXT_BOX)<br />
{<br />
//System.out.println("dynamic parameter");<br />
<br />
if ( parameterHandle.getContainer( ) instanceof CascadingParameterGroupHandle ){<br />
Collection sList = Collections.EMPTY_LIST;<br />
if ( parameterHandle.getContainer( ) instanceof CascadingParameterGroupHandle )<br />
{<br />
<br />
String groupName = parameterHandle.getContainer( ).getName( );<br />
//used for Cascading parms see IGetParameterDefinitionTask.java code for comments<br />
//task.evaluateQuery( groupName );<br />
<br />
//Need to load this for calls to get next level.<br />
//This just gets the first level<br />
Object [] keyValueTmp = new Object[1];<br />
sList = task.getSelectionListForCascadingGroup( groupName, keyValueTmp );<br />
<br />
<br />
for ( Iterator sl = sList.iterator( ); sl.hasNext( ); )<br />
{<br />
IParameterSelectionChoice sI = (IParameterSelectionChoice) sl.next( );<br />
<br />
<br />
Object value = sI.getValue( );<br />
Object label = sI.getLabel( );<br />
System.out.println( label + "--" + value);<br />
<br />
} <br />
<br />
} <br />
}else{<br />
Collection selectionList = task.getSelectionList( scalar.getName() );<br />
<br />
if ( selectionList != null )<br />
{<br />
HashMap dynamicList = new HashMap(); <br />
<br />
for ( Iterator sliter = selectionList.iterator( ); sliter.hasNext( ); )<br />
{<br />
IParameterSelectionChoice selectionItem = (IParameterSelectionChoice) sliter.next( );<br />
<br />
Object value = selectionItem.getValue( );<br />
String label = selectionItem.getLabel( );<br />
<br />
//System.out.println( label + "--" + value);<br />
//Display label unless null then display value. Value is the what should get passed to the report.<br />
dynamicList.put(value,label);<br />
<br />
}<br />
parameter.put("Selection List", dynamicList);<br />
}<br />
}<br />
<br />
}<br />
<br />
<br />
<br />
Iterator iter = parameter.keySet().iterator();<br />
System.out.println("======================Parameter =" + scalar.getName());<br />
while (iter.hasNext()) {<br />
String name = (String) iter.next(); <br />
if( name.equals("Selection List")){<br />
HashMap selList = (HashMap)parameter.get(name);<br />
Iterator selIter = selList.keySet().iterator();<br />
while (selIter.hasNext()) {<br />
Object lbl = selIter.next();<br />
System.out.println( "Selection List Entry ===== Key = " + lbl + " Value = " + selList.get(lbl));<br />
}<br />
<br />
}else{<br />
System.out.println( name + " = " + parameter.get(name)); <br />
}<br />
}<br />
return parameter;<br />
<br />
} <br />
<br />
/**<br />
*
@param
args<br />
*/<br />
public static void main(String[] args) {<br />
try<br />
{<br />
executeReport( );<br />
}<br />
catch ( Exception e )<br />
{<br />
e.printStackTrace();<br />
}<br />
}<br />
<br />
}<br />
<br />
Jason<br /></p></blockquote>
<br />
<br />
<br />
<br />
Thanks JasonW
Will try it and let you all know on my success
dhruvavrao
<blockquote class='ipsBlockquote' data-author="'dhruvavrao'" data-cid="81077" data-time="1312433379" data-date="03 August 2011 - 09:49 PM"><p>
Thanks JasonW
Will try it and let you all know on my success
<br /></p></blockquote>
<br />
<br />
Can you help me download the required API's for this??
Datta
can anyone send me a one simple complete project regarding the above post!! pls !! its urgent
Thanks in advance
JasonW
Create a new workspace in eclipse and import the project in the attached zip file.
Update the build path to the location of your runtime download and set birt home in the code (Unless you are using 3.7).
Jason
Datta
<blockquote class='ipsBlockquote' data-author="'JasonW'" data-cid="81111" data-time="1312472892" data-date="04 August 2011 - 08:48 AM"><p>
Create a new workspace in eclipse and import the project in the attached zip file.<br />
Update the build path to the location of your runtime download and set birt home in the code (Unless you are using 3.7).<br />
<br />
Jason<br /></p></blockquote>
Thankz alot Jason.I will follow the steps and let u know aboout how it worked:)<br />
Thank you,<br />
Datta