Create
cancel
Showing results for 
Search instead for 
Did you mean: 
Sign up Log in

Getting and setting content properties via user macro not working anymore

dominicfinke February 6, 2020

Hey community,

maybe someone out there can help me out on this one. I've written a small user macro to set certain content properties in order to get/display them (via a different user macro) somewhere on a Confluence page.

The whole setup worked like a charm until I upgraded to the latest Confluence version and installed a reverse proxy with SSL before the Tomcat. The whole system is still working flawlessly (application links to JIRA/Bitbucket, other macros etc.)... but something seems to have broken the macro.

This is the macro itself (don't mind the "tollgate_step macro", which is simply some fancy CSS stuff):

## Macro title: SWTollGate
## Macro has a body: N
## Body processing:
## Output: Selected output option
##
## Developed by: Dominic Finke
## Date created: 06/03/2018
## Installed by: Dominic Finke

## @param swstep:title=SW TG Step|type=enum|enumValues=TG1,TG2,TG3,TG4,TG5|default=TG1|desc=SW TollGate Step
## @param swstepduedate:title=SW Step Due Date|type=date|default=|desc=Due Date Of This SW TollGate Step - Format dd-mm-yyyy

#set($returnstatus="InProgress")
#foreach ($mflabel in $content.getLabels())
#if($mflabel.toString()=="$paramswstep.toLowerCase()")
#set($returnstatus="Done")
#end
#end
<ac:structured-macro ac:macro-id="663211e4-2bb1-40fa-afff-55b919fc1b47" ac:name="tollgate_step" ac:schema-version="1">
<ac:parameter ac:name="title">$paramswstep</ac:parameter>
<ac:parameter ac:name="status">$returnstatus</ac:parameter>
</ac:structured-macro>
<p><b>Due: $paramswstepduedate</b></p>

#set ($containerManagerClass=$content.class.forName('com.atlassian.spring.container.ContainerManager'))
#set ($getInstanceMethod=$containerManagerClass.getDeclaredMethod('getInstance',null))
#set ($containerManager=$getInstanceMethod.invoke(null,null))
#set ($containerContext=$containerManager.containerContext)
#set ($contentPropertyManager=$containerContext.getComponent('contentPropertyManager'))

$contentPropertyManager.setStringProperty($content, "dueDate$paramswstep", "$paramswstepduedate")

When rendering on a page, it should look / was looking like this:

2020-02-06_13h46_51.png

But now it looks like this:

2020-02-06_13h47_59.png

Something is clearly messed up and I can't figure out what it is. Any ideas? 

 

Cheers,

Dom

1 answer

1 accepted

0 votes
Answer accepted
dominicfinke July 28, 2020

Okay... almost forgot this. Just in case someone else has an issue like that - I already stumbled over the solution.

Turns out that Atlassian made it way more easy to get a hold of the properties in newer Confluence versions. 

This:

#set ($containerManagerClass=$content.class.forName('com.atlassian.spring.container.ContainerManager'))
#set ($getInstanceMethod=$containerManagerClass.getDeclaredMethod('getInstance',null))
#set ($containerManager=$getInstanceMethod.invoke(null,null))
#set ($containerContext=$containerManager.containerContext)
#set ($contentPropertyManager=$containerContext.getComponent('contentPropertyManager'))

$contentPropertyManager.setStringProperty($content, "dueDate$paramswstep", "$paramswstepduedate")

can now be achieved by this: 

$content.getProperties().setStringProperty("dueDate$paramswstep", "$paramswstepduedate")

After removing the gazillion lines and put in this one-liner, everything is working normal again. Awesome! :D

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events