filter component list based on issue type

Aron Felberbaum June 28, 2016

I need help  setting up a behavior to  filter list of components available by issue type.

3 answers

1 accepted

1 vote
Answer accepted
JamieA
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.
June 29, 2016

Hint: A cascading select is not the right solution. 

You can use something like the following behaviour, as an initialiser IIRC:

import com.atlassian.jira.bc.project.component.ProjectComponent
import com.atlassian.jira.bc.project.component.ProjectComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.config.ConstantsManager
import com.onresolve.jira.groovy.user.FormField

ProjectComponentManager projectComponentManager = ComponentAccessor.getProjectComponentManager()
ConstantsManager constantsManager = ComponentAccessor.getConstantsManager()

def pid = getIssueContext().getProjectId()
def components = projectComponentManager.findAllForProject(pid)
assert components*.name.containsAll(["Comp1", "Comp2", "Comp3"]) // must have these components

def Map issueTypeToComponents = [
    "Bug": ["Comp1", "Comp2"],
    "Task": ["Comp3"],
];

FormField formComponent = getFieldById("components")

def issuetypeId = issueContext.getIssueTypeId()

String issueType = constantsManager.getIssueTypeObject(issuetypeId).getName()

if (issueTypeToComponents.keySet().contains(issueType)) {
    List relevantComponents = issueTypeToComponents[issueType] as List
    def Map fieldOptions = [:]

    components.findAll { ProjectComponent pc ->
        relevantComponents.contains(pc.getName());
    }.each {ProjectComponent pc ->
        fieldOptions.put(pc.getId() as String, pc.getName())
    }

    formComponent.setFieldOptions(fieldOptions)
}
Aron Felberbaum June 29, 2016

Getting the following error while trying to save behavior:

Compilation failure: startup failed: Script1.groovy: 29: unable to resolve class ProjectComponent @ line 29, column 20. }.each {ProjectComponent pc -> ^ Script1.groovy: 27: unable to resolve class ProjectComponent @ line 27, column 32. components.findAll { ProjectComponent pc -> ^ 2 errors
JamieA
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.
June 29, 2016

updated my answer

Aron Felberbaum June 30, 2016

Script does not work as an initialiser (no errors in log file)

Script works when mapped to the issue type field with some issues.

  • If I change the issue type it would no validate the current selected component.
  •  Components with spaces don't show in the list.

 

Antonio January 20, 2021

Thank you very much @JamieA , it works and was very helpful.

0 votes
Deleted user June 29, 2016

Thanks Jamie, too much coding. Hope it helps Aron. Thanks.

0 votes
Deleted user June 28, 2016

Hint: Cascading field.

Suggest an answer

Log in or Sign up to answer