Dynamic Forms Examples
Create an Issue
The following example shows the use of dynamic form annotations in a script which creates a new issue. A short text annotator is used for Project Key and Summary, select list annotator for Issue Type and Priority, and user picker for User.
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.user.ApplicationUser
import com.onresolve.scriptrunner.parameters.annotation.Select
import com.onresolve.scriptrunner.parameters.annotation.ShortTextInput
import com.onresolve.scriptrunner.parameters.annotation.UserPicker
import com.onresolve.scriptrunner.parameters.annotation.meta.Option
@ShortTextInput(description = "Project key", label = "Project")
String projectKey
@Select(
description = "The issue type for the new issue",
label = "Issue type",
options = [
@Option(label = "Bug", value = "Bug"),
@Option(label = "Story", value = "Story")
]
)
String issueTypeName
@Select(
description = "The priority of the new issue",
label = "Priority",
options = [
@Option(label = "High", value = "High"),
@Option(label = "Low", value = "Low")
]
)
String priorityName
@UserPicker(label = "User", description = "User with that user key will be the reporter of the issue")
ApplicationUser user
@ShortTextInput(description = "The summary for the new issue", label = "Summary")
String summary
def loggedInUser = ComponentAccessor.jiraAuthenticationContext.getLoggedInUser()
def newIssue = Issues.create(projectKey, issueTypeName) {
setPriority(priorityName)
// if we cannot find user with the specified key or this was left blank, then set as a reporter the logged in user
setReporter(user ?: loggedInUser)
setSummary(summary)
}
"New issue key: $newIssue.key"
Change Issue Priority
The following example shows the use of dynamic form annotations in a script that changes the priority of an issue. A short text annotator is used for the Issue Key field, select list annotator for Priority, and checkbox annotator for Send Email.
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.type.EventDispatchOption
import com.onresolve.scriptrunner.parameters.annotation.Checkbox
import com.onresolve.scriptrunner.parameters.annotation.Select
import com.onresolve.scriptrunner.parameters.annotation.ShortTextInput
import com.onresolve.scriptrunner.parameters.annotation.meta.Option
@ShortTextInput(description = "The key of the issue to be updated", label = "Issue Key")
String issueKey
@Select(
description = "The name of the priority to set",
label = "Priority",
options =
[
@Option(label = "High", value = "High"),
@Option(label = "Medium", value = "Medium"),
@Option(label = "Low", value = "Low")
]
)
String priorityName
@Checkbox(description = "Check to send notification email", label = "Send Email")
boolean sendMail
def issueService = ComponentAccessor.issueService
def loggedInUser = ComponentAccessor.jiraAuthenticationContext.getLoggedInUser()
def issue = ComponentAccessor.issueManager.getIssueByCurrentKey(issueKey)
def availablePriorities = ComponentAccessor.constantsManager.priorities
def priority = availablePriorities.find { it.name == priorityName }
def issueInputParams = issueService.newIssueInputParameters()
issueInputParams.with {
priorityId = priority.id
}
def updateValidationResult = issueService.validateUpdate(loggedInUser, issue?.id, issueInputParams)
assert updateValidationResult.isValid(): updateValidationResult.errorCollection
def updateResult = issueService.update(loggedInUser, updateValidationResult, EventDispatchOption.ISSUE_UPDATED, sendMail)
"Issue priority changed to: $updateResult.issue.priority.name"