Logical validator

The logical validator is one of the most powerful and versatile validators that can be used in JWT since it uses the full potential of the JWT expression parser functions.

This validator evaluates a logical expression that returns true or false. The transition will only be possible, if the result is true.

🛠️ Configuration

Expression

Since you only have a single parameter, an expression, you need to familiarize yourself with the Logical mode, which explains how to write logical expressions.

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 Logical condition.

📚 Use cases and examples

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

Condition on sub-tasks

Validation of sub-tasks

Prevent users from selecting specific fix versions

Condition based on regular expression

Validation based on regular expression

All sub-tasks must be resolved

Condition on sub-tasks

Validation of sub-tasks

Prevent a transition depending of the number of components

Logical validator

Logical condition

numberOfSelectedItems()

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

Logical validator

Logical condition

isInRole()

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

Validation of linked issues


Add comment with the request participants' display name

Add comment

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

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

Logical validator

Create issue under epic

Create issue

toString() epic()

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

Logical validator

Logical condition

count()

issuesUnderEpic()

filterByResolution()

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

Logical validator

Logical condition

count()

filterByPredicate()

linkedIssues()

Get attributes of Assets objects

Execute remote action

Log absence time on another issue

Log work

stringToDate()

Escalate issue to assignee's supervisor

Copy JWT user property

userProperty()

Prioritize the issues globally

Update or copy field values

indexOf() previousValue() issuesFromJQL()

Automatically fill an insight custom field after a transition

Update or copy field values

Prevent transitioning when there is a blocking issue

Validation of linked issues


Move an issue to another issue type

Move issue

Evaluate Assets objects

Logical validator

Logical condition

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

Create an internal Service Management comment on linked issues

Update or copy field values

Alert the reporter

Add comment


Create issues randomly

Create issue

modulus()

round()

random()

Make the assignee required

Fields required

Fields required or changed


Create a sub-task for every sub-task closed

Create issue

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

An issue must have at least 3 resolved Test Cases

Condition on sub-tasks

Validation of sub-tasks

Prevent issue creation with the same field value

Validation based on JQL query

Logical validator


Obtain a value from an Elements Connect custom field

Send email

findPattern()

toString()

Only watchers can execute a transition

Only users in a field

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

Condition on sub-tasks

Validation of sub-tasks


Clone epic, tasks and sub-tasks

Create issue

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

Prevent setting due dates outside business hours

Logical validator

Logical condition

withinCalendar()

Set a date on the same week day on alternate weeks

Update or copy field values

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

Prevent creation of issues with a duplicate summary

Validation based on JQL query

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

Logical validator

Logical condition

count()

linkedIssues()

fieldValue()

A developer must not execute the transition

User is not in project role


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

Update or copy field values

dayOfTheMonth() lastDayOfTheMonth() addDays()

Alert the assignee of important issues

Add comme nt


Set the next fix version

Update or copy field values

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

Create Confluence page with links to issues

Execute remote action

Set reporter as assignee if a User Picker field is empty

Update field based on rules

Set fix version based on its start and release date

Update or copy field values 

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

Add user to field depending on selected options

Update field based on rules

Set Due Date with latest value among sub-tasks

Update or copy field values

fieldValue()

max()

siblingSubtasks()

Create sub-tasks depending on selected values in custom field

Create issue

toStringList()

Assign important issues to the project lead

Update or copy field values

Validation based on the value of a date type project property

Logical validator

Logical condition

stringToDate()

projectProperty()

Automatically log work on a Jira issue

Execute remote action

dateTimeToString()

Add percentaged profit margin when closing issue

Log work

Only users in a project role can execute a transition

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

Logical validator

replaceAll() length()

Reopen parent issue, if a sub-task is reopened

Transition issue

Extract an email address from the last comment

Copy excerpted value

Shorten the summary to a maximum number of characters

Update or copy field values

substring() length()

Create an overview page for a software release

Execute remote action

All blocking issues must be resolved

Condition on linked issues

Validation of linked issues


Create an issue with a custom summary

Create issue

previousValue()

Set issue security level depending on reporter

Update field based on rules

issueSecurityLevel()

There must be at least one related Service Management request

Condition on linked issues

Validation of linked issues


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

Transition issue


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

Condition on sub-tasks

Validation of sub-tasks

Clone issue in external instance

Execute remote action

Remove remaining estimate when an issue is closed

Update field action

Match several values of a list

Update or copy field values

toString() distinct() filterByPredicate()

Create a sub-task for each component

Create issue

toStringList()

Format the issue's summary according to specified rules

Format field value

Assignee may only have a restricted number of assigned issues

Condition based on JQL query

Validation based on JQL query


Create three issues with individual summaries

Create issue

getMatchingValue()

Create a component to group issues related to UI design

Execute remote action

Link issue to issue keys in its description

Create issue link

findPattern() toString()

Assign issue to current user

Update or copy field values

Restrict issue creation per issue type and project role

Logical validator

isInRole()

Validate a Select List (cascading) custom field

Logical validator Logical condition


Keep parent issue's priority in sync

Update or copy field values

Ensure that an issue has at least one attachment

Logical validator

Logical condition

Assign issue to the default user of a role

Assign to project role

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

Execute remote action

Prevent issue creation with the same field value (Boolean)

Logical validator

Validation based on JQL query

count()

issuesFromJQL()

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

Execute remote action


Validate only issue links created in transition screen

Logical validator

count()

transitionLinkedIssues()

filterByProject()

filterByIssueType()

Add assignee as watcher to every blocking issue

Update linked issue or sub-task


Add internal Jira Service Management comment

Add comment


Add sub-tasks to an automatically created issue

Create issue

getMatchingValue()

Start Progress on parent, if sub-tasks are started

Transition issue


Create several issues combining fields

Create issue

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

Transition an external Jira ticket based on the linked internal one

Execute remote action


Create a comment on an external Jira ticket

Execute remote action

Prevent having the same assignee in two sub-tasks
Set assignee based on a former assignee

Update or copy field values

previousValue()

Automatically log work spent in a specific status

Log work

timeDifference()

Set assignee based on priority

Update field based on rules

priority()

Automatically link an issue to an external one

Execute remote action

Reject duplicated file names in attachments

Logical validator

Logical condition

count()

toStringList()

distinct()

Only user specified in project property is allowed to execute transition

Condition on JWT project property

Validation of JWT project property

projectProperty()

All sub-tasks must be Done or Closed

Condition on sub-tasks

Validation of sub-tasks

Create a personal space for a new employee

Execute remote action

Triage issues created by email

Move issue

toUpperCase() 

toString() 

findPattern() 

isInGroup()

Get Hubspot contact information

Execute remote action

Prevent external users from creating issues

Logical validator

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

Link a Jira issue with the corresponding release ticket

Execute remote action

Get Checklist

Execute remote action

Add watchers ignoring inactive users

Update or copy field values

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

Add watchers based on issue type

Add or remove watchers


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

Send email

toString() textOnStringList() toStringList()

Copy latest due date from sub-tasks

Copy field values from linked issues or subtasks

Hide transition to a previous status

Logical condition

Copy formatted description of issue into email

Send email

wikiToHTML()

Automatically assign a tester during your development process

Assign to project role

Create a new employee account during an onboarding process

Execute remote action

Hide transition from issue creator

Except users in field

Remove blocking links when blocking issue is closed

Delete issue link

Make the description required

Fields required

Fields required or changed


Create several sub-tasks depending on the component

Create issue

Read the information from a Trello card

Execute remote action

Extract the issue priority from the summary

Copy excerpted value

Set custom IDs for each issue

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

Update or copy field values

addTime()

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

Logical validator Logical condition

toStringList()

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

Logical validator

Logical condition

count()

filterByPredicate()

subtasks()

Fast-track transition issues assigned to the project lead

Transition issue


Set Checklist

Execute remote action

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

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


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

Execute remote action

Automatically create a version when starting the release

Execute remote action

Create an issue in the current project

Create issue

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

Create issue

getMatchingValue()

toStringList()

Translate the description

Execute remote action

replaceAll() wikiToHTML() htmlToTxt()

Move an issue to another project

Move issue

Calculate custom sequence numbers

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

toString()

fieldValue()

issueKeysToIssueList()

Copy highest priority from linked issues

Copy field values from linked issues or subtasks

Keep track of important status updates

Update or copy field values

Fields required or changed

dateTimeToString()

Current user must be reporter

Compare two values condition

Compare two values validator


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

Create issue

addMonths() getMatchingValue() dateToString()

Change the assignee to the next evaluator

Update or copy field values

first()

toStringList()

Close parent issue only when all sub-tasks are closed

Condition on sub-tasks

Validation of sub-tasks


Retrieve the assets of an issue in Jira cloud

Execute remote action

Link to JQL query with information from issue

toString()

textOnStringList()

toStringList()

Set a watcher based on custom field value

Add or remove watchers


Make "Time spent" field required

Logical validator


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

Logical condition

Add comment when creating issues outside of business hours

Add comment

withinCalendar()

Set assignee depending on issue type

Update field based on rules

issueType()

Inline images in a generated email

Send email

replaceAll()

Set specific default assignee if not set

Copy JWT project property

Create child issue within Advanced Roadmaps hierarchy

Create issue

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

Transition issue

Resolution must be empty

Fields required

Fields required or changed


Add or remove request participants

Update or copy field values

Add attachments from current issue to cloning issues

Update linked issue or sub-task


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

Condition on sub-tasks

Validation of sub-tasks


Send email after transitioning to specific status

Send email


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

Send email

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

Add a hyperlink to an issue in an email

Send email