Over the last few release cycles, we have spent some tremendous
time in making the parameter input easy to use. Along with the
community and user feedback the GWT client received new capabilities
on when and how to pass parameters around.
We strive for a release it quick and release it often approach,
as we rather solve pain in a suboptimal way today than to wait for
a perfect solution that comes next year, if ever. And thus it is a
sad (and rather natural) truth that not all attempts are hitting
Especially the auto-submit feature is a creepy little bugger and
has seen numerous hacks, tweaks and finally a full make-over in
the upcoming 3.7 release.
Architecture: the inner workings of the reporting plugin in 3.7
The reporting plugin is a GWT application, and thus when first
invoked, it will initialize itself, inspect all parameters it
received from the URL and fires a non-paginating parameter-request
back to the server.
On the server, the Parameter-content-handler handles the request.
It read all values from the URL. URLs only transmit strings, so
in a second step, those raw values get parsed into Java-Objects.
The parsed values now get passed down into the reporting engine
for further validation. The engine validates the parameters and
either accepts the values as fully valid or spits out a bunch of
If all values are valid and the request asked for pagination, we
also paginate the report to return the total number of pages for
The validation and pagination result, along with a description of
all available parameters and their accepted values are sent back
to the GWT UI.
The first parameter-response now initializes the GWT application
and sets the initial state of the auto-submit feature. If the
GWT UI detects that all parameters have been accepted as
valid, and if auto-submit is enabled, it now fires a full parameter
request that paginates the report.
Subsequent updates will then follow a slightly different protocol:
If auto-submit is disabled, any user-input triggers a lightweight
parameter validation request. This ensures that list-parameters
always get selections based on the actual user input. The response
only updates the parameter definitions and values and at no point
the report gets executed.
When auto-submit is enabled, we always fire heavyweight parameter
requests, which trigger a pagination run on the server. When such
a request returns without error, we do show the report content.
This finally invokes the report-content-generator and creates
the actual report content that is shown below the parameter input
The BI-Server 3.6.0 Situation
In this version all parameter validation requests were
heavy weight requests. So every parameter validation triggered
A pagination run is only triggered if all parameter were validated
successfully. To turn the heavy weight parameter requests into a
3.7-style lightweight request, you need to add a parameter that
always validates to false, until the user explicitly selects it.
One simple way of doing that is to add a mandatory check-box
parameter with the values “Wait” and “Run” and the post-processing
=IF([p] = "WAIT"; NA(); [p])
that translates all wait into
parameter unvalidatable until the user selected “run”.
As 3.7 is a release that is all about parameters, will it also include a way to conditionally hide parameters, based on the value of previously entered parameters.
No, ’cause guess what 4.0 will be about again (among other minor things like crosstab).
Dynamically hiding parameters would be a stretch so close before the release, so I rather delay that until 4.0.
There is a release date for the version 3.7?
We are currently building a preview release that should go out at the beginning of next week.
The final release is currently scheduled at mid-October. But as usual: It’s done when it’s done. Release dates are guideline-dates of what we think is sensible – it could be later if we find something truly evil to fix first ..
We are working on some reports with Pentaho BI 3.6.1 and the Auto-Submit parameter cause us a lot of trouble. The workaround with the extra parameter work, but it’s not very elegant.
We thought, that a better way would be to change the code behind the whole thing until the new version isn’t available.
Could you give us a hint in which class is the behavior of this parameter controlled?
It would help us a lot.