====== 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)