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/.
Or is there a manager or something with which I can easily read the page properties?
if you want to access the service on the server side, you can use the same 'unofficial' API:
https://bitbucket.org/atlassian/confluence-masterdetail-plugin/src/f4da6483b21a/plugin/src/main/java/com/atlassian/confluence/?at=master
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.ComponentLocatorimport com.atlassian.confluence.plugin.ConfluencePluginManagerimport com.atlassian.confluence.pages.PageManagerimport com.atlassian.confluence.pages.Pageimport com.onresolve.scriptrunner.runner.ScriptRunnerImpl// For accessing dynamic plugin classesConfluencePluginManager 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 mapsdef 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?
It looks like you're new here. Sign in or register to get started.