Hi,
I can’t use contentPropertyManager anymore in user macros since i updated Confluence to 7.0.3.
Why?
I’m accessing contentPropertyManager like 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, "myProperty", "Stuff")
what i get is the plain line of code “$contentPropertyManager.setStringProperty($content, “myProperty”, “Stuff”)” as a string… in earlier versions it rendered the contentPropertyManager value i was asking for…
From the Confluence 7.0.3 JavaDocs:
This interface should be considered almost-deprecated - unless you’re retrieving or modifying existing content properties that were added using a ContentPropertyManager, you should use the entity’s ContentProperties
instead.
Have you tried that?
Alright, do you know how to use that in a user macro?
You have to do some REST stuff i guess?
I don’t use user macros that much but the docs say that you should use the entitys ContentProperties instead of using the ContentPropertyManager.
So using the provided $content
variable you could probably just call ContentEntityObject#getProperties and use ContentProperties#setStringProperty on it. After that you should be able to save your modified properties using ContentEntityObject#replaceContentProperties.
1 Like
Nice! Thank you!
Now I can save and load properties from within a user macro like this:
## @param Status:title=Status|type=string|required=true|desc=Status to display
#set ( $props = $content.getProperties() )
#set ( $newProps = $props.setStringProperty("test", $paramStatus) )
## $content.replaceContentProperties($newProps)
$content.getProperties().getStringProperty("test")
But I don’t understand how to use replaceContentProperties function properly.
Maybe I must create a new ContentProperties object and than pass it to the replaceContentProperties function instead of using the ContentProperties object of that given $content?
Well it works like this too, but normally I should use the replaceContentProperties function…
If I uncomment “## $content.replaceContentProperties($newProps)”, it just prints me the line, like if it’s not doing anything.
Wait - I missed replaceContentProperties
being protected
. Sorry for that.
Are you saying it works fine with just calling setStringProperty
? If yes, then you’re good.
Ahh alright!
And yes, without that line it’s working fine
Thanks a lot!!! You saved my day
so the final lines of code are:
#set ( $props = $content.getProperties() )
$props.setStringProperty("name", "value")
And to get it:
$content.getProperties().getStringProperty("name")
1 Like