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

User Macro and Properties Report

Couleur_Connection September 18, 2019

I try to use the User Macro given in this question : https://community.atlassian.com/t5/Answers-Developer-Questions/Get-incoming-links-with-in-a-user-macro/qaq-p/538128

It works fine on the page but if I put the macro in a [Page Property] macro, the links are not visible on the page properties report.

I modify the code to display the content of $incLinks variable : it contains links on the page (even inside Page Property macro) but it's empty in the page properties index.

Anyone has an idea ?

Thanks !

2 answers

1 accepted

1 vote
Answer accepted
Davin Studer
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
September 18, 2019

This is one I wrote a couple years ago. I works for me with page properties and the report macro.

Macro Name:
referring_content

Macro Title:
Referring Content

Macro Body Processing:
No macro body

Template:

## Developed by: Davin Studer
## Date created: 06/26/2014
## @noparams

#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($linkManager=$containerContext.getComponent('linkManager'))

#set($pages = $linkManager.getReferringContent($content))

#if($pages.size() > 0)
<ul class="referring-content-links">
#foreach($page in $pages)
    #if (!$page.isDeleted())
    <li><a href="$page.getUrlPath()">$page.getTitle()</a></li>
    #end
#end
</ul>
#end
Couleur_Connection September 18, 2019

Thanks for this quick answer. It works perfectly !

Like Davin Studer likes this
Ulrik Schoth November 3, 2021

Hi Davin,

since I also have the problem that the Incoming links are not displayed in the Page Properties Report when using the solution provided in another thread, I was very happy to see your solution. Unfortunately, it doesn't seem to work in the Confluence version I'm using (7.13.0 DC).

  • Do you have a tip as to what this could be?
  • Perhaps Atlassian has changed the classes?

It seems, that already the first #set command does not work. I added some lines to the code after the first five #set commands which all result in "... not defined!".

#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($linkManager=$containerContext.getComponent('linkManager'))

#if (!$containerManagerClass) <div>containerManagerClass is not defined!</div> #end
#if (!$getInstanceMethod) <div>getInstanceMethod is not defined!</div> #end
#if (!$containerContext) <div>containerContext is not defined!</div> #end
#if (!$containerManager) <div>containerManager is not defined!</div> #end
#if (!$linkManager) <div>linkManager is not defined!</div> #end


Thanks a lot and best regards,
Ulrik

Ulrik Schoth November 3, 2021

Hi Davin,

I'm afraid I've just found the root cause by myself:

According to issue CONFSERVER-59935, as of Confluence version 7.0.1, the security settings have been tightened. After that the use of class.forName() is no longer possible.

This is really frustrating... :-(

Regards,
Ulrik

0 votes
RobertE January 20, 2021

Here is a user macro solution to get incoming links based on the page property reports - where you can show the metadata that has been identified from the source page on the destination page of a link. It is a little hacky as it relies on matching the page title with the contents of the source page:

This could be enhanced by adding parameters to identify the labels, but I haven't tested that yet.

## Macro title: Incoming link with page properties
## Macro has a body: Y
## Body processing: Rendered
## Output: A list of incoming pages including the identified page properties from the source pages

##
## Developed by: Roberte
## Date created: 20/01/2021
## Installed by: Roberte

##
<p>
<ac:structured-macro ac:name="detailssummary" ac:schema-version="2" ac:macro-id="39fcccb8-78b8-4341-afb1-e5fd86a9f38e">
<ac:parameter ac:name="firstcolumn">Page title</ac:parameter>
<ac:parameter ac:name="headings">YOUR DESIRED PAGE PROPERY FIELDS</ac:parameter>
<ac:parameter ac:name="cql">label = "LABELNAME" and text ~ "$content.title"</ac:parameter>
</ac:rich-text-body>
</ac:structured-macro>
</p>

 Just wanted to share this as I have often used solutions from within this forum. Hope it will be useful for others!

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events