How to get checkbox value with scriptrunner in post-function?

I need to use scriptrunner to create number of sub-task based on checkbox value. According to an example in Atlassian Answers, I copied following code in my script with some of my modification:

============================================================

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.customfields.option.LazyLoadedOption

// get checkboxes fields value

def subComponentFld = getFieldByName("Additional Access")
customField = customFieldManager.getCustomFieldObject(subComponentFld.getFieldId())
config = customField.getRelevantConfig(getIssueContext())
options = optionsManager.getOptions(config)
def optionsToSelect = options.findAll { it.value in ["Email Required", "Network Login Required", "SAP Access Required"] }

if (optionsToSelect ???  ) { }

 

==============================================================

Problem encountered:

1) scriptrunner cannot find matching method for "getFieldByName". Which extra library need to be imported?

2) I guess the value has been read into optionsToSelect , but how to check? 

 

I am very new to JIRA script. Please help!

Thanks lots!!!!!!!!!!!

 

 

 

 

 

3 answers

1 accepted

This widget could not be displayed.

You can get what checkboxes have been selected by using: 

import com.atlassian.jira.component.ComponentAccessor

def issue = ComponentAccessor.getIssueManager().getIssueObject("ISSUE-1")
 
def customField = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Additional Access");
def selectedValues = customField.getValue(issue)*.value
 
if ("Email Required" in selectedValues) {
	// Do something
}
...

Thanks lot!!!!!!!!!!!

This widget could not be displayed.

Hi - The following example is a post function script which reads custom field [in this case checkbox] values and create subtasks based on selected values. The script contains important inline comments which explain code lines or functions:

import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueInputParameters
import com.atlassian.jira.project.Project
import groovy.transform.Field
import com.atlassian.jira.issue.customfields.option.LazyLoadedOption
import com.atlassian.jira.config.SubTaskManager
import com.atlassian.jira.user.ApplicationUser

def customFieldManager = ComponentAccessor.getCustomFieldManager()
@Field
SubTaskManager subTaskManager = ComponentAccessor.getSubTaskManager()
@Field
ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()

//name of the custom field
def customFieldName = 'Checkboxes'
//get the custom field object
def customFieldObject = customFieldManager.getCustomFieldObjectByName(customFieldName)

Issue issue = issue
//get all the values of the custom field
def customFieldValues = customFieldObject.getValue(issue)

//loop through the values and create sub tasks
//change the case value as per requirements such as "Email Required" or "SAP Access Required"
customFieldValues.each { LazyLoadedOption it ->
    def optionValue = it.getValue()
    switch (optionValue){
        case "Yes":
            def newIssue = createIssue(issue, optionValue)
            createSubTask(issue, newIssue)
            break
        case "No":
            def newIssue = createIssue(issue, optionValue)
            createSubTask(issue, newIssue)
            break
        case "Maybe":
            def newIssue = createIssue(issue, optionValue)
            createSubTask(issue, newIssue)
            break
    }
}

/**
 * Create a new sub task
 * @param issue
 * @param newIssue
 * @return
 */
private createSubTask(Issue issue, Issue newIssue){
    if(newIssue) {
        subTaskManager.createSubTaskIssueLink(issue, newIssue, user)
    }
}

/**
 * This function creates a new issue. issueInputParameter should be set according to
 * the requirement
 * @param issue
 * @param optionValue
 * @return
 */
private Issue createIssue(Issue issue, String optionValue) {
    Project project = issue.getProjectObject()
    IssueService issueService = ComponentAccessor.issueService
    IssueInputParameters issueInputParameters = issueService.newIssueInputParameters()
    def constantsManager = ComponentAccessor.getConstantsManager()

    //get issue type such as 'Bug'
    def bugIssueType =  constantsManager.getAllIssueTypeObjects().findByName("Bug")

    issueInputParameters.setProjectId(project.id)
        .setIssueTypeId(bugIssueType.id)
        .setReporterId(user.name)
        .setSummary("Test issue _" + optionValue)

    IssueService.CreateValidationResult createValidationResult = issueService.validateCreate(user, issueInputParameters);
    Issue newIssue
    if (createValidationResult.isValid()) {
        IssueService.IssueResult createResult = issueService.create(user, createValidationResult);
        if (createResult.isValid()) {
            newIssue = createResult.issue
        }

    }
    return newIssue
}

Thank you so much for your help! It works for me now!

This widget could not be displayed.

I need to send the sub-ticket according to 3 check-box value. But I tried many times still get customField null. Please let me know if following code is all right? Is there any easy way to get value from the checkbox?

Thanks ahead!


def fieldid = new String[3]

fieldid[0] = "Email Required"
fieldid[1] = "Network Login Required"
fieldid[2] = "SAP Access Required"


List optionsList = (List)issue.getCustomFieldValue(customFieldManager.getCustomFieldObjectByName("Additional Access"));

if(optionsList != null) {
def i
for (i = 0; i <3; i++) {
def customField = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(fieldid[i]);
if (customField != null && i == 0) {
assigneeIdList.add("sduffy") 
summariesList.add("Email Required for New Hired")
}
if (customField != null && i == 1) {
assigneeIdList.add("drobinson") 
summariesList.add("Network Login Required for New Hired")
}
if (customField != null && i == 2) {
assigneeIdList.add("coschbach")
summariesList.add("SAP Access Required for New Hired")
}
}
}

Suggest an answer

Log in or Sign up to answer
Community showcase
Posted yesterday in Jira

What modern development practices are at the heart of how your team delivers software?

Hey Community mates! Claire here from the Software Product Marketing team. We all know software development changes rapidly, and it's often tough to keep up. But from our research, we've found the h...

79 views 0 1
Join discussion

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you