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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.