Validation on a list of issue keys

This is a legacy function which has been deprecated with version 3.0.

This validator can block a transition based on the state and the number of issues stored in an issue field (e.g. a custom text field).

You can specify multiple filter criteria that will be "and concatenated". Per default, all identified issues must match the combination of all criteria.  

🛠️ Configuration

Source field

Select the text field containing the issues. 

The field must contain a list of issue keys separated by blanks, commas, colons, or semi-colons.

If the source field is empty, the overall validator will pass.

If a non-existent issue key is detected in the list, the overall validator fail.

Filter by issue type

If you select specific issue typesall issues must be of any of the selected issue types. If issues with other issue types are found, the validator will fail.

The additional filters can be used to further restrict the issues to be analyzed.

If you leave this filter blank, e.g. if the issue type is irrelevant, you must check the additional option Skip issue type filter / issues in unselected issue types.

If you select specific issue types and also check the additional option Skip issue type filter / issues in unselected issue types, the additional criteria (status, resolution, field value) will only be applied to the selected issue types.

Filter by status

If you select specific statusesall issues must be in any of the selected statuses. If issues with other statuses are found, the validator will fail.

The additional filters can be used to further restrict the issues to be analyzed.

If you leave this filter blank, e.g. if the status is irrelevant, you must check the additional option Skip status filter / issues in unselected statuses.

If you select specific statuses and also check the additional option Skip status filter / issues in unselected statuses, the additional criteria (issue type, resolution, field value) will only be applied to the issues in the selected statuses.

Filter by project

Optionally specify specific projects, the linked issues must or must not belong to. The following options are available:

Option

Description

Any project

By default, the issues can be in any project.

Current project

Choose this option to make sure that all issues are in the same project as the current issue.

Any but current project

Choose this option to make sure that all issues are not in the same project as the current issue.

Filter by field value

Optionally limit the issues to be counted or analyzed by their field values. To achieve this you must enter an expression in Logical mode. The expression must return  true or false

Examples: 

Expression

Description

Bash
%{seed.issue.assignee} != null 

All found issues in the specified field must be assigned to a user. If unassigned issues are found, the validator will fail.

Values of issues found in the specified field have to be referenced by their seed field codes.

Bash
%{issue.dueDate} <= %{seed.issue.dueDate}

All found issues in the specified field must have a due date of equal to or later than the current issue's due date.

Values of issues found in the specified field have to be referenced by their seed field codes.

If you specify an expression and also check the additional option Skip issues with unmatched field values, the additional criteria (issue type, resolution, field value) will only be applied to the issues that match the expression.

Minimum number of issues

Specify the minimum number of issues that need to satisfy the specified filter criteria. The default value is 1 to ensure the validator fails if the field does not contain issue keys.

Maximum number of issues

Specify the maximum number of issues that need to satisfy the specified filter criteria. The default value is 9999.

If you set this number to 1, the validator will fail as soon as more than one sub-task satisfies the specified filter criteria.

Additional options

The following options can be used to refine the number of issues you want to analyze in this validator.

Per default all filters are mandatory, filters are "and concatenated" and you cannot save your configuration unless you have specified values. Any sub-task being analyzed by the validator must match all criteria.

If you leave a filter blank you must check the additional option to skip the filter. Otherwise you cannot save your configuration.

The additional options allow you to override the default behavior.

Filter

Additional option

Description

No value selected

Not checked ❌

Not possible. If you want to skip the filter you have to uncheck the corresponding additional option.

No value selected

Checked ✅

Skip this filter completely. An equivalent would be to select all available options, e.g. all issue types are allowed.

One or multiple values selected

Not checked ❌

Enforce that all sub-tasks which are analyzed must have the selected values, e.g. only selected issue types are allowed.

One or multiple values selected

Checked ✅

Issues not matching the specified value are allowed and will be ignored when evaluating whether the validator passes

By default, whenever a value is selected in a filter it will be combined with all other filter criteria and all issues must match the filter combination.

If you only want to analyze specific issue types (e.g. "Test cases"), select "Test case" in the issue type filter and check the corresponding additional option. This way, other issues (which are not "Test cases") can exist and will not be considered.

Examples

The table below lists a few example configurations and their JQL equivalent.

Configuration

JQL

  • Issue type: Sub-task

  • Status: Closed

