You're on your way to the next level! Join the Kudos program to earn points and save your progress.
Level 1: Seed
25 / 150 points
Next: Root
1 badge earned
Challenges come and go, but your rewards stay with you. Do more to earn more!
What goes around comes around! Share the love by gifting kudos to your peers.
Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!
Join now to unlock these features and more
The Atlassian Community can help you and your team get more value out of Atlassian products and practices.
Hi,
Is there a way to perform a search with CQL and filter for page properties?
I know the unofficial REST interface /rest/masterdetail/1.0/detailssummary/, but with this interface I can only display the properties and not filter by them.
/rest/masterdetail/1.0/detailssummary/lines?cql=type%3Dpage&spaceKey=TEST&label=hello&countLikes=true&headings=...
I can't find anything about it under the official REST API : https://docs.atlassian.com/ConfluenceServer/rest/6.13.0/.
Hi,
if you want to access the service on the server side, you can use the same 'unofficial' API:
You find the relevant interfaces and model under com.atlassian.confluence.plugins.pageproperties.api
Example code (groovy, written for the Scriptrunner console):
import com.atlassian.sal.api.component.ComponentLocator
import com.atlassian.confluence.plugin.ConfluencePluginManager
import com.atlassian.confluence.pages.PageManager
import com.atlassian.confluence.pages.Page
import com.onresolve.scriptrunner.runner.ScriptRunnerImpl
// For accessing dynamic plugin classes
ConfluencePluginManager confluencePluginManager = ComponentLocator.getComponent(ConfluencePluginManager)
// Get test page using hard-coded page-ID...
def pageManager = ComponentLocator.getComponent(PageManager)
def testPage = pageManager.getPage(12345678)
def pagePropertyService = ScriptRunnerImpl.getPluginComponent(confluencePluginManager.getDynamicPluginClass('com.atlassian.confluence.plugins.pageproperties.api.service.PagePropertiesService'))
def report = pagePropertyService.getReportFromContent(testPage)
// All page property macro (not just page property macros with specific ID:
def macros = report.getAllMacroInstances() /*List<PagePropertiesMacroInstance>*/
// Iterate and collect maps
def map = [:]
macros.each {
map << it.getPagePropertyReportRow() /*Map<String, PageProperty>*/
}
// Now you can access specific properties in the map, value is a PageProperty object
"""
report=${report.toString()}<br/>
macros=${macros.toString()}<br/>
map=${map.toString()}<br/>
"""
Similar concept, but probably using nice features like autowiring, etc. should work for JAVA plugins. With custom CQL functions you can add your own CQL filters using page property service (not tested). The page properties use a lot of XML parsing (see DetailsMacroBodyHandler), so have an eye on the performance.
Christian
Hello Christian, thank you for this nice reply!
Could you tell me more detailed how to add my own CQL filters using pagePropertyService?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Or is there a manager or something with which I can easily read the page properties?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.