JQL или как найти иголку в стоге Jira

Andrey Goryunov October 27, 2017

Более полная информация о синтаксисе языка JQL приведена в документации Jira и Script Runner (на английском языке).

Функции

Функция

 

Описание

 

Поддерживаемые поля

 

Операторы

Пример

 

Поддерживаемые

Неподдерживаемые

membersOf()

Возвращает список пользователей, которые входят в указанную группу AD
membersOf(Group)

Assignee, Reporter, Voter, Watcher, custom fields of type User

IN, NOT IN

=, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки, исполнитель которых входит в группу GroupName:
assignee in (membersOf("GroupName"))

closedSprints(),
openSprints()

Возвращает список закрытых/открытых спринтов
closedSprints(), openSprints()

Sprint

IN, NOT IN

=, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти все заявки в завершенных спринтах:
sprint in closedSprints()
Найти все заявки в открытых спринтах:
sprint in openSprints()

componentsLeadByUser()

Возвращает список компонентов, владельцем которых является указанный пользователь. Если пользователь не указан, используется текущий пользователь
componentsLeadByUser(), componentsLeadByUser(username)

Component

IN, NOT IN

=, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки со статусом "In Progress", относящиеся к компоненту, владельцем которых является текущий пользователь:
component in componentsLeadByUser() AND status = "In Progress"

currentLogin(), 
lastLogin()

Возвращает время начала текущей или предыдущей сессии текущего пользователя
currentLogin(), lastLogin()

Created, Due, Resolved, Updated, custom fields of type Date/Time

=, !=, >, >=, <, <=WAS*, WAS IN*, WAS NOT*, WAS NOT IN*, CHANGED** Только в предикате

~, !~, IS, IS NOT, IN, NOT IN

Найти заявки, которые были созданы во время текущей сессии:
created > currentLogin()
Найти заявки, которые были созданы во время предыдущей сессии или позже:
created > lastLogin()

currentUser()

Текущий пользователь.
Данная функция может быть использована только авторизованным пользователем. Если фильтр будет использоваться анонимными пользователями, не используйте эту функцию.
currentUser()

Assignee, Reporter, Voter, Watcher, custom fields of type User

=, !=

~, !~, >, >=, <, <=, IS, IS NOT, IN, NOT IN, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки, которые назначены текущему пользователю:
assignee = currentUser()
Найти заявки, для которых текущий пользователь является создателем, но не исполнителем
reporter = currentUser() AND (assignee != currentUser() OR assignee is EMPTY)

earliestUnreleasedVersion()

Самая ранняя не выпущенная версия указанного проекта
earliestUnreleasedVersion(project)

AffectedVersion, FixVersion, custom fields of type Version

IN, NOT IN

=, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки, у которых FixVersion является самой ранней не выпущенной версии проекта ProjectName:
fixVersion = earliestUnreleasedVersion(ProjectName)
Найти заявки, которые относятся к самой ранней не выпущенной версии проекта ProjectName:
affectedVersion = earliestUnreleasedVersion(ProjectName) or fixVersion = earliestUnreleasedVersion(ProjectName)

endOfDay(),
endOfMonth(),
endOfWeek(),
endOfYear(),

Окончание текущего дня (месяца, недели, года).
endOfDay(), endOfDay("inc"), endOfMonth(), endOfMonth("inc"), endOfWeek(), endOfWeek("inc"), endOfYear(), endOfYear("inc")

Created, Due, Resolved, Updated, custom fields of type Date/Time

 =, !=, >, >=, <, <=WAS*, WAS IN*, WAS NOT*, WAS NOT IN*, CHANGED** Только в предикате

 ~, !~, IS, IS NOT, IN, NOT IN

Найти заявки, которые должны быть выполнены до конца текущего дня: due < endOfDay()
До конца следующей недели:
due < endOfWeek("+1")
До 15-го числа следующего месяца: due < endOfMonth("+15d")

issueHistory()

Список недавно просмотренных заявок
issueHistory()

Issue

IN, NOT IN

=, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти недавно просмотренные заявки, назначенные текущему пользователю:
issue in issueHistory() AND assignee = currentUser()

latestReleasedVersion()

Последняя выпущенная версия указанного проекта.
latestReleasedVersion(project)

AffectedVersion, FixVersion, custom fields of type Version

 IN, NOT IN

 =, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки, у которых FixVersion является последней выпущенной версией проекта ProjectName:
fixVersion = latestReleasedVersion(ProjectName)
Найти заявки, которые относятся к последней выпущенной версии проекта ProjectName:
affectedVersion = latestReleasedVersion(ProjectName) or fixVersion = latestReleasedVersion(ProjectName)

linkedIssues()

Список заявок, связанных с указанной заявкой. Список можно ограничить ссылками определенного типа.
Внимание: LinkType чувствителен к регистру.

linkedIssues(issueKey), linkedIssues(issueKey, linkType)

Issue

IN, NOT IN

=, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки, которые связаны с определенной заявкой: issue in linkedIssues(XXX-1000)
Найти заявки, которые связаны с определенной заявкой указанным типом связи: issue in linkedIssues(XXX-1000, "is mentioned by")

 now()

Текущие дата и время
now()

Created. Due, Resolved, Updated, custom fields of type Date/Time

 =, !=, >, >=, <, <=WAS*, WAS IN*, WAS NOT*, WAS NOT IN*, CHANGED** Только в предикате

 ~, !~, IS, IS NOT, IN, NOT IN

Найти просроченные заявки:
duedate < now() AND status not in (Закрыт, Решенные)

 projectsLeadByUser()

Возвращает список проектов, владельцем которых является указанный пользователь. Если пользователь не указан, используется текущий пользователь
projectsLeadByUser(), projectsLeadByUser(username)

 Project

 IN, NOT IN

 =, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти открытые заявки в проектах, владельцем которых является текущий пользователь:
project in projectsLeadByUser() AND status = "In Progress"

projectsWhereUserHasPermission()

Найти заявки в проектах, в которых у текущего пользователя есть указанное право доступа
projectsWhereUserHasPermission(permission)

Project

IN, NOT IN

=, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки в статусе "In Progress" в проектах, в которых у текущего пользователя есть право доступа "Resolve Issues":
project in projectsWhereUserHasPermission("Resolve Issues") AND status = "In Progress"

projectsWhereUserHasRole()

Найти заявки в проектах, в которых у текущего пользователя есть указанная роль
projectsWhereUserHasRole(rolename)

Project

IN, NOT IN

=, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки в проектах, в которых у текущего пользователя есть указанное роль Developers:
project in projectsWhereUserHasRole("Developers") AND status = "In Progress"

releasedVersions()

Список выпущенных версий указанного проекта. Если проект не указан, отображаются выпущенные версии всех проектов
releasedVersions(), releasedVersions(project)

AffectedVersion, FixVersion, custom fields of type Version

 IN, NOT IN

 =, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки, чьи FixVersion являются одной из выпущенных версий проекта ProjectName:
fixVersion in releasedVersions(ProjectName)
Найти заявки, которые относятся к одной из выпущенных версий проекта ProjectName:
affectedVersion in releasedVersions(ProjectName)) or (fixVersion in releasedVersions(ProjectName))

standardIssueTypes()

Список стандартных типов заявок (не включает подзадачи).
standardIssueTypes()

Type

IN, NOT IN

=, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки только со стандартными типами:
issuetype in standardIssueTypes()

startOfDay(),
startOfMonth(),
startOfWeek(),
startOfYear()

Начало текущего дня (месяца, недели, года).
startOfDay(), startOfDay("inc"), startOfMonth(), startOfMonth("inc"), startOfWeek(), startOfWeek("inc"), startOfYear(), startOfYear("inc")

Created, Due, Resolved, Updated, custom fields of type Date/Time

=, !=, >, >=, <, <=WAS*, WAS IN*, WAS NOT*, WAS NOT IN*, CHANGED** Только в предикате

~, !~, IS, IS NOT, IN, NOT IN

