Column Selection - Dynamic


This advanced example is about a custom scripting based way to provide dynamic column selection. This is based on the Column Selection examples and assume you have followed those steps first. We use a simple table to make it easier to demonstrate the scripting.

Experience required

Skills - if you do not have the following skills, do not attempt this example. Learn the basics separately and then come back here.

  • You should already be experienced with some form of scripting like with groovy
  • You should be familiar with using the Run macro and using checklist input fields
  • You should have a bit of understanding of wiki markup




Run Macro Configuration

  • Likely you will want to select Automatically render body on display (autoRun) so the table will be displayed with the default columns initially
  • Add a checklistfieldcalledcolumns to the Replace field list (replace) that contains pairs matching column numbers to column names



The script will need to be customized for your specific use. This is just a simple example. The groovy macro needs to set the Output format (output) to wiki.

def includePage = 'Examples:table page'   // customize to point to your SPACE:Page title
def columnTypes = ['S','S','S','S','S']   // customize to set the default column types for all columns
def selectedColumns = '$columns'.split(',') // assumes run macro is configured using the columns replacement variable name
def moreTablePlusParameters = ''  // customize if you need some additional table plus parameters - must be in standard wiki parameter notation!
// For each column that was NOT selected, replace the default column type for that entry to hide
for (int i = 1; i <= columnTypes.size(); i++) {
    if (!selectedColumns.contains(i.toString())) {
        columnTypes[i - 1] = 'H'

// Build the wiki markup for the include page 
def StringBuilder builder = new StringBuilder()
def listToSeparatedString(list) {
    StringBuilder builder = new StringBuilder()
    list.each { element ->
    return builder.toString()