Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Copy value from subtask to parent issue : problem with my listener

Rachid El Mansouri September 11, 2023

Hello experts, 

I am trying to write a listener in order to copy a custom field value (planned version : version picker) from all sub tasks (concateneted) to a custom field  (FT_planned_versions : multiple version picker) in Parent issue (issue type Bug).

I have a problem on my listener.

 

import com.atlassian.jira.issue.UpdateIssueRequest
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.fields.layout.field.FieldLayoutItem
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.CustomFieldManager

// get the custom field "FT_plannedversions"

def targetCustomFieldId = "customfield_14002"
def targetCustomField = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(targetCustomFieldId)
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def issueManager = ComponentAccessor.getIssueManager()
def issue = event.issue as MutableIssue

// if parent issuetype is Bug
def parentBug = issue.getParentObject()
if (parentBug?.issueType?.name == "Bug") {
    // Get all the sub-tasks of parent issue (Bug)
    def subTasks = parentBug.getSubTaskObjects()

    // list that will store custom field values of "version_planifiée"

    def plannedVersions = []
   
    subTasks.each { subTask ->
        // get value of custom field "version_planifiée" for each sub-task
        def sourceCustomFieldId = "customfield_13201" // Remplacez "customfield_yyyyy" par l'ID de votre champ "version_planifiée"
        def sourceCustomField = ComponentAccessor.getCustomFieldManager().getCustomFieldObject(sourceCustomFieldId)       
        def sourceValue = subTask.getCustomFieldValue(sourceCustomField)

        if (sourceValue) {
            plannedVersions.add(sourceValue)
        }                
    }
   
   //Update custom field FT_planned_versions of parent issue Bug

    def mutableBug = issueManager.getIssueObject(parentBug.id)
    mutableBug.setCustomFieldValue(targetCustomField, plannedVersions.join(", "))          
    issueManager.updateIssue(event.getUser(), mutableBug, EventDispatchOption.ISSUE_UPDATED, false)  

}


This is not working with following error message : 

2023-09-11 11:52:20,297 WARN [runner.ScriptBindingsManager]: ParentBug = ESADS2-1
2023-09-11 11:52:20,298 WARN [runner.ScriptBindingsManager]: version planifiée = V2.2
2023-09-11 11:52:20,298 WARN [runner.ScriptBindingsManager]: version planifiée = V2.2
2023-09-11 11:52:20,299 WARN [runner.ScriptBindingsManager]: version planifiée = V1.2
2023-09-11 11:52:20,299 WARN [runner.ScriptBindingsManager]: FT versions planifiée = V2.2, V2.2, V1.2
2023-09-11 11:52:20,302 ERROR [runner.AbstractScriptListener]: *************************************************************************************
2023-09-11 11:52:20,302 ERROR [runner.AbstractScriptListener]: Script function failed on event: com.atlassian.jira.event.issue.IssueEvent, file: null
java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.Collection (java.lang.String and java.util.Collection are in module java.base of loader 'bootstrap')
at com.atlassian.jira.issue.customfields.impl.AbstractMultiCFType.createValue(AbstractMultiCFType.java:39)
at com.atlassian.jira.issue.fields.ImmutableCustomField.createValue(ImmutableCustomField.java:701)
at com.atlassian.jira.issue.fields.ImmutableCustomField.updateValue(ImmutableCustomField.java:414)
at com.atlassian.jira.issue.fields.ImmutableCustomField.updateValue(ImmutableCustomField.java:400)
at com.atlassian.jira.issue.managers.DefaultIssueManager.updateFieldValues(DefaultIssueManager.java:716)
at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:667)
at com.atlassian.jira.issue.managers.DefaultIssueManager.updateIssue(DefaultIssueManager.java:653)
at com.atlassian.jira.issue.managers.RequestCachingIssueManager.updateIssue(RequestCachingIssueManager.java:217)
at com.atlassian.jira.issue.IssueManager$updateIssue$1.call(Unknown Source)
at Script18.run(Script18.groovy:46)

 

Any idea ?

1 answer

0 votes
Vishal
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.
September 11, 2023

Hi @Rash 

Just wanted to check the background about taking this long route when you can do it using automation for jira ?

Rachid El Mansouri September 11, 2023

Hi Vishal,

Thanks for your support.

I already tried to create an automation but it was difficult for me to answer my need.

Suggest an answer

Log in or Sign up to answer