type = Sub-task AND status = Closed
  • Issue type: Sub-task

  • Status: Closed

  • Additional options: 

    • Skip issue type filter

(type = Sub-task AND status = Closed) OR type != Sub-task

Option

Description

Skip issue type filter / issues in unselected issue types

The issue type is irrelevant for this validator or sub-tasks in non-selected issue types will be ignored when evaluating whether the validator passes.

Skip status filter / issues in unselected statuses

The status is irrelevant for this validator or sub-tasks in non-selected statuses will be ignored when evaluating whether the validator passes.

Skip issues with unmatched field values

Field values are irrelevant for this validator or sub-tasks with unmatched field values will be ignored when evaluating whether the validator passes.

Validation options

The validation can be skipped under certain circumstances Select one or multiple scenarios in which you want to skip the validation to ensure the correct execution of certain operations.

Option

Description

Skip validation for JWT post functions

If the transition is triggered by a JWT post function, e.g. through Transition issue, the validation will be skipped.

Skip validation for bulk operations

If the transition is triggered by a bulk operation, the validation will be skipped.

Skip validation for clone operations

If the create transition is triggered by a clone operation, the validation will be skipped.

Skip validation for mail handlers

If the create transition is triggered by a mail handler, the validation will be skipped.

Error message

You can optionally define a custom error message in case the validator fails, which will be shown to the user trying to execute the transition.

You have the following options:

Location

Define where the error message should be displayed. By default, the message will be shown at the top of the transition screen, or in case there is no transition screen, as a popup.

Alternatively, you can locate the message below any other field. This option only makes sense, if there is a transition screen defined for the specific transition.

Due to limitations in Jira Service Management, the location parameter will be ignored on Jira Service Management related screens. The location parameter only works for the Create Issue transition screen if JSD version 4.10 or higher is being used.

Message

Define the content of the error message in Basic text mode or Advanced text mode.

Learn more about the possibilities of the JWT expression editor.

In comparison to e.g. our calculated custom fields it is not possible to display HTML here. Displaying links to specific issues, for example, is not possible inside the error message.

Translations

After clicking on the Add translation button you can optionally translate the error message to other languages.

The language in which the error message will be displayed depends on the language setting of the individual users.

If you want to use this functionality in a condition instead, have a look at the Condition on a list of issue keys.

📚 Use cases and examples

Use case JWT feature Workflow function Parser functions Label
Specific sub-tasks must be resolved

(blue-star) (blue-star) 

Condition on sub-tasks

Validation of sub-tasks


Prevent users from selecting specific fix versions

(blue-star) (blue-star) 

Condition based on regular expression

Validation based on regular expression


All sub-tasks must be resolved

(blue-star) (blue-star) 

Condition on sub-tasks

Validation of sub-tasks

staff pick

Prevent a transition depending of the number of components

(blue-star) (blue-star) 

Logical validator

Logical condition

numberOfSelectedItems()


Prevent a closed issue from being reopened after resting 1 week closed

(blue-star) (blue-star) 

Logical validator

Logical condition

isInRole()


Prevent issue from being "Closed" if blocking issues are not closed yet.

(blue-star) 

Validation of linked issues



Add comment with the request participants' display name

(cog) 

Add comment

toString()  textOnStringList() toStringList() userDisplayName()


Prevent the creation of sub-tasks unless the parent issue is in a certain status

(blue-star) 

Logical validator

Create issue under epic

(cog) 

Create issue

toString() epic()

Block an Epic's transition until all the issues under that Epic are resolved

(blue-star) 

Logical validator

Logical condition

count()

issuesUnderEpic()

filterByResolution()


Block an Epic's transition depending on linked issues status and due date

(blue-star) (blue-star) 

Logical validator

Logical condition

count()

filterByPredicate()

linkedIssues()


Get attributes of Assets objects

(cog) 

Execute remote action


Log absence time on another issue

(cog) 

Log work

stringToDate()


Escalate issue to assignee's supervisor

(cog) 

Copy JWT user property

userProperty()

staff pick

Prioritize the issues globally

(cog) 

Update or copy field values

indexOf() previousValue() issuesFromJQL()

Automatically fill an insight custom field after a transition

(cog) 

Update or copy field values


Prevent transitioning when there is a blocking issue

(blue-star) 

Validation of linked issues



Move an issue to another issue type

(cog) 

Move issue


Evaluate Assets objects

(blue-star) (blue-star) 

Logical validator

Logical condition

findPattern() findReplaceAll() replaceAll() toStringList()


Create an internal Service Management comment on linked issues

(cog) 

Update or copy field values


Alert the reporter

(cog) 

Add comment



Create issues randomly

(cog) 

Create issue

modulus()

round()

random()


Make the assignee required

(blue-star) (blue-star) 

Fields required

Fields required or changed



Create a sub-task for every sub-task closed

(cog) 

Create issue

findReplaceFirst() first() findPattern() toString() sum() toNumber()

An issue must have at least 3 resolved Test Cases

(blue-star) (blue-star) 

Condition on sub-tasks

Validation of sub-tasks


Prevent issue creation with the same field value

(blue-star) 

Validation based on JQL query

Logical validator


Staff pick

Obtain a value from an Elements Connect custom field

(cog) 

Send email

findPattern()

toString()

Only watchers can execute a transition

(blue-star) 

Only users in a field


Proceed with a task only when all sub-tasks are completed

(blue-star) (blue-star) 

Condition on sub-tasks

Validation of sub-tasks



Clone epic, tasks and sub-tasks

(cog) 

Create issue

toString() toStringList() issueKeysToIssueList() replaceFirst() first() fieldValue() textOnStringList() findModify() subtasks() issuesUnderEpic()

Prevent setting due dates outside business hours

(blue-star) 

Logical validator

Logical condition

withinCalendar()

staff pick

Set a date on the same week day on alternate weeks

(cog) 

Update or copy field values

addDays() nextDayOfTheWeek() modulus() weekOfTheYear() datePart()

Prevent creation of issues with a duplicate summary

(blue-star) 

Validation based on JQL query


Ensure that all issues linked with a certain issue link type have "Due Date" field set

(blue-star) (blue-star) 

Logical validator

Logical condition

count()

linkedIssues()

fieldValue()


A developer must not execute the transition

(blue-star) 

User is not in project role



Set a Date Picker field to the nth day of the month

(cog) 

Update or copy field values

dayOfTheMonth() lastDayOfTheMonth() addDays()

Alert the assignee of important issues

(cog) 

Add comme nt



Set the next fix version

(cog) 

Update or copy field values

floor() toNumber() substring() length()

Create Confluence page with links to issues

(cog) 

Execute remote action


Set reporter as assignee if a User Picker field is empty

(cog) 

Update field based on rules

Set fix version based on its start and release date

(cog) 

Update or copy field values 

toString() textOnStringList() unreleasedVersions() startDates() releaseDates() first()


Add user to field depending on selected options

(cog) 

Update field based on rules

Set Due Date with latest value among sub-tasks

(cog) 

Update or copy field values

fieldValue()

max()

siblingSubtasks()


Create sub-tasks depending on selected values in custom field

(cog) 

Create issue

toStringList()

staff pick

Assign important issues to the project lead

(cog) 

Update or copy field values


Validation based on the value of a date type project property

(blue-star) 

Logical validator

Logical condition

stringToDate()

projectProperty()


Automatically log work on a Jira issue

(cog) 

Execute remote action

dateTimeToString()


Add percentaged profit margin when closing issue

(cog) 

Log work


Only users in a project role can execute a transition

(blue-star) (blue-star) 

Users are/aren't in project role (validator)

Users are/aren't in project role (condition)



Prevent issue creation if description contains less than 100 characters

(blue-star) 

Logical validator

replaceAll() length()

Reopen parent issue, if a sub-task is reopened

(cog) 

Transition issue


Extract an email address from the last comment

(cog) 

Copy excerpted value


Shorten the summary to a maximum number of characters

(cog) 

Update or copy field values

substring() length()

Create an overview page for a software release

(cog) 

Execute remote action


All blocking issues must be resolved

(blue-star) (blue-star) 

Condition on linked issues

Validation of linked issues



Create an issue with a custom summary

(cog) 

Create issue

previousValue()

Set issue security level depending on reporter

(cog) 

Update field based on rules

issueSecurityLevel()

Staff pick

There must be at least one related Service Management request

(blue-star) (blue-star) 

Condition on linked issues

Validation of linked issues



Keep the status of parents and sub-tasks in sync (post function use case)

(cog) 

Transition issue



All sub-tasks with a resolution of Done must be in a specific status

(blue-star) (blue-star) 

Condition on sub-tasks

Validation of sub-tasks


Clone issue in external instance

(cog) 

Execute remote action


Remove remaining estimate when an issue is closed

(high_voltage) 

Update field action

Match several values of a list

(cog) 

Update or copy field values

toString() distinct() filterByPredicate()

Create a sub-task for each component

(cog) 

Create issue

toStringList()


Format the issue's summary according to specified rules

(cog) 

Format field value

staff pick

Assignee may only have a restricted number of assigned issues

(blue-star) (blue-star) 

Condition based on JQL query

Validation based on JQL query



Create three issues with individual summaries

(cog) 

Create issue

getMatchingValue()


Create a component to group issues related to UI design

(cog) 

Execute remote action


Link issue to issue keys in its description

(cog) 

Create issue link

findPattern() toString()

Assign issue to current user

(cog) 

Update or copy field values


Restrict issue creation per issue type and project role

(blue-star) 

Logical validator

isInRole()


Validate a Select List (cascading) custom field

(blue-star) 

Logical validator Logical condition



Keep parent issue's priority in sync

(cog) 

Update or copy field values


Ensure that an issue has at least one attachment

(blue-star) 

Logical validator

Logical condition

Staff pick

Assign issue to the default user of a role

(cog) 

Assign to project role

Notify the reporter of an issue about its status by a Telegram message

(cog) 

Execute remote action


Prevent issue creation with the same field value (Boolean)

(blue-star) 

Logical validator

Validation based on JQL query

count()

issuesFromJQL()


Set the assignee of an external issue same as the transitioned issue

(cog) 

Execute remote action



Validate only issue links created in transition screen

(blue-star) 

Logical validator

count()

transitionLinkedIssues()

filterByProject()

filterByIssueType()


Add assignee as watcher to every blocking issue

(cog) 

Update linked issue or sub-task



Add internal Jira Service Management comment

(cog) 

Add comment



Add sub-tasks to an automatically created issue

 ⛭ ⚡️ 

Create issue

getMatchingValue()


Start Progress on parent, if sub-tasks are started

(cog) 

Transition issue


staff pick

Create several issues combining fields

(cog) 

Create issue

nthElement() toStringList() modulus() count() ceil()

Transition an external Jira ticket based on the linked internal one

(cog) 

Execute remote action



Create a comment on an external Jira ticket

(cog) 

Execute remote action


Prevent having the same assignee in two sub-tasks

(high_voltage) 


Set assignee based on a former assignee

(cog) 

Update or copy field values

previousValue()

Automatically log work spent in a specific status

⛭ 

Log work

timeDifference()


Set assignee based on priority

(cog) 

Update field based on rules

priority()


Automatically link an issue to an external one

(cog) 

Execute remote action


Reject duplicated file names in attachments

(blue-star) (blue-star) 

Logical validator

Logical condition

count()

toStringList()

distinct()


Only user specified in project property is allowed to execute transition

(blue-star) (blue-star) 

Condition on JWT project property

Validation of JWT project property

projectProperty()


All sub-tasks must be Done or Closed

(blue-star) (blue-star) 

Condition on sub-tasks

Validation of sub-tasks


Create a personal space for a new employee

(cog) 

Execute remote action


Triage issues created by email

(cog) 

Move issue

toUpperCase() 

toString() 

findPattern() 

isInGroup()

STAFF PICK

Get Hubspot contact information

(cog) 

Execute remote action

Prevent external users from creating issues

(blue-star) 

Logical validator

matches() toString() textOnStringList() toStringList() userDisplayName()

Link a Jira issue with the corresponding release ticket

(cog) 

Execute remote action


Get Checklist

(cog) 

Execute remote action


Add watchers ignoring inactive users

(cog) 

Update or copy field values

usersInGroup() isActive() toString() filterByPredicate()

Add watchers based on issue type

(cog) 

Add or remove watchers



Add a table with the elements of a text to an email

(cog) 

Send email

toString() textOnStringList() toStringList()

Copy latest due date from sub-tasks

(cog) 

Copy field values from linked issues or subtasks


Hide transition to a previous status

(blue-star) 

Logical condition


Copy formatted description of issue into email

(cog) 

Send email

wikiToHTML()

Automatically assign a tester during your development process

(cog) 

Assign to project role


Create a new employee account during an onboarding process

(cog) 

Execute remote action


Hide transition from issue creator

(blue-star) 

Except users in field


Remove blocking links when blocking issue is closed

(cog) 

Delete issue link


Make the description required

(blue-star) (blue-star) 

Fields required

Fields required or changed



Create several sub-tasks depending on the component

(cog) 

Create issue

Read the information from a Trello card

(cog) 

Execute remote action


Extract the issue priority from the summary

(cog) 

Copy excerpted value


Set custom IDs for each issue

(cog) 

Set or create JWT project property

Update or copy field values

length() 

projectProperty() 

substring() 

toNumber() 

year()


Add days skipping weekends and holidays to a Date Picker field

(cog) 

Update or copy field values

addTime()

Halt a transition if an element is not contained in a list

(blue-star) (blue-star) 

Logical validator Logical condition

toStringList()

Block a transition until all sub-tasks have certain fields populated

(blue-star) (blue-star) 

Logical validator

Logical condition

count()

filterByPredicate()

subtasks()

staff pick

Fast-track transition issues assigned to the project lead

(cog) 

Transition issue


staff pick

Set Checklist

(cog) 

Execute remote action


Restrict the issue creation with specific issue types to certain project roles

(blue-star) 

Users are/aren't in project role (validator)



Create an external project for a new employee during an onboarding process

(cog) 

Execute remote action


Automatically create a version when starting the release

(cog) 

Execute remote action


Create an issue in the current project

⛭ 

Create issue

staff pick

Create a sub-task for every user in a field and assign them

(cog) 

Create issue

getMatchingValue()

toStringList()

Translate the description

(cog) 

Execute remote action

replaceAll() wikiToHTML() htmlToTxt()

Move an issue to another project

(cog) 

Move issue


Calculate custom sequence numbers

(cog) 

Update or copy field values

Set or create JWT project property

toUpperCase() 

substring() 

length() 

projectProperty() 

toNumber()


Link to the linked epic from the current issue

(blue-star) 

toString()

fieldValue()

issueKeysToIssueList()


Copy highest priority from linked issues

(cog) 

Copy field values from linked issues or subtasks


Keep track of important status updates

(cog) 

Update or copy field values

Fields required or changed

dateTimeToString()


Current user must be reporter

(blue-star) (blue-star) 

Compare two values condition

Compare two values validator



Create a sub-task for every recurring deadline within a task

(cog) 

Create issue

addMonths() getMatchingValue() dateToString()

Change the assignee to the next evaluator

(cog) 

Update or copy field values

first()

toStringList()

Close parent issue only when all sub-tasks are closed

(blue-star) (blue-star) 

Condition on sub-tasks

Validation of sub-tasks



Retrieve the assets of an issue in Jira cloud

(cog) 

Execute remote action


Link to JQL query with information from issue

(blue-star) 

toString()

textOnStringList()

toStringList()


Set a watcher based on custom field value

(cog) 

Add or remove watchers



Make "Time spent" field required

(blue-star) 

Logical validator



Set a condition in a global transition which only applies in a certain status

(blue-star) 

Logical condition


Add comment when creating issues outside of business hours

(cog) 

Add comment

withinCalendar()

Staff Pick

Set assignee depending on issue type

(cog) 

Update field based on rules

issueType()


Inline images in a generated email

(cog) 

Send email

replaceAll()


Set specific default assignee if not set

(cog) 

Copy JWT project property


Create child issue within Advanced Roadmaps hierarchy

(cog) 

Create issue

Keep the status of an issue and its linked issues in sync

(cog) 

Transition issue

Resolution must be empty

(blue-star) (blue-star) 

Fields required

Fields required or changed



Add or remove request participants

(cog) 

Update or copy field values

Add attachments from current issue to cloning issues

(cog) 

Update linked issue or sub-task



All sub-tasks in the Closed status must have a specific resolution

(blue-star) (blue-star) 

Condition on sub-tasks

Validation of sub-tasks



Send email after transitioning to specific status

(cog) 

Send email



Send email with the URL of the attachments included in the description

(cog) 

Send email

replaceAll() toString() attachmentUrls() findPattern()

Add a hyperlink to an issue in an email

(cog) 

Send email