Найти заявки, созданные с начала текущего дня:
created > startOfDay()
Найти заявки, созданные с начала прошлой недели:
created > startOfWeek("-1")
Найти заявки, созданные с 15-го числа этого месяца:
created > startOfMonth("+14d")

subtaskIssueTypes()

Список типов подзадач
subtaskIssueTypes()

Type

IN, NOT IN

=, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки с типами, которые соответствуют подзадачам:
issuetype in subtaskIssueTypes()

unreleasedVersions()

Список невыпущенных версий указанного проекта. Если проект не указан, отображаются невыпущенные версии всех проектов
unreleasedVersions(), unreleasedVersions(project)

AffectedVersion, FixVersion, custom fields of type Version

IN, NOT IN

=, !=, ~, !~, >, >=, <, <=,  IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки, чья FixVersion является одной из невыпущенных версий проекта ProjectName:
fixVersion in unreleasedVersions(ProjectName)
Найти заявки, которые касаются одной из не выпущенных версий проекта ProjectName:

affectedVersion in unreleasedVersions(ProjectName)

watchedIssues()

Список заявок, в которых текущий пользователь является наблюдателем
watchedIssues()

Issue

IN, NOT IN

=, !=, ~, !~, >, >=, <, <=, IS, IS NOT, WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED

Найти заявки, в которых текущий пользователь является наблюдателем:
issue in watchedIssues()

Script Runner

Функции

Функция

Описание 

Пример

hasComments()

Возвращает список заявок с указанным количеством комментариев. Если количество комментариев не указано, список содержит заявки с хотя бы одним комментарием
hasComments()

Найти заявки с тремя комментариями:
issueFunction in hasComments(3)
с пятью или более комментариями:
issueFunction in hasComments('+5')
с тремя или менее комментариями:
issueFunction in hasComments('-3')

lastComment()

Возвращает список заявок, последний комментарий в которых добавлен в указанное время или указанной ролью
lastComment()

Найти заявки, последний комментарий в которых оставлен не участником с ролью Developers:
issueFunction not in lastComment("inRole Developers")
Найти заявки, в которых последний комментарий добавлен более четырех часов назад:
issueFunction in lastComment("before -4h") 

lastUpdated()

Возвращает список заявок, последнее обновление которых выполнено сотрудником с указанной учетной записью (by), ролью (inRole) или группой (inGroup)
lastUpdated()

Найти заявки, которые последний раз были обновлены сотрудником с ролью Administrators:
issueFunction in lastUpdated('inRole Administrators')

hasAttachments()

Возвращает список заявок с вложениями указанного типа
hasAttachments()

 

Найти заявки с вложениями:
issueFunction in hasAttachments()
Найти заявки с вложениями с расширением pdf:
issueFunction in hasAttachments("pdf")

fileAttached()

Возвращает список заявок с вложениями прикрепленными кем-то и в течение времени
fileAttached()

Поиск заявок с вложениями, добавленными пользователем UserName в течение последних 4 недель:
issueFunction in fileAttached("after -4w by UserName")

worklogged()

Возвращает список заявок с записями о проделанной работе, оставленными указанными пользователями в указанный промежуток времени
worklogged()

Поиск заявок с записью о проделанной работе пользователем TruVN на 30 января 2017 года:
issueFunction in worklogged("on 2017/01/30 by TruVN")
Найти все журналы работы роли разработчиков в предыдущем календарном месяце:
issueFunction in worklogged("after startOfMonth(-1) before endOfMonth(-1) inRole Developers")

dateCompare()

Позволяет сравнивать две даты в рамках подзапроса
dateCompare(Subquery, date comparison expression)

Найти все заявки, которые были решены позднее их срока:
issueFunction in dateCompare("", "resolutionDate > dueDate")

hasSubtasks()

Возвращает список заявок с подзадачами
hasSubtasks()

Найти заявки с подзадачами:
issueFunction in hasSubtasks()

subtasksOF()

Возвращает список подзадач, удовлетворяющих запросу
subtasksOF()

