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)
Check existence of parameters
egau
Hello,
I would like to add to all my rptdesign some generic script in the beforeFactory that modify values of parameters if they exist. So in my generic script , I first want to check if parameters exist but I don't know how to do that :
if(parameter["test"]) > doesn't work
if(parameter["test"].value != null) > doesn't work
I always got this error : Report parameter "hostgroupID" does not exist... ofc that's what I want to know ^^
So which object do I have to check ? how ?
Thanks in advance,
Regards,
Find more posts tagged with
Comments
CBR
One solution would be to first get a list of all report parameters in beforeFactory and check if the parameter is part of that list using the name of the parameter:<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
//get a list of all report parameters
var params = reportContext.getDesignHandle().getAllParameters();
//traverse that list
for(var i=0; i<params.size(); i++) {
var sParClass = params.get( i ).getClass().toString();
//we need to check if it is a real parameter and not a parameter group
if( sParClass == "class org.eclipse.birt.report.model.api.ScalarParameterHandle" ) {
//do checks here...just a demo how to get name and value
var parameterName = params.get( i ).getFullName();
var parameterValue = reportContext.getParameterValue(parameterName);
}
}
</pre>
egau
Well thanks! With this script , it actually works, I check if my parameter exist ( and write it into a log file) but I'm not able to modify them how I wanted :<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>//get a list of all report parameters
var params = reportContext.getDesignHandle().getAllParameters();
//traverse that list
for(var i=0; i<params.size(); i++) {
var sParClass = params.get( i ).getClass().toString();
//we need to check if it is a real parameter and not a parameter group
if( sParClass == "class org.eclipse.birt.report.model.api.ScalarParameterHandle" ) {
//do checks here...just a demo how to get name and value
var parameterName = params.get( i ).getFullName();
var parameterValue = reportContext.getParameterValue(parameterName);
// to split a multiselect object into list value
if(parameterName == 'multiselectparameter'){
params["multiselectparameter"].value = params["multiselectparameter"].value.join();
}
}
}</pre>
<br />
I got this error :<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>TypeError: Cannot read property "value" from undefined (/report/method[
@name="
;beforeFactory"]#23)</pre>
<br />
I usually do that in all my rptdesign with multiselect <br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>params["multiselect"].value = params["multiselect"].value.join();</pre>
<br />
and it works, but it seems not to work properly here, do you have any idea ?
CBR
Can you try <br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>
var params = reportContext.getDesignHandle().getAllParameters();
//traverse that list
for(var i=0; i<params.size(); i++) {
var sParClass = params.get( i ).getClass().toString();
//we need to check if it is a real parameter and not a parameter group
if( sParClass == "class.org.eclipse.birt.report.model.api.ScalarParameterHandle" ) {
//do checks here...just a demo how to get name and value
var parameterName = params.get( i ).getFullName();
var parameterValue = reportContext.getParameterValue(parameterName);
// to split a multiselect object into list value
if(parameterName.equals("multiselectparameter")){
params["multiselectparameter"].value = params["multiselectparameter"].value.join();
}
}
}
</pre>
egau
Same problem. But it doesn't come from the test of existence (if(parameterName == 'multiselectparameter') ) it works fine. I checked that using log file :<br />
<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>importPackage( Packages.java.io );
out = new PrintWriter( new FileWriter( "c:/testparameters.log", true ) );
[ ... ]
if(parameterName == 'multiselectparameter'){
//params["multiselectparameter"].value = params["multiselectparameter"].value.join();
out.println("Parameter multiselectparameterexists");
out.flush();
out.close();
}</pre>
<br />
And I can see "Parameter multiselectparameterexists" written when I add it to my report. It's really the ".join()" or ".value" , weird -_-.
egau
Hello,<br />
<br />
here is the solution, you were really close to, a colleague found it :<br />
<br />
<br />
<pre class='_prettyXprint _lang-auto _linenums:0'>var parameters = reportContext.getDesignHandle().getAllParameters();
//traverse that list
for(var i=0; i<parameters.size(); i++){
var currentParam = parameters.get( i );
//we need to check if it is a real parameter and not a parameter group
if( currentParam.getClass().toString() == "class org.eclipse.birt.report.model.api.ScalarParameterHandle" ) {
//do checks here...just a demo how to get name and value
var parametersName = currentParam.getName();
if(parametersName.equals('multiselect')){
params['multiselect'].value=params['multiselect'].value.join();
}
}
}</pre>
<br />
Thanks.<br />
<br />
Regards,