You're on your way to the next level! Join the Kudos program to earn points and save your progress.
Level 1: Seed
25 / 150 points
Next: Root
1 badge earned
Challenges come and go, but your rewards stay with you. Do more to earn more!
What goes around comes around! Share the love by gifting kudos to your peers.
Keep earning points to reach the top of the leaderboard. It resets every quarter so you always have a chance!
Join now to unlock these features and more
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)
}
}