Найти подзадачи в указанном проекте
issueFunction in subtasksOf("project = ProjectName")

parentsOF()

Возвращает список родительских задач, удовлетворяющих запросу
parentsOF()

Найти все родительские задачи, в которых текущий пользователь является ответственным открытой подзадачи:
issueFunction in parentsOf("resolution is empty and assignee = currentUser()")

linkedIssuesFromQuery()

Возвращает список заявок, которые связаны указанным образом
linkedIssuesFromQuery()

Найти все заявки, слинкованные любой связью во всех заявках проекта ProjectName с типом Доработка:
issue in linkedIssuesFromQuery("project = ProjectName AND issuetype = Доработка")

linkedIssuesOf()

Возвращает список заявок, связанных с указанными
linkedIssuesOf()

Найти все нерешенные заявки, которые блокируются проблемами в статусе New:
issueFunction in linkedIssuesOf("status = New", "blocks") and resolution is empty

hasLinks()

Возвращает список заявок, у которых есть связи указанного типа
hasLinks()

У задачи есть связи:
issueFunction in hasLinks()
У заачи есть связи с типом blocks
issueFunction in hasLinks("blocks")

expression()

Позволяет сравнивать значения полей в подзапросе

Найти заявки, где было зарегистрировано больше работы, чем первоначально предполагалось:
issueFunction in expression("", "timespent > originalestimate")

issueFieldMatch()

Выполняет поиск с помощью регулярного выражения

Найти все заявки в проекте ProjectName, у которых описание содержит запись вида ABC0000, где 0000 - любое число:
issueFunction in issueFieldMatch("project = ProjectName", "description", "ABCd{4}")

aggregateExpression()

Аггрегирует указанные данные

Подсчитать оценку на проект ProjectName:
project = ProjectName and issueFunction in aggregateExpression("Total Estimate for all Issues", "originalEstimate.sum()")

Операторы

Оператор

Описание

Пример

=

Оператор "=" означает, что выбранное поле равно указанному значению.

Найти заявки, проект в которых ProjectName:
project = ProjectName или project = ProjectKey

!=

Оператор "!=" означает, что выбранное поле не равно указанному значению.

Найти заявки, в которых Исполнитель не Atlassian_User:
assignee != "DisplayName" или not assignee = UserName, или assignee != UserName
Найти заявки, в которых поле Исполнитель не пустое:
assignee is not empty или assignee != null

> 

Оператор  ">" используется для поиска заявок, где значение указанного поля больше указанного значения.

Найти все просроченные заявки:
duedate < now() and resolution is empty

>=

Оператор ">=" используется для поиска проблем, где значение указанного поля больше или равно указанному значению.

Найти все заявки, созданные в последние пять дней:
created >= "-5d"
Найти все заявки, созданные после 01/01/2017 включительно:
createdDate >= "2017/01/01"

< 

Оператор  "<" используется для поиска заявок, где значение указанного поля меньше указанного значения.

Найти все заявки, где приоритет ниже, чем "Высокий":
priority < Высокий

 <=

 Оператор "<=" используется для поиска заявок, где значение указанного поля больше или равно указанному значению.

Найти все заявки, которые не были обновлены в прошлом месяце (30 дней):
updated <= "-4w 2d"

IN

Оператор "IN" используется для поиска заявок, где значение указанного поля является одним из нескольких заданных значений. Значения задаются в виде списка, разделенного запятыми, круглые скобки.

Найти заявки, входящие в несколько определённых проектов:
project in(ProjectName_1, ProjectName_2, ProjectName_3)

NOT IN

 Оператор "NOT IN" используется для поиска заявок, где значение указанного поля не является одним из нескольких заданных значений.

Найти заявки, в которых исполнителями являются все кроме указанных или поле Исполнитель пустое:
assignee not in (UserName_1, UserName_2) or assignee is empty

~

Оператор "~" используется для поиска проблем, где значение указанного поля соответствует заданному значению. Поиск осуществляется по текстовым полям (Summary, Description, Environment, Comments, пользовательские поля, которые используют поле для поиска текста).

