Create Sub-Task Based on Custom Field Checkbox

Jh March 4, 2020

I am trying to create sub-tasks based on custom field checkboxes and need a little bit of guidance on how to setup the post-function and writing the condition.

I have created a custom field called "SAP Access?" with 3 checkbox options, BI/PI/ECP, I'd like to create sub-tasks on the condition that the checkboxes are ticked and auto-assign them.

There are post-task functions written that pre-date me but I have tried to copy the formatting and tailored it. Can I get some feedback on whether below is correctly written?

 

//Get SAP Access checkbox value
def sapaccesscustomFieldObject = customFieldManager.getCustomFieldObjectsByName("SAP Access?")

//get all values of the custom field
def sapaccesscustomFieldValues = sapaccesscustomFieldObject.getValue(parentIssues)

//loop through values and create sub tasks
sapaccesscustomFieldValues.each { LazyLoadedOption it ->
def sapaccessValue = it.getValue()
switch (sapaccessValue){
case "SAP BI":
assigneIdList.add("User1")
summariesList.add("SAP BI access for new hire")
descriptionList.add("SAP BI access required")
break
case "SAP PI":
assigneIdList.add("User2")
summariesList.add("SAP PI access for new hire")
descriptionList.add("SAP PI access required")
break
case "SAP ECP":
assigneIdList.add("User3")
summariesList.add("SAP ECP access for new hire")
descriptionList.add("SAP ECP access required")
break
}
}

 

1 answer

0 votes
Stefano Galati March 12, 2020

Hello @Jh 

try with this code

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.MutableIssue

def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def userManager = ComponentAccessor.getUserManager()
def issueFactory = ComponentAccessor.getIssueFactory()
def subTaskManager = ComponentAccessor.getSubTaskManager()
def customfieldManager = ComponentAccessor.getCustomFieldManager()
def constantManager = ComponentAccessor.getConstantsManager()
def issueManager = ComponentAccessor.getIssueManager()

def customField = customfieldManager.getCustomFieldObjectByName("SAP Access?")
def selectedValues = issue.getCustomFieldValue(customField)

def userBi = userManager.getUserByName("User BI")
def userPi = userManager.getUserByName("User PI")
def userEcp = userManager.getUserByName("User ECP")

selectedValues.each { value ->
MutableIssue newSubTask = issueFactory.getIssue()
switch(value) {
case "SAP BI":
newSubTask.setSummary("SAP BI access for new hire")
newSubTask.setDescription("SAP BI access required")
newSubTask.setAssignee(userBi)
case "SAP PI":
newSubTask.setSummary("SAP PI access for new hire")
newSubTask.setDescription("SAP PI access required")
newSubTask.setAssignee(userPi)
case "SAP ECP":
newSubTask.setSummary("SAP ECP access for new hire")
newSubTask.setDescription("SAP ECP access required")
newSubTask.setAssignee(userEcp)
}
newSubTask.setParentObject(issue)
newSubTask.setProjectObject(issue.getProjectObject())

newSubTask.setIssueTypeId(constantManager.getAllIssueTypeObjects().find{
it.getName() == "Sub-task" // or the type you want to use
}.id)


Map<String,Object> newIssueParams = ["issue" : newSubTask] as Map<String,Object>
issueManager.createIssueObject(user, newIssueParams)
subTaskManager.createSubTaskIssueLink(issue, newSubTask, user)
}

Suggest an answer

Log in or Sign up to answer