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

Copy checkbox values as strings to custom text field?

James Fishwick December 5, 2016

Working towards solving this: https://answers.atlassian.com/questions/44206040

Here is some starter code where I try to get the checked values in a custom field and apply them to a text field (on the same ticket). But no joy yet. Some superfluous junk in here, I know.

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.issue.IssueEvent
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.event.type.EventDispatchOption
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
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.customfields.manager.OptionsManager
import com.atlassian.jira.issue.customfields.option.*
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
     
def cfManager = ComponentAccessor.getCustomFieldManager()
def componentManager = ComponentManager.instance
def optionsManager = ComponentManager.getComponentInstanceOfType(OptionsManager.class)
def customFieldManager = ComponentAccessor.getCustomFieldManager()
  
//Get parent issue
Issue issue = (Issue) event.issue;
//Check, that it is a subtask type issue
if(!issue.isSubTask())
    return
  
MutableIssue parentIssue = issue.getParentObject();
Set issueLabels = parentIssue.getLabels();
def customField = customFieldManager.getCustomFieldObject("customfield_27132")
def selectedValues = customField.getValue(issue)*.value
def target = customFieldManager.getCustomFieldObject("customfield_27736")
String labels = selectedValues.join(',')
//CustomField cf = cfManager.getCustomFieldObject(condField)
//Options options = cf.getOptions(null, cf.getRelevantConfig(issue), null);
 
//def cfTarget = cfManager.getCustomFieldObject(target)
//issue.setCustomFieldValue(target, selectedValues.join(","))
//issue.setCustomFieldValue(target, "test")
target.updateValue(null, issue, new ModifiedValue(target, labels), new DefaultIssueChangeHolder());

 

 

1 answer

1 accepted

Comments for this post are closed

Community moderators have prevented the ability to post new answers.

Post a new question

2 votes
Answer accepted
Thanos Batagiannis _Adaptavist_
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.
December 28, 2016

Hi James,

I read your linked question so I suppose what you want to achieve it to set the selected values of a subtask's checkbox field as labels to the parent, implemented as a script runner listener.  

So you will need for the scripting part, something like 

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

Issue issue = issue

if (! issue.isSubTask())
    return null

def cf = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Checkboxes")
def cfValue = issue.getCustomFieldValue(cf) as ArrayList <LazyLoadedOption>

def valuesToSet = cfValue?.collect {it.value}?.toSet() ?: [] as Set

def parentIssue = issue.getParentObject()
def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()

// Set<Label> setLabels(final ApplicationUser remoteUser, final Long issueId, final Set<String> labels, final boolean sendNotification, final boolean causeChangeNotification);
ComponentAccessor.getComponent(LabelManager).setLabels(currentUser, parentIssue.id, valuesToSet, false, false)

Please let me know if this does the trick.  

PS. If indeed you want to copy checkboxes' values to a text custom field then please let me know so I can modify the script above 

regards, Thanos

TAGS
AUG Leaders

Atlassian Community Events