====== Post Functions ====== Post functions allow you to perform specific actions upon the transition. Following are some useful examples. ==== Add Comment on Transition ==== import com.atlassian.jira.component.ComponentAccessor def commentManager = ComponentAccessor.getCommentManager() def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser() commentManager.create( issue, currentUser, "This is my comment", false) ==== Update Fix Version/s field with first Unreleased version if there isn't a version already there or give error message ==== import com.atlassian.jira.component.ComponentAccessor import com.onresolve.scriptrunner.runner.util.UserMessageUtil def versionManager = ComponentAccessor.getVersionManager() def projectManager = ComponentAccessor.getProjectManager() def project = projectManager.getProjectObjByKey(issue.projectObject.key) def versions = versionManager.getVersions(project) def firstUnreleasedFound = versions.find{! it.released} if (issue.fixVersions.size() == 0){ if (firstUnreleasedFound) { issue.setFixVersions([firstUnreleasedFound]) issue.store() } else { UserMessageUtil.error("MANUAL INTERVENTION REQUIRED!!! No Unreleased Fix Version Found. Please add a Fix Version manually to this ticket....") } } ==== Set Reporter ID to be a value from a custom field called User ID ==== import com.atlassian.jira.issue.CustomFieldManager import com.atlassian.jira.issue.fields.CustomField import com.atlassian.jira.component.ComponentAccessor CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager() CustomField cfUID = customFieldManager.getCustomFieldObjectByName("User ID") def cfUIDvalue = issue.getCustomFieldValue(cfUID) issue.reporterId=cfUIDvalue ==== Add users to watch list on create or transition ==== If you're using this code on issue creation, make sure the script is after the "Create the issue originally" task. import com.atlassian.jira.component.ComponentAccessor def watcherManager = ComponentAccessor.getWatcherManager() def userManager = ComponentAccessor.getUserManager() def watchUsers = {usernames -> usernames.each { def user = userManager.getUserByKey(it.toString()) if (user) { watcherManager.startWatching(user, issue) } } } def users = ["abc", "def", "ghi"] if (issue.projectObject.key == 'KEY') { watchUsers(users) } === Set custom text field value in field Approval Status with date/time & currentUser on POST transition === import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.fields.CustomField //Define cfm def cfm = ComponentAccessor.getCustomFieldManager() //Set custom text field for Text field called "Approval Status" def cfApprovalStatus = cfm.getCustomFieldObjectByName("Approval Status") def currentUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser() def currentDate = new Date().format( 'yyyy-MM-dd hh:mm a' ) def statusMessage = "Approved by "+currentUser+" at "+currentDate issue.setCustomFieldValue(cfApprovalStatus,statusMessage) === Set "Awaiting Approval" message in field "Approval Status" if there is a value in "Selected Approver" user picker field === import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.fields.CustomField //define cfm def cfm = ComponentAccessor.getCustomFieldManager() // get value for "Selected Approver" and set status accordingly def cfApprovalStatus = cfm.getCustomFieldObjectByName("Approval Status") def SelApp = cfm.getCustomFieldObjectByName("Selected Approver") def SelAppValue = issue.getCustomFieldValue(SelApp) //If there is a value in the Selected Approver, set value in Approval Status if (SelAppValue){ issue.setCustomFieldValue(cfApprovalStatus,"Awaiting Approval") } === Additional actions performed on Issue Clone post function === def cfD = customFieldManager.getCustomFieldObjects(issue).find {it.name == 'Deployers'} def cfS = customFieldManager.getCustomFieldObjects(issue).find {it.name == 'Start Date'} def cfE = customFieldManager.getCustomFieldObjects(issue).find {it.name == 'End Date'} issue.setCustomFieldValue(cfD, null) issue.setCustomFieldValue(cfS, null) issue.setCustomFieldValue(cfE, null) issue.summary = 'Available for use' import com.onresolve.scriptrunner.runner.util.UserMessageUtil UserMessageUtil.success('So... you think you can dance? :)') === Update Select List (Drop Down) field Status with value Waiting Approval === import com.atlassian.jira.component.ComponentAccessor def cfSelect = ComponentAccessor.customFieldManager.getCustomFieldObjectByName("Status") def cfConfig = cfSelect.getRelevantConfig(issue) def value = ComponentAccessor.optionsManager.getOptions(cfConfig)?.find { it.toString() == 'Waiting Approval' } issue.setCustomFieldValue(cfSelect, value)