Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,359,939
Community Members
 
Community Events
168
Community Groups

Scriptrunner: Scripted Field to show Attachments from Linked Issues

Hi,

I am attempting to use a Scripted Field to list all of the Attachments from all Linked issues.

I'm not sure how to get the information from the Linked Issues.

Here is the Code:

import com.atlassian.jira.issue.attachment.Attachment;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.bc.project.ProjectService;
def commentManager = ComponentAccessor.commentManager
def projectService = ComponentAccessor.getComponent(ProjectService)
def attachmentManager = ComponentAccessor.getAttachmentManager()
def numberAttachments = attachmentManager.getAttachments(issue).size()
String s = "";
if(null != attachmentManager.getAttachments(issue))
{
for(Attachment att : issue.attachments)
{
s = s +"<a href=\"" + "/secure/attachment/"+att.id+"/"+att.filename+"\">"+att.filename+"</a>" + "<br>";
}
}
return s;

Here is a Mock up Of what I would like to show in the Main Ticket. The field will show Clickable URL links to all attachments from the linked issues

 

Scripted Fields Attachments on Linked Issues.png

 

Thanks!

1 answer

1 accepted

3 votes
Answer accepted
JamieA Rising Star Mar 28, 2017

Something like this:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue

def issueLinkManager = ComponentAccessor.getIssueLinkManager()

def issues = [issue] as List<Issue>
issues.addAll(issueLinkManager.getOutwardLinks(issue.id).collect {it.destinationObject})
issues.addAll(issueLinkManager.getInwardLinks(issue.id).collect {it.sourceObject})

issues.collect { issue ->
    issue.getAttachments().collect { att ->
        "<a href=\"" + "/secure/attachment/" + att.id + "/" + att.filename + "\">" + att.filename + "</a>" + "<br>"
    }
}.flatten().join("")

 

I think there is a bit more to do though... permissions checking, also attachments can have chars in their filename that are not valid in URLs, etc.

Thank you,

Is there a way to restrict the Link Display Name? We have created a custom link name SD-Blocking-Link for both ways Outward and InWard.

It will only show links with the custom name SD-Blocking-Link

I changed the script to the following -

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.IssueFieldConstants
import com.atlassian.jira.issue.fields.IssueLinksSystemField
import com.opensymphony.workflow.InvalidInputException
import webwork.action.ActionContext
def request = ActionContext.getRequest()
def params = request.getParameterMap()
def fieldManager = ComponentAccessor.getFieldManager()
def issueLinkManager = ComponentAccessor.getIssueLinkManager()
def linksSystemField = fieldManager.getField("issuelinks") as IssueLinksSystemField
def issueLinkingValue = linksSystemField.getRelevantParams(params) as IssueLinksSystemField.IssueLinkingValue
def issues = [issue] as List<Issue>
issues.addAll(issueLinkManager.getOutwardLinks(issue.id).collect {it.destinationObject})
issues.addAll(issueLinkManager.getInwardLinks(issue.id).collect {it.sourceObject})
if (! (issueLinkingValue.linkDescription == "SD-Blocking-Link" && issueLinkingValue.linkedIssues.size() > 0))
{issues.collect { issue ->
    issue.getAttachments().collect { att ->
        "<a href=\"" + "/secure/attachment/" + att.id + "/" + att.filename + "\">" + att.filename + "</a>" + "<br>"
    }
}.flatten().join("")}

 

The issue is, when it runs I am getting the following error:

java.lang.NullPointerException: Cannot invoke method getParameterMap() on null object

 

JamieA Rising Star Mar 30, 2017
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
def issueLinkManager = ComponentAccessor.getIssueLinkManager()
def issues = [issue] as List<Issue>
issues.addAll(issueLinkManager.getOutwardLinks(issue.id).findResults {
    if (it.issueLinkType.name == "SD-Blocking-Link") {
        return it.destinationObject
    }
    null
})
issues.addAll(issueLinkManager.getInwardLinks(issue.id).findResults {
    if (it.issueLinkType.name == "SD-Blocking-Link") {
        return it.sourceObject
    }
    null
})
issues.collect { issue ->
    issue.getAttachments().collect { att ->
        "<a href=\"" + "/secure/attachment/" + att.id + "/" + att.filename + "\">" + att.filename + "</a>" + "<br>"
    }
}.flatten().join("")
Like Mihai Mihai likes this

Thank you!

When I try using the above code to test something out I get an error shown on the issues.collect line which says:

expecting '>', found '-' @line 17, column 24.

Any ideas why?

Hi @JamieA 

 

The last script you posted here also looks at the attachments of the current issue and displays them. Is it possible to show just the attachments of the linked issues?

 

Thank you!

Suggest an answer

Log in or Sign up to answer
TAGS
Community showcase
Published in Jira

Online AMA this week: Your project management questions answered by Jira Design Lead James Rotanson

We know that great teams require amazing project management chops. It's no surprise that great teams who use Jira have strong project managers, effective workflows, and secrets that bring planning ...

179 views 1 6
Read article

Atlassian Community Events