tdi120 Posted November 2, 2009 Share Posted November 2, 2009 Hi guys,first of all, amazing job! I just love JasperReports, and how it all integrates with ireport and JasperServer. I have used this solution for building up a load testing reporting server, and until now, everything run just perfect. Last week i started optimizing the reports, and i got myself in the following problem, for which i could not find a solution till now.First of all, i am running Ireport and JasperServer 3.5.0What i am trying to do is the following:I have an input control in the repository. the type is "multi select query"This query returns some id's from the database. (like 1,2,3,4,5,6...)My first report uses this input control, and is the starting report. the user can select one id, or multiple, depending on what he wants to analyse.Suppose i would like to see report 1 with id's 3,4 and 5.Everything works flawless here. I am now trying to do a drill down report, by sending the input control above as a collection.Therefore, i have my item linking with the following parameters:Hyperlink Type: ReportExecutionrun_id: $P{run_id} Where run_id is the input control, and is defined in the first and second report as a parameter of type " collection "The query in the second report looks like this:select id,testrun_id from performance where $X{IN,testrun_id,run_id}order by id Now, when trying to run the second report from the first report, using the hyperlink, i can clearly see that the collection values are not passed in the url. When opening the second report, the run_id isn't selected (as an input control) If i print out the value, using $P{run_id}.toString(), the value is nullI have tried this also with lists, still no result.If i use a String parameter in the first report, and assign it the value $P{run_id}.toString(), and use this in the hyperlink parameter (as string of course), the url looks like this:http://jasperserver:8080/........&string_run_id=[1,+2]The notation is already unusable, so i cannot use this workaround. Another thing that i tried, was assigning a local parameter, of type list, with the default expression of:new ArrayList(Arrays.asList(new Integer[] {new Integer(25260), new Integer(25261)}))When i run the second report with this parameters, again, the values are not transmitted. I see two problems here: Is it possible at all to send collections as parameters, and use them furtheron in a query, with expressions like $X(IN,val_to_compare,passed_val) If yes, should the values of the collections be visible in the url? How should a collection look like ? If i try putting values manually, it works with one value, like "&run_id=24", but any combination of multiple values, like "&run_id=24,25,26" will fail"I gave this problem more than two days of my time, and i begin to think that there is a bug somewhere.I also want to mention that collection parameters WORK in SUBREPORTS ( as i said,my problem is with drill-down reports)Keep up the good work.Hope somebody can answer my problem. all other forums and blogs did not.Regards,Alex Link to comment Share on other sites More sharing options...
Giulio Toffoli Posted November 2, 2009 Share Posted November 2, 2009 Hi Alex,I actually never tries using a Collection over a drill down, but I think the best solution would be to transform your collection in a string when it is passed as parameter, and converted in a collection when you are in the report.Here is my hint:1. Create a simple class to transform in a string a collection of ids: the result should be something like 1,2,3,4,5,6,72. Create simple class to transform in a Collection a string of ids [hint: Arrays.toList( mystring.split(",") ) ]Now we have a way to send a collection into a parameter of type String, and a way to populate a second parameter from the first one:$P{param1} <-- String$P{param2} <-- Collection, Default expression (($P{param1} != null) ? MyClass.toCollection( $P{param1} ) : nullThis should solve the problem.Giulio Link to comment Share on other sites More sharing options...
tdi120 Posted November 4, 2009 Author Share Posted November 4, 2009 Hi Giulio, thanks for replying.I think your solution makes sense. I will try that as soon as i find some spare time.In the meanwhile, i went with the simpler solution:I am converting the collection into a string, and format it accordingly for my query. As noticed when printing out the collection into a string, the format is:[value, +value1, +value2]So the only thing i needed to do was to get rid of the brackets. The pluses and whitespaces will make no difference in the sql query.Therefore i used a string parameter as hyperlink parameter, with the following expression:(($P{myid}.toString()).replace(‘[',' ')).replace(']‘,’ ‘)This will now return the parameters i need in the proper format, something like:http://jasperserver:8080/jasperserver/flow.html?_flowId=viewReportFlow&reportUnit=%2Freports%2FPerformance%2FClassloading&coltostring=+25261%2C+25260%2C+25259+&reportLocale=enProblem solved, will return with an answer for your solution also.Thanks a lot once more!Alexandru Ersenie Link to comment Share on other sites More sharing options...
semmelhaack Posted October 20, 2014 Share Posted October 20, 2014 I work with Jaspersoft Studio 5.6 and try to pass multiple parameters to an X{IN ..} clause. Is there a new solution? Or do I have the described solution? If yes how to I create the collection? Link to comment Share on other sites More sharing options...
akash.sky96 Posted May 17, 2016 Share Posted May 17, 2016 Hi Alexandru Ersenie,I am also stuck the same problem but I have a question if iI passed URL by converting collection parameter to string and removing brackets it still not select parameter from multi-select for e.g my parameter after your simpler solution looks like http://jasperserver:8080/jasperserver/flow.html?view&runRemote=true&LocationID=1&coltostring=4060,4070,4080still not selecting any value from muliselect parameter value.please reply back alexander.Thanks a lot once more!Akash Yadav Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now