Script runner for setting up a component based on issue type

Ronen Erlich July 10, 2018

Hi,

I am trying to set a component (using script runner listener) baed on the issue type.

so when issue is created , if issue type is x then set up the component to 1

if issue type is y then set the components to 2 and 3

i have the following code so far:

 

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.customfields.CustomFieldUtils
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.project.Project
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.IssueInputParametersImpl
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.bc.project.component.ProjectComponentManager

def issue = event.issue as Issue
def project = issue.getProjectObject()
def componentManager = ComponentAccessor.projectComponentManager
def projectComponentManager = ComponentAccessor.getProjectComponentManager()
def component1 = projectComponentManager.findByComponentName(project.getId(), "1")

if(issue.issueType.name == "x"){
issue.setComponents([component1])
}

 

and I am getting an error "cannot find matching method for issue.set.Components in 

<com.atlassian.jira.bc.project.component.ProjectComponentManager>

 

can anyone assist please? I am using Jira software 7.3, in house solution

Thnaks 

1 answer

1 accepted

1 vote
Answer accepted
Cristian Rosas [Tecnofor]
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.
July 11, 2018

Hi  Ronen,

I haven't tested it. Put this in a post-function in the creation in the first place and use a store post function (out of the box) just in case it doesn't work:

import com.atlassian.jira.component.ComponentAccessor

def projectComponentManager = ComponentAccessor.getProjectComponentManager()

def component1 = projectComponentManager.findByComponentNameCaseInSensitive('component name')
def component2 = projectComponentManager.findByComponentNameCaseInSensitive('component name')
// whatever you need


if (issue.issueType.name == 'issuetype name') {
    issue.setComponent(component1)
} else if (issue.issueType.name == 'issuetype name') {
    issue.setComponent(component2)
}
// whatever you need

Tell us if it worked!

Ronen Erlich July 12, 2018

Hi Cristian,

I tested and it works!

Thanks so much.

though I do have another question.

I am trying to assign 2 components to 1 issue type:

if (issue.issueType.name == 'issuetype name') {
    issue.setComponent(component1)
    issue.setComponent(component2)

but only the second one is being added (because I believe it setComponent)

do you know how I can add another component? maybe:

issue.setComponent(component1, component2)

thanks,

Ronen

Cristian Rosas [Tecnofor]
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.
July 13, 2018

It works as a collection, so you need to add the value in the same variable. Try something like this:

def collection1 = projectComponentManager.findByComponentNameCaseInSensitive('component name')
collection1.add(projectComponentManager.findByComponentNameCaseInSensitive('component name'))

I think it should be enough.

Ronen Erlich July 13, 2018

tested and failed, but with a little research I was able to debug:

def collection1 = projectComponentManager.findByComponentNameCaseInSensitive('component name')
collection1.addAll(projectComponentManager.findByComponentNameCaseInSensitive('component name'))

"addAll" resolved the issue

Tested successfully!!!

Thank you so much Cristian - big help!

Michael Hayden July 3, 2020

Hi, Could I use this code if I wanted to base the Component on an issue summary?

Suggest an answer

Log in or Sign up to answer