Page Tamplates injecting Form Field values into macro argument

Mike Siekkinen February 12, 2012

I'd like to create some templates injecting various macros as part of the template format. I feel the main answer to my question is going to be ReadTheManual, so if I just need to be pointed to the right docs that's fine.

When I go to create a page template my options seem very limited. I can only use WikiMarkup and FormFields for variables. Can I insert a TableOfContents using wikimarkup? The macro doc page for this only talks about using the RTE editor to Insert -> Other Macro while editing a normal page. Is there anyway to specify this macro should be inserted w/ wiki mark up?

The other thing I was interested in doing was using the template variable FormField prompts for some place holder values. However, from best I can tell from practice and reading exmples, it just prompts you for the literal value and then places it inline where the prompt was placed in the template.

What I want to do is prompt for a couple values and then use these variable names in some JQL queries for the Jira Issues macro (which again leads back to my first issue of not being able to find how to put macros in templates to begin with).

5 answers

1 accepted

1 vote
Answer accepted
Daniel Brice
Contributor
July 25, 2013

In Confluence 4 when you can specify a variable say @JQL@ outside of your macro as well as inside your macro, and you'll be given the chance to set it when you create the page, and the same JQL will be used in both spots. However that functionality is no longer in Confluence 5. For that discussion see: How do you add template variables as macro parameters or in plain text macro bodies?

2 votes
Adam Barylak
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
September 9, 2016

I figured since we solved this recently, i would add our official solution to this request which allows to inject any number of variables into any JQL filter in a Confluence Template.  Below is the how-to as well as some usage notes i wrote for our company:

First we start out with determining the current syntax of the JQL Issues/Filter macro in confluence:

  1. Install or Enabled the “Confluence Source Editor” plugin
  2. Create new page
  3. Add the JIRA Issue/Filter macro
  4. Use a simple basic query
  5. Click the “<>” button to view the source of the page.
  6. Copy the JIRA Issue/Filter macro syntax to a text editor, e.g.

    &lt;p&gt;
      &lt;ac:structured-macro ac:macro-id="5a45704b-a904-4440-bdc0-da68a22d5802" ac:name="jira" ac:schema-version="1"&gt;
        &lt;ac:parameter ac:name="server"&gt;JIRA&lt;/ac:parameter&gt;
        &lt;ac:parameter ac:name="columns"&gt;key,summary,type,created&lt;/ac:parameter&gt;
        &lt;ac:parameter ac:name="maximumIssues"&gt;20&lt;/ac:parameter&gt;
        &lt;ac:parameter ac:name="jqlQuery"&gt;assignee = abarylak and resolution is EMPTY &lt;/ac:parameter&gt;
        &lt;ac:parameter ac:name="serverId"&gt;c8001771-0b52-30e0-9703-562a2820710f&lt;/ac:parameter&gt;
      &lt;/ac:structured-macro&gt;
    &lt;/p&gt;

Then we need to use the above syntax (a little modified) and use that for our macro.

  1. Create a macro with 2 parameters: maxRows, columns
  2. Remove the macro-id from the above syntax
  3. Modify the $body variable to remove unnecessary white space using trim() and html paragraph tags (see below)
  4. Inject the $body into the jqlQuery element in the above syntax
  5. NOTE: The “serverId” parameter may change server to server, so you must get that ID from your current server you want to deploy this to via the source editor plugin.
  6. Results are as follows:

    ## Macro title: JQL Filter Allowing Variables
    ## Macro has a body: Y
    ## Body processing: Rendered
    ## Output: JIRA Issues/Filter Macro w/ injected variables
    ##
    ## Developed by: Adam Barylak
    ## Date created: 2016-05-27
    ## Installed by: Adam Barylak
    
    
    ## This macro will prompt for max number of rows and the column option, then the body will require the JQL with injected variables
    ## @param maxRows:title=Max Rows|type=int|required=true|default=20|desc=Enter the max rows, anything above 1000 will only display 1000 rows.
    ## @param columns:title=Columns|type=string|required=true|default=key,summary,type,status,assignee|desc=Enter  the columns you want returned.  Must be separated by commas, all lowercase, and no quotes. e.g. key,summary,assignee,test author,reporter
    #set ($body = $body.replaceAll("\Q&lt;p&gt;\E",""))
    #set ($body = $body.replaceAll("\Q&lt;/p&gt;\E",""))
    #set ($body = $body.trim())
    &lt;p&gt;
    &lt;ac:structured-macro ac:name="jira" ac:schema-version="1"&gt;
        &lt;ac:parameter ac:name="server"&gt;JIRA&lt;/ac:parameter&gt;
        &lt;ac:parameter ac:name="columns"&gt;$paramcolumns&lt;/ac:parameter&gt;
        &lt;ac:parameter ac:name="maximumIssues"&gt;$parammaxRows&lt;/ac:parameter&gt;
        &lt;ac:parameter ac:name="jqlQuery"&gt;$body&lt;/ac:parameter&gt;
        &lt;ac:parameter ac:name="serverId"&gt;c8001771-0b52-30e0-9703-562a2820710f&lt;/ac:parameter&gt;
    &lt;/ac:structured-macro&gt;
    &lt;/p&gt;

Create the macro in confluence with the following options or similar (change as needed):

  • Macro Name: jira_issue_filter_vars
  • Macro Title: JQL Filter Allowing Variables
  • Description: Insert entire JQL query in body of macro.  Inject template variables as needed.  If quotes needed around variable, insert variable first, then surround variable with quotes.
  • Categories: Reporting
  • Macro Body Processing: Rendered

How to use JQL Filter Macro in Template with Variables:

  1. Get your query working in JIRA in Advanced mode (text based) with your filter(s) for a single run.
  2. Copy advanced JQL text to notepad or clipboard.
    1. Notes for format:
      1.  Do not include any line breaks in the JQL
      2. Ensure all whitespaces are spaces and not tabs or other characters
      3. Ensure all special characters such as parenthesis or quotes are basic text (not the special characters sometimes used by MS Word or MS Outlook)
      4. If all else fails, manually re-type the JQL using temporary placeholders for the variables, then using the “$” keyboard command to place the variables into the JQL statement where necessary
  3. Create template in Confluence with any header level variables needed. (you can create variables with the gui, but using them later requires you to type $ then the variable name or copying and pasting.  If you use the UI again, it will add an additional $ sign to the variable therefore making it a new variable and it won’t work.)
  4. Add the “JQL Filter Allowing Variables” macro with appropriate options. (it is located in the Reporting category)
    1. Max Rows: only allows a max of 1000
    2. Columns: you may need to use a normal JIRA Issue macro and configure it with your specific columns, then view the source to determine the correct name of some fields.  However, the rule so far is that there are no spaces except what is in the field name, and all fields are lowercase, and not surrounded by quotes.  Examples of some fields: key, summary,related requirement/s,test case type,test author
  5. In the body of the macro, paste in your entire JQL query from step 2
    ConfMacro1.png
  6. Inject your variable or variables into the JQL.
    ConfMacro2.png
  7. If you need to include quotes around variable to support spaces in variable text, add them after injecting the variable(s) into the query.
    ConfMacro3.png
  8. Using this method you can inject multiple variables if needed.
    ConfMacro4.png
  9. Save your template and use as needed.

 

Hopefully this helps others accomplish this same task.  This ends up being really useful if you need to repeat a bunch of JQL filters for different things on different pages in Confluence and you don't have to store these filters as saved filters in JIRA either.

Marcin Gebski June 12, 2017

This approach worked for me on Confluence 6. Thanks for posting!

Konstantin Shtennikov August 15, 2017

Thanks for decision!!!

We used this to set param for PocketQuery in template

1 vote
Joe Clark
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
February 13, 2012

You can see the doco for inserting macros using wiki markup by looking at the older Confluence 3.5 documentation (Confluence 4 is the first version of Confluence that is not wiki markup-based).

That table of contents macro, for example, is here: http://confluence.atlassian.com/display/CONF35/Table+of+Contents+Macro#TableofContentsMacro-UsagewiththeWikiMarkupEditor

Mike Siekkinen February 13, 2012

Unfortunately this does not seem to work when attempting to design space level template. A preview with the {toc} style markup results in

Error formatting macro: toc: java.lang.NullPointerException 

And yes, I am using 4.0 :(

Joe Clark
Atlassian Team
Atlassian Team members are employees working across the company in a wide variety of roles.
February 13, 2012

Sorry, that's a different bug (https://jira.atlassian.com/browse/CONF-23346)

The toc macro doens't work in template preview mode, but it should work when you actually create a page using the template.

0 votes
congming wang July 11, 2012

Execuse me, did you solve the problem that using template variable in macro?

0 votes
congming wang July 11, 2012

Execuse me. did you sovle the problem that using template variable in maro? i want to use variable of template into marcor to do some logic things, but have not found way. If you have some nice methods, please share to me, thanks very much.

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events