In short, we have a transition on sub-tasks that we would like to run on a specific set of sub-tasks depending on the value of a multi-select checkbox custom field on a sibling sub-task.
I'm trying to:
I can't seem to get the parent key/id.
I'm not sure if I am creating the list correctly (is it .add or .push?)
The 'for(value in selectedActivities)' seems wrong
We are on Atlassian Cloud using a Scriptrunner post function.
Here is what I have so far (many cases omitted):
def amdSubtask = issue.key // The issue key of the study amendment subtask on which this script will run as a post function
def StudyIssueKey = issue.getParentObject()?.getKey() // get the parent issue key
// def selectedActivities = ["Protocol", "Budget", "Contract", "Coding", "Billing Grid", "Bellevue"]
def selectedActivities = issue.fields.customfield_11711 // get the set if values selected in the "Study Activities" custom field
logger.info("SELECTED " + selectedActivities)
def aList = [] // create a map of issue types to transition , and the transition ID for Initiate Study Amendment
for(value in selectedActivities)
// If Selected Activity = "Protocol" then add the following issue types to the aList
switch (value){
case "Protocol":
aList.add("Protocol - Development":11)
break;
case "Budget":
aList.add("Budget":11)
break;
}
logger.info("List of Subtask Types: " + aList)
// Retrieve all the subtasks of the parent
def allSubtasks = get("/rest/api/2/search")
.queryString("jql", "parent=${StudyIssueKey}")
.queryString("fields", "issuetype")
.asObject(Map)
.body
.issues as List<Map>
logger.info("Total subtasks for ${StudyIssueKey}: ${allSubtasks.size()}")
//Now run the transition on the subtask issue types in the map
for (subtask in allSubtasks) {
// get subtask key
def subtaskKey = subtask.key
// Transition issue if ID is not 0, otherwise continue with loop
if (aList.getAt(subtask.fields.issuetype.name)){
post("/rest/api/2/issue/${subtaskKey}/transitions")
.header("Content-Type", "application/json")
.body([
"transition": [
"id": aList.getAt(subtask.fields.issuetype.name) // The transition might be 11 for all, in which case, we can just use 11 and remove transition id from list
]
])
.asString()
logger.info(subtask.fields.issuetype.name + " do transition " + aList.getAt(subtask.fields.issuetype.name))
//Link to the Study Amendment subtask
post('/rest/api/2/issueLink')
.header('Content-Type', 'application/json')
.body([
type: [ name: "Amendment" ],
outwardIssue: [ id: amdSubtask ], // "is Amended by (amdSubtask)
inwardIssue: [ key: subtaskKey ] // is Amendment to (subtask)
])
.asString()
}
else{
logger.info("Transition not available " + subtask.fields.issuetype.name)
}
}