In this example we want to build a Query that does the following:

  • Display a select box that dynamically pulls in options (via a Query).

  • Depending on what is selected, execute another Query that uses the value as a parameter.

This is what the result could look like:

To set this up, we obviously need two Queries.

Example Query: SelectOptions

FROM Country

Example Query: NestedQuery

SELECT Name, Code, Population
FROM Country
WHERE Continent = :Continent

Notice that this Query has a parameter called "Continent".

Via this parameter it will receive the value from the other Query.

We now just need to connect the two Queries using a Template.

Using the $PocketQuery Velocity API we can render our nested Query with a default parameter.

We then bind a change listener to our select, that reloads the nested Query using the PocketQuery JavaScript API, whenever a new value is selected.

Example Template for SelectOptions Query

## Name of the nested Query that we want to execute
#set($nestedQuery = "NestedQuery")
<form method="get" class="aui pq-dynamic-parameter-form" action="">
  <select class="select" id="select-continent">
    ## This will render all the continents from our outer Query into the select box
    ## We give it a default value of "Europe"
    #foreach($row in $result)
      <option value="$row.Continent"
        #if($row.Continent == "Europe")selected="selected"#end
## This Query will render the table below, taking the parameter from our select.
## We pass on the default values we chose above.
<div id="nested-query">
$PocketQuery.renderPocketQueryMacro($nestedQuery, {
  "page": $page,
  "parameters": { "Continent":"Europe" },
  "dynamicload": "true"
  // Whenever the continent select value changes, we want to execute this!
  jQuery("#select-continent").change(function() {
    var container = jQuery('#nested-query .pocketquery-dynamic-load');
    var data = PocketQuery.getDynamicLoadData(container);

    data.queryParameters = { Continent: jQuery(this).val() };

      container: container,
      data: data