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

How to restrict components field based on another field.

Jiri Kanicky March 2, 2020

Hi.

I have been working on component field restriction. I was not able to find much documentation, so I want to share my final product for review.

// restrict components fields based on another single select field
import com.atlassian.jira.bc.project.component.ProjectComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.onresolve.jira.groovy.user.FieldBehaviours
import groovy.transform.BaseScript

import static com.atlassian.jira.issue.IssueFieldConstants.COMPONENTS

@BaseScript FieldBehaviours fieldBehaviours

def projectComponentManager = ComponentAccessor.getProjectComponentManager()

def components = projectComponentManager.findAllForProject(issueContext.projectObject.id)
def availableComponents = []

def issueTypeField = getFieldById(COMPONENTS)

def productField = getFieldByName("Product")
def productOption = productField.getValue() as String

if ( productOption == "Infinity Fabric") {
availableComponents.addAll(components.findAll { it.name in ["Application"] })
}
issueTypeField.setFieldOptions(availableComponents)

 

I am going to have multiple IF options. Can you suggest how to make it more elegant with an options map?

Thanks.

 

1 answer

Suggest an answer

Log in or Sign up to answer
0 votes
Jiri March 2, 2020

Anyway this script is working.

// restrict components fields based on another single select field
import com.atlassian.jira.bc.project.component.ProjectComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.onresolve.jira.groovy.user.FieldBehaviours
import groovy.transform.BaseScript

import static com.atlassian.jira.issue.IssueFieldConstants.COMPONENTS

@BaseScript FieldBehaviours fieldBehaviours

def projectComponentManager = ComponentAccessor.getProjectComponentManager()

def components = projectComponentManager.findAllForProject(issueContext.projectObject.id)
def availableComponents = []

def issueTypeField = getFieldById(COMPONENTS)

def productField = getFieldByName("Product")
def productOption = productField.getValue() as String

if ( productOption == "Infinity Fabric") {
availableComponents.addAll(components.findAll { it.name in ["Application"] })
}
issueTypeField.setFieldOptions(availableComponents)
Steven Huxstep August 22, 2023
availableComponents.addAll(components.findAll { it.name in ["Application"] })

Is 'Application' the name of a component? 

TAGS
AUG Leaders

Atlassian Community Events