User Macro and Properties Report
Asked by Couleur_Connection:

I try to use the User Macro given in this question : [https://community.atlassian.com/t5/Answers-Developer-Questions/Get-incoming-links-](https://community.atlassian.com/t5/Answers-Developer-Questions/Get-incoming-links-with-in-a-user-macro/qaq-p/538128)[with-in-a-user-macro/qaq-p/538128](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 !


Answers:
author: Davin Studer
body: 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
```

comments: author: Couleur_Connection
body: Thanks for this quick answer. It works perfectly !


author: Ulrik Schoth
body: 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](https://community.atlassian.com/t5/Answers-Developer-Questions/Get-incoming-links-with-in-a-user-macro/qaq-p/538128), 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
```

<br />

Thanks a lot and best regards,  
Ulrik


author: Ulrik Schoth
body: Hi Davin,

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

According to issue [CONFSERVER-59935](https://jira.atlassian.com/browse/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


author: Robert Eiser
body: 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!


Tags: confluence-server

server

user-macro