Найти заявки, в тексте которых встречается фраза "необходимо разработать ТЗ":
text ~ "необходимо разработать ТЗ"

!~

Оператор "!~" используется для поиска проблем, где значение указанного поля не соответствует заданному значению. Поиск осуществляется по текстовым полям. (Summary, Description, Environment, Comments, пользовательские поля, которые используют поле для поиска текста).

Найти в проекте ProjectName все заявки, в теме которых нет фразы: "бронь тестировщика":
project = ProjectName AND summary !~ "бронь тестировщика"

IS

Оператор "IS" может быть использован только c EMPTY или NULL. Т.е. указанное поле является пустым.

Найти в проекте ProjectName все заявки, в которых поле Заказчик пустое:
project = ProjectName AND Заказчик is EMPTY

IS NOT

Оператор "IS NOT" может быть использован только c EMPTY или NULL. Т.е. указанное поле имеет значение.

Найти в проекте ProjectName все заявки, в которых поле Заказчик заполнено:
project = ProjectName AND Заказчик is not EMPTY

WAS

Оператор "WAS" используется для поиска заявок, в которых значение указанного поля соответствовало заданному значению.
*Предикаты, с которыми используется данный оператор:

  • AFTER "date"
  • BEFORE "date"
  • BY "username"
  • DURING ("date1","date2")
  • ON "date"

Найти все заявки, которые были переведены в статус Закрыт пользователем UserName до 01.01.2017г.:
status WAS Закрыт BY User BEFORE "2017/01/01"

WAS IN

Оператор "WAS IN" используется для поиска заявок, в которых значение указанного поля являлось одним из нескольких заданных значений.
*Предикаты, с которыми используется данный оператор:

  • AFTER "date"
  • BEFORE "date"
  • BY "username"
  • DURING ("date1","date2")
  • ON "date"

Найти все заявки, которые были в статусах Закрыт и Готов пользователем  UserName до 01.10.2016г.:
status was in(Закрыт, Готов) BY UserName BEFORE "2016/10/01"

WAS NOT IN

Оператор "WAS NOT IN" используется для поиска заявок, где значение указанного поля не являлось одним из нескольких заданных значений.
*Предикаты, с которыми используется данный оператор:

  • AFTER "date"
  • BEFORE "date"
  • BY "username"
  • DURING ("date1","date2")
  • ON "date"

Найти все заявки, которые не были в статусах Закрыт и Готов до 27.01.2017г.:
status was not in(Закрыт, Готов) BEFORE "2016/01/27"

WAS NOT

Оператор "WAS NOT" может быть использован только c EMPTY или NULL. Т.е. указанное поле имело значение.
Предикаты, с которыми используется данный оператор:

  • AFTER "date"
  • BEFORE "date"
  • BY "username"
  • DURING ("date1","date2")
  • ON "date"

Найти все заявки, статус которых был не "Закрыт" после 30.01.2017г.:
status was not Закрыт AFTER "2017/01/30"

changed

Оператор "CHANGED" позволяет получить заявки, которые были изменены в соответствии с условием.
Предикаты, с которыми используется данный оператор:

  • AFTER "date"
  • BEFORE "date"
  • BY "username"
  • DURING ("date1","date2")
  • ON "date"
  • FROM "oldvalue"
  • TO "newvalue"

Вывести все заявки, у которых был изменен статус с "Новый" на "Согласование" пользователем UserName после 01 января 2017
status changed from Новый to Согласование by UserName AFTER '2017-01-01'

3 comments

Comment

Log in or Sign up to comment
zekunova April 28, 2018

@Andrey Goryunov очень тяжело таблицу читать( Но спасибо.

TatianaAristova August 16, 2018

Спасибо! А следующие части были?

Andrey Goryunov August 20, 2018

Я совсем забыл про статью и новый материал не выкладывал. Постараюсь найти время до конца сентября.

Like Maryna Topikha likes this
Otabek_G-rov June 4, 2019

Подскажите а как можно сортировать список от новых к просмотренным, или как то выделить не просмотренные.

TAGS
AUG Leaders

Atlassian Community Events