Setting Field Defaults

Jira doesn’t make it easy to set defaults for system fields out of the box. Using Behaviours you can set default values for system and custom fields, and, set different defaults depending on the current user’s role level or groups.

Set default values when you want to allow the end user to change them from the initial values, or you want to provide a sensible structure for a multiline text field. Examples of this could be the correct phrasing for a user story or a bug report.

You can also "lock" the field by making it read-only. You could achieve the same result by setting the field in a post-function, however, this would overwrite any value the user had provided and is not very friendly.

Note that there is a longer worked example covering setting a default description in the behaviours overview page. This page is primarily to provide code examples for setting the different types of fields.

Setting System Field Defaults

When setting default values we use an initializer method. We want this code to fire once only, when the form is first loaded. Further, we check the name of the current action and exit the script if the action is anything but Create Issue - i.e. the user has clicked the Create button. You may need to alter this depending on your workflow, alternatively you could getAction()?.id == 1, to check the action by ID.

The following example covers how to set components, affects versions, and the assignee.

import com.atlassian.jira.component.ComponentAccessor import static com.atlassian.jira.issue.IssueFieldConstants.AFFECTED_VERSIONS import static com.atlassian.jira.issue.IssueFieldConstants.ASSIGNEE import static com.atlassian.jira.issue.IssueFieldConstants.COMPONENTS if (getActionName() != "Create Issue") { return // not the initial action, so don't set default values } // set Components def projectComponentManager = ComponentAccessor.getProjectComponentManager() def components = projectComponentManager.findAllForProject(issueContext.projectObject.id) getFieldById(COMPONENTS).setFormValue(components.findAll { it.name in ["Support Question", "Frontend"] }*.id) // set "Affects Versions" to the latest version def versionManager = ComponentAccessor.getVersionManager() def versions = versionManager.getVersions(issueContext.projectObject) if (versions) { getFieldById(AFFECTED_VERSIONS).setFormValue([versions.last().id]) } // set Assignee getFieldById(ASSIGNEE).setFormValue("admin")

Line 14: issueContext is in the binding, and allows us to access the project and issue type of the current issue, or issue to be created

Line 15: These components must exist for this to work

Line 21: versions.last() is the most recently created version

Setting Defaults for Selects etc

The code required to set default options depends whether it’s a single or multiselect. The same example that works for a single select will work for a radio buttons field, likewise you can use the multiselect code to set a multi checkbox field.

In each case this involves find the ID of the Option object(s) that we want to set.

import com.atlassian.jira.component.ComponentAccessor // set a select list value -- also same for radio buttons def faveFruitFld = getFieldByName("Favourite Fruit") def optionsManager = ComponentAccessor.getOptionsManager() def customFieldManager = ComponentAccessor.getCustomFieldManager() def customField = customFieldManager.getCustomFieldObject(faveFruitFld.getFieldId()) def config = customField.getRelevantConfig(getIssueContext()) def options = optionsManager.getOptions(config) def optionToSelect = options.find { it.value == "Oranges" } faveFruitFld.setFormValue(optionToSelect.optionId) // same example but setting a multiselect - also same for checkboxes fields def subComponentFld = getFieldByName("Subcomponent") customField = customFieldManager.getCustomFieldObject(subComponentFld.getFieldId()) config = customField.getRelevantConfig(getIssueContext()) options = optionsManager.getOptions(config) def optionsToSelect = options.findAll { it.value in ["Oranges", "Lemons"] } subComponentFld.setFormValue(optionsToSelect*.optionId)

Line 4: Get the custom field by its name

Line 10: The value of the option we want to default

Line 18: Same as above, but this time we are setting multiple options

Setting Cascading Select values

Cascading selects are similar to the above example, but a bit more involved as they have parent and child options.

The way to set a cascading select value is:

field.setFormValue([12345, 67890])

where those two numbers are the IDs of the cascading select options.

For example, give parent A and child A1 options, this sets them:

def optionsManager = ComponentAccessor.getOptionsManager() def customFieldManager = ComponentAccessor.getCustomFieldManager() def fieldName = "testCascadingSelectList" def field = getFieldByName(fieldName) def customField = customFieldManager.getCustomFieldObjectByName(fieldName) def fieldConfig = customField.getRelevantConfig(getIssueContext()) def options = optionsManager.getOptions(fieldConfig) def parentOption = options.find { it.value == "A" } def childOption = parentOption?.childOptions?.find { it.value == "A1" } field.setFormValue([parentOption.optionId, childOption.optionId])
On this page