Text Composition and Format
Expression | Example of returned value |
---|---|
"Current issue was reported on " + %{...created} + " by " + %{...reporterUserFullName} + "." | Current issue was reported on 2014-09-03 19:28 by John Nash. |
"Today is " + dayOfTheWeekToString({...currentDateTime}, USER_LOCAL, USER_LANG) + "." | Today is Monday. |
"Number of hours since issue creation: " + round(({...currentDateTime} - {...created}) / {HOUR}) + " hours." | Number of hours since issue creation: 75 hours. |
"Number of days to due date: " + floor(({...duedate} - {...currentDateTime}) / {DAY}) + " days." | Number of days to due date: 2 days. |
Issue Selection
Expression | Example of returned value |
---|---|
filterByFieldValue(subtasks(), %{...components}, ~ , "Component A") or alternatively filterByPredicate(subtasks(), %{...components} ~ "Component A") | Returns an issue list with sub-tasks having "Component A" among its components. |
except(subtasks(%{...parentIssueKey}), issueKeysToIssueList(%{...issuekey})) or alternatively filterByPredicate(subtasks(%{...parentIssueKey}), ^%{...issuekey} != %{...issuekey}) | Returns an issue list with sibling sub-tasks, i.e., parent's sub-tasks except current issue. |
filterByFieldValue(filterByIssueType(getIssuesFromProjects(%{...project}), %{...issuetype}), %{...summary}, =, %{...summary}) or alternatively filterByPredicate(getIssuesFromProjects(%{...project}), ^%{...issuetype} = %{...issuetype} AND ^%{...summary} = %{...summary}) | Returns an issue list with all issues in the same project as current issue, with same issue type and same summary. Might be used in combination with function count() for creating a validation to avoid issue creation when an issue with same summary already exists in the project and issue type. |
Working with Fields in Linked Issues and Sub-tasks
Expression | Example of returned value |
---|---|
filterByCardinality(fieldValue(%{...components}, subtasks()), =, count(subtasks())) | ["Component A", "Component B", "Component C"] Returns a string list with the Components present in all sub-tasks of current issue, i.e., those components common to all sub-tasks. |
{...duedate} > max(fieldValue({...duedate}, union(linkedIssues("is blocked by"), subtasks()))) | Validation to check that: Due Date is greater than latest Due Date among blocking issues and sub-tasks. |
count(filterByFieldValue(subtasks(), %{...environment}, =, "") UNION filterByFieldValue(subtasks(), %{...duedate}, =, "")) = 0 or alternatively count(filterByPredicate(subtasks(), ^%{...environment} = null OR ^%{...duedate} = null)) = 0 | Expression for checking whether all sub-tasks of current issue have fields Due date and Environment set. |
count(filterByPredicate(linkedIssues("is Epic of"), ^%{...resolution} != null OR ^{...duedate} = null)) = 0 | This validation allows certain transition in Epic's workflow to be executed, only if all the tasks are unresolved and have Due Date set. |
Logical Constructions
Expression | Example of returned value |
---|---|
!(%{...priority} = "Blocker" OR %{...priority} = "Critical") OR {...duedate} != null | Validation for checking that: If Priority is "Blocker" or "Critical" then Due Date must be initialized. It is based on equivalent logical constructions: A implies B = !A OR B |
%{...priority} = "Blocker" OR %{...priority} = "Critical" IMPLIES {...duedate} != null | Validation for checking that: If Priority is "Blocker" or "Critical" then Due Date must be initialized. Same as former example but using logical connective IMPLIES. |
{...duedate} = null OR {...duedate} >= ({...created} + 2 * {DAY}) | Validation for checking: If Due Date is set then it must be equal or grater than Day and Time of Creation plus 2 days. |
On this page