Структуру JQL-запросов без примеров сложно понять специалистам, не знакомым ранее с JIRA.
Мы уже успели рассказать про быстрый и базовый поиск. Теперь же прейдем к самому мощному из трех методов — к продвинутому поиску.
В этом режиме вы можете указывать критерии, которые нельзя задавать в остальных предыдущих двух режимах (например, сортировку ORDER BY). Но придётся освоить создание структурированных запросов с помощью JIRA Query Language (JQL).
Для использования «продвинутого» поиска перейдите в пункт меню Поиск --> Поиск запросов.
А если вы находитесь в режиме «базового» поиска, нажмите кнопку «Продвинутый»
1. Создание JQL-запросов
Простейший запрос на JQL состоит из поля, за которым следует оператор, а затем одно или несколько допустимых значений для этого поля. Например:
project = «YAT»
Такой запрос поможет найти все задачи проекта «YAT». Здесь использовано поле «project», оператор эквивалента "=" и допустимое значение «YAT».
Более сложный запрос может выглядеть так:
project = «YAT» AND assignee = currentuser()
Так мы отберём все задачи проекта «YAT», назначенные на текущего пользователя
(то есть на вас). В запросе содержатся: логический оператор «AND», поле «assignee» для отбора задач по текущему пользователю, оператор эквивалента "=" и функция «currentuser()», возвращающая имя текущего пользователя системы.
При создании запроса в режиме «продвинутого» поиска JIRA показывает список всех возможных операторов для поля запроса.
Также JIRA показывает список доступных значений для полей "AffectedVersion", "FixVersion", "Components", кастомных полей формата "Version" и выпадающих списков.
При использовании в поиске полей формата "User" JIRA позволяет найти необходимого пользователя по его фамилии.
Вы можете использовать круглые скобки в сложных JQL-запросах. Например, если хотите найти все разрешенные задачи в проекте «SysAdmin», а также все задачи (любого статуса, любого проекта), назначенные в настоящее время системному администратору (admin), то можете использовать круглые скобки, обозначая приоритет логических операторов в запросе.
(project=SysAdmin AND status=resolved) OR assignee=admin
Внимание!
В JQL есть зарезервированные символы.
Если хотите использовать один из них в запросе, то необходимо:
Пример:
summary ~ "\\[example\\]"
Внимание!
Также в JIRA есть зарезервированные слова.
Если в тексте поиска упомянуто одно из перечисленных ниже слов, этот текст нужно выделить либо двойными кавычками ("......"), либо одинарными ('......').
Список зарезервированных слов:
2. Использование шаблонов для поиска по тексту
Специальные символы могут быть использованы для определения шаблонов поиска по тексту. Рассмотрим несколько примеров:
3. Логические операторы JQL
4. Операторы сравнения JQL
5. Функции JQL
Надеюсь, что разбор продвинутого режима поможет вам при поиске задач.
Пользуйтесь и не теряйтесь ;)
Мы уже успели рассказать про быстрый и базовый поиск. Теперь же прейдем к самому мощному из трех методов — к продвинутому поиску.
В этом режиме вы можете указывать критерии, которые нельзя задавать в остальных предыдущих двух режимах (например, сортировку ORDER BY). Но придётся освоить создание структурированных запросов с помощью JIRA Query Language (JQL).
Для использования «продвинутого» поиска перейдите в пункт меню Поиск --> Поиск запросов.
А если вы находитесь в режиме «базового» поиска, нажмите кнопку «Продвинутый»
1. Создание JQL-запросов
Простейший запрос на JQL состоит из поля, за которым следует оператор, а затем одно или несколько допустимых значений для этого поля. Например:
project = «YAT»
Такой запрос поможет найти все задачи проекта «YAT». Здесь использовано поле «project», оператор эквивалента "=" и допустимое значение «YAT».
Более сложный запрос может выглядеть так:
project = «YAT» AND assignee = currentuser()
Так мы отберём все задачи проекта «YAT», назначенные на текущего пользователя
(то есть на вас). В запросе содержатся: логический оператор «AND», поле «assignee» для отбора задач по текущему пользователю, оператор эквивалента "=" и функция «currentuser()», возвращающая имя текущего пользователя системы.
При создании запроса в режиме «продвинутого» поиска JIRA показывает список всех возможных операторов для поля запроса.
Также JIRA показывает список доступных значений для полей "AffectedVersion", "FixVersion", "Components", кастомных полей формата "Version" и выпадающих списков.
При использовании в поиске полей формата "User" JIRA позволяет найти необходимого пользователя по его фамилии.
Вы можете использовать круглые скобки в сложных JQL-запросах. Например, если хотите найти все разрешенные задачи в проекте «SysAdmin», а также все задачи (любого статуса, любого проекта), назначенные в настоящее время системному администратору (admin), то можете использовать круглые скобки, обозначая приоритет логических операторов в запросе.
(project=SysAdmin AND status=resolved) OR assignee=admin
Внимание!
В JQL есть зарезервированные символы.
символ | + | . | , | ; | ? | | | * | / | % | ^ | $ | # | @ | [ | ] |
Если хотите использовать один из них в запросе, то необходимо:
- выделить текст, содержащий специальный символ, либо двойными кавычками ("......"), либо одинарными ('......');
- если в тексте поиска есть один из перечисленных ниже символов, то перед ним обязательно проставляется двойной backslashe ("\\").
+ — & |! ( ) { } [ ] ^ ~ *? \ :
Пример:
summary ~ "\\[example\\]"
Внимание!
Также в JIRA есть зарезервированные слова.
Если в тексте поиска упомянуто одно из перечисленных ниже слов, этот текст нужно выделить либо двойными кавычками ("......"), либо одинарными ('......').
Список зарезервированных слов:
A | «abort», «access», «add», «after», «alias», «all», «alter», «and», «any», «as», «asc», «audit», «avg» |
B | «before», «begin», «between», «boolean», «break», «by», «byte» |
C | «catch», «cf», «char», «character», «check», «checkpoint», «collate», «collation», «column», «commit», «connect», «continue», «count», «create», «current» |
D | «date», «decimal», «declare», «decrement», «default», «defaults», «define», «delete», «delimiter», «desc», «difference», «distinct», «divide», «do», «double», «drop» |
E | «else», «empty», «encoding», «end», «equals», «escape», «exclusive», «exec», «execute», «exists», «explain» |
F | «false», «fetch», «file», «field», «first», «float», «for», «from», «function» |
H | «having» |
I | «identified», «if», «immediate», «in», «increment», «index», «initial», «inner», «inout», «input», «insert», «int», «integer», «intersect», «intersection», «into», «is», «isempty», «isnull» |
J | «join» |
L | «last», «left», «less», «like», «limit», «lock», «long» |
M | «max», «min», «minus», «mode», «modify», «modulo», «more», «multiply» |
N | «next», «noaudit», «not», «notin», «nowait», «null», «number» |
O | «object», «of», «on», «option», «or», «order», «outer», «output» |
P | «power», «previous», «prior», «privileges», «public» |
R | «raise», «raw», «remainder», «rename», «resource», «return», «returns», «revoke», «right», «row», «rowid», «rownum», «rows» |
S | «select», «session», «set», «share», «size», «sqrt», «start», «strict», «string», «subtract», «sum», «synonym» |
T | «table», «then», «to», «trans», «transaction», «trigger», «true» |
U | «uid», «union», «unique», «update», «user» |
V | «validate», «values», «view» |
W | «when», «whenever», «where», «while», «with» |
2. Использование шаблонов для поиска по тексту
Специальные символы могут быть использованы для определения шаблонов поиска по тексту. Рассмотрим несколько примеров:
Знак | Область применения и описание | Пример |
---|---|---|
? | "?" используется для замены одного символа в шаблоне. Например, написание слов «text» и «test» отличается одним символом. Для поиска обоих вариантов достаточно задать шаблон: te?t |
summary~«te?t» |
* | "*" используется для замены в текстовом шаблоне нуля или нескольких символов. Например, для отбора текста «Windows», «Win95» или «WindowsNT» можно использовать шаблон: win* Для отбора текста «Win95» или «Windows95» можно использовать шаблон: wi*95 |
summary~«wi*95» |
~ | "~" может быть использована для задания нечетких поисковых шаблонов. В этом случае символ "~" подставляется в конце нужного слова. Например, чтобы найти термин, орфографически похожий на «roam», используйте шаблон: roam~ В результате могут быть найдены слова «foam» или «roams». |
summary~«prox~» |
3. Логические операторы JQL
Оператор | Описание | Пример |
---|---|---|
AND | Логическая операция «И», соединяющая два или несколько условий. Используется для уточнения условий отбора. |
project = «YAT» and status = «Оpen» — отобрать все задачи проекта «YAT» в статусе «Open» |
OR | Логическая операция «ИЛИ», соединяющая два или несколько условий. |
reporter = demo_1 or reporter = demo_2 — отобрать все задачи проекта, автором которых является пользователь demo_1 или пользователь demo_2. |
NOT | Для реверсирования результата логического условия. | not assignee = demo_1 — отобрать все задачи, автором которых не является пользователь demo_1. |
ORDER BY | Сортировать по. По умолчанию будет использоваться собственный порядок, применяемый для этого поля. Вы можете переопределить направление сортировки — по возрастанию («asc») или убыванию («desc»). |
duedate = empty order by created — отобрать все задачи, у которых пустые поля «Due date» (Срок исполнения), отсортировать результаты выборки по полю «Created» (Создано). duedate = empty order by created, priority desc — отобрать все задачи, у которых пустые поля «Due date» (Срок исполнения), отсортировать результаты выборки по полю «Created» (Создано) в собственном порядке, затем по полю «Priority» (Приоритет) в убывающем порядке. |
4. Операторы сравнения JQL
Оператор | Описание | Пример |
---|---|---|
= | Эквивалент. Используется для задания критерия полного соответствия. |
reporter = demo_1 |
!= | Не равен. Используется для задания критерия поиска, который однозначно говорит, что в найденной задаче определенное поле не должно содержать определенного значения. |
reporter != demo_1 либо можно использовать запись NOT reporter = demo_1 |
> | Больше, чем. Используется для создания выражений с полями формата «Version», формата дата-время и числовых полей. |
votes > 4 duedate > now() |
>= | Больше либо равно. Используется для создания выражений с полями формата «Version», формата дата-время и числовых полей. |
votes >= 4 duedate >= «2008/12/31» created >= "-5d" |
< | Меньше, чем. Используется для создания выражений с полями формата «Version», формата дата-время и числовых полей. |
votes < 4 duedate < now() |
<= | Меньше либо равно. Используется для создания выражений с полями формата «Version», формата дата-время и числовых полей. |
updated <= "-4w 2d" |
IN | Используется для отбора задач по наличию в определенном поле одного из значений. Набор вариантов значений выделяется с двух сторон круглыми скобками, варианты внутри скобок перечисляются через запятую. |
affectedVersion in («3.14», «4.2») reporter in (demo_1, demo_2) or assignee in (demo_1, demo_2) |
NOT IN | Используется для отбора задач, в определенном поле которых не содержится ни одно из перечисленных значений. Набор вариантов значений выделяется с двух сторон круглыми скобками, варианты внутри скобок перечисляются через запятую. |
FixVersion not in (A, B, C, D) либо можно использовать запись not FixVersion in (A, B, C, D) |
~ | Содержит. Используется исключительно для критериев отбора по текстовым полям. |
summary ~ win summary ~ «issue collector» |
!~ | Не содержит. Используется исключительно для критериев отбора по текстовым полям. |
summary !~ «issue collector» либо можно использовать запись not summary ~ «issue collector» |
IS | Этот оператор можно использовать только со значениями EMPTY или NULL. Используется для поиска задач, определенное поле которых не содержит значений. |
fixVersion is empty |
IS NOT | Этот оператор можно использовать только со значениями EMPTY или NULL. Применяется для поиска задач, определенное поле которых обязательно задано. |
affectedVersion is not empty |
WAS | Для отбора задач, определенное поле которых ранее имело указанное значение. Применимо исключительно к полям:
Оператор WAS также может иметь следующие необязательные предикаты:
|
status WAS «In Progress» — для отбора задач, когда-либо находившихся в статусе «In Progress». status WAS «Resolved» BY demo_1 BEFORE «2011/02/02» — для отбора задач, переведенных в статус «Resolved» пользователем demo_1 до даты «2011/02/02». |
WAS IN | Для отбора задач, определенное поле которых ранее содержало одно из перечисленных значений. Область применения и предикаты, применяемые для оператора WAS IN, те же, что и для оператора WAS. |
status WAS IN («Resolved»,«In Progress») BEFORE «2011/02/02» — для отбора задач, переведенных в статус «Resolved» или «In Progress» до даты «2011/02/02». |
WAS NOT IN | Для отбора задач, которые никогда, либо до некоторого момента, не содержали в определенном поле ни одно из перечисленных значений. Область применения и предикаты, применяемые для оператора WAS NOT IN, те же, что и для оператора WAS. |
status WAS NOT IN («Resolved»,«In Progress») BEFORE «2011/02/02» — для отбора задач, ранее не находившихся в статусах «Resolved» и «In Progress» до даты «2011/02/02». |
WAS NOT | Для отбора задач, которые никогда, либо до некоторого момента, не содержали в определенном поле заданного значения. Область применения и предикаты, применяемые для оператора WAS NOT, те же, что и для оператора WAS. |
status WAS NOT «In Progress» BEFORE «2011/02/02» — для отбора задач, ранее не находившихся в статусе «In Progress» до даты «2011/02/02». |
CHANGED | Для отбора задач, заданное поле которых было изменено. Применимо исключительно к полям:
Оператор WAS также может иметь следующие необязательные предикаты:
|
assignee CHANGED — для отбора задач, исполнитель которых был изменен. status CHANGED FROM «In Progress» TO «Open» — для отбора задач статус, которых был изменен с «In Progress» обратно на «Open». priority CHANGED BY demo_1 BEFORE endOfWeek() AFTER startOfWeek() — для отбора задач, приоритет которых был изменен в период текущей недели пользователем demo_1. |
5. Функции JQL
Функция | Описание | Синтаксис | Доступные операторы | Примеры |
---|---|---|---|---|
approved() | Только для JIRA Service Desk. Для отбора задач JIRA Service Desk, требующих согласования, окончательное решение по которым одобрено. Применяется к полям типа «Approvals». |
approved() | = | approval = approved() |
approver() | Только для JIRA Service Desk. Для отбора задач JIRA Service Desk, требующих согласования или уже согласованные одним или всеми из указанных пользователей. Применяется к полям типа «Approvals». |
approver (user,user) |
= | approval = approver (demo_1, demo_2) |
cascade Option() |
Для отбора задач по значению каскадного поля (полей зависимых списков). | cascadeOption (parentOption) cascadeOption (parentOption, childOption) |
IN, NOT IN | «Вид запроса» in cascadeOption («Застройщик», «Пролонгация») |
closed Sprints() |
Применимо к полю «Sprint». Для отбора задач, добавленных в завершенные спринты. |
closedSprints() | IN, NOT IN | sprint in closedSprints() |
components LeadByUser() |
Применимо к полю «Components» (Компоненты). Для отбора задач, в поле «Components» (Компоненты) которых выбран компонент, лидом которого являетесь вы сами или выбранный вами пользователь. |
Components LeadByUser() используется для отбора задач по текущему пользователю components LeadByUser (username) |
IN, NOT IN | component in components LeadByUser() — лидом компонентов являетесь вы сами. component in components LeadByUser (demo_1) — лидом компонентов является пользователь demo_1. |
current Login() |
Возвращает время начала сеанса текущего пользователя. Используется в выражениях с полями «Created» (Создано), «Due Date» (Срок исполнения), «Resolved» (Дата решения), «Updated» (Обновлено), кастомными полями формата дата-время. |
currentLogin() | =, !=, >, >=, <, <= в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED |
created > currentLogin() |
currentUser() | Возвращает логин текущего авторизованного пользователя. Используется для создания выражений с полями «Reporter» (Автор ), «Assignee» (Исполнитель ), «Voter», «Watcher» и кастомными полями формата «User». |
currentUser() | =, != | reporter = currentUser() assignee != currentUser() OR assignee is EMPTY |
earliest Unreleased Version() |
Для поиска на основе самой ранней не выпущенной версии (т. е. следующей версии, которая должна быть выпущена) указанного проекта. Внимание Самая ранняя не выпущенная версия определяется порядком, а не датами. Применяется для создания выражений с полями «AffectedVersion» (Проявляется в версиях"), «FixVersion» (Исправлено в версиях), кастомными полями формата Version. |
earliest Unreleased Version(project) |
IN, NOT IN | affectedVersion = earliestUnreleased Version (ABC) fixVersion = earliestUnreleased Version (ABC) |
endOfDay() | Для поиска по концу текущего дня. Используется в выражениях с полями «Created» (Создано), «Due Date» (Срок исполнения), «Resolved» (Дата решения), «Updated» (Обновлено), кастомными полями формата даты-времени. |
endOfDay() endOfDay(«inc») где inc — опциональный инкримент (±)nn(y|M|w|d|h|m). Если спецификатор единицы измерения времени опущен, по умолчанию используется естественный период функции, т. е. 1 день. Если опущен знак ±, то по умолчанию предполагается +. |
=, !=, >, >=, <, <= в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED |
due < endOfDay() — срок исполнения до конца текущего дня. due < endOfDay ("+1") — срок исполнения до конца завтрашнего дня. |
endOfMonth() | Для поиска по концу текущего месяца. Используется в выражениях с полями «Created» (Создано), «Due Date» (Срок исполнения), «Resolved» (Дата решения), «Updated» (Обновлено), кастомными полями формата дата-время. |
endOfMonth() endOfMonth(«inc») где inc — опциональный инкримент (±)nn(y|M|w|d|h|m). Если спецификатор единицы измерения времени опущен, по умолчанию используется естественный период функции, т. е. 1 месяц. Если опущен знак ±, то по умолчанию предполагается +. |
=, !=, >, >=, <, <= в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED |
due < endOfMonth() — срок исполнения до конца текущего месяца. due < endOfMonth ("+15d") — срок исполнения до 15-го числа следующего месяца. |
endOfWeek() | Для поиска по концу текущей недели. Используется в выражениях с полями «Created» (Создано), «Due Date» (Срок исполнения), «Resolved» (Дата решения), «Updated» (Обновлено), кастомными полями формата дата-время. |
endOfWeek() endOfWeek(«inc»), где inc — опциональный инкримент (±)nn(y|M|w|d|h|m). Если спецификатор единицы измерения времени опущен, по умолчанию используется естественный период функции, т. е. 1 неделя. Если опущен знак ±, то по умолчанию предполагается +. |
=, !=, >, >=, <, <= в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED |
due < endOfWeek() — срок исполнения до конца текущей недели. due < endOfWeek ("+1") — срок исполнения до конца следующей недели. |
endOfYear() | Для поиска по концу текущего года. Используется в выражениях с полями «Created» (Создано), «Due Date» (Срок исполнения), «Resolved» (Дата решения), «Updated» (Обновлено), кастомными полями формата дата-время. |
endOfYear() endOfYear(«inc») где inc — опциональный инкримент (±)nn(y|M|w|d|h|m). Если спецификатор единицы измерения времени опущен, по умолчанию используется естественный период функции, т. е. 1 год. Если опущен знак ±, то по умолчанию предполагается +. |
=, !=, >, >=, <, <= в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED |
due < endOfYear() — срок исполнения до конца текущего года. due < endOfYear ("+3M") — срок исполнения до конца марта следующего года. |
issueHistory() | Возвращает последние 50 просмотренных вами задач. | issueHistory() | IN, NOT IN | issue in issueHistory() |
issuesWith RemoteLinks ByGlobalId() |
Для отбора задач, имеющих внешние ссылки с определенными global ids. Внимание Функция позволяет вводить идентификаторы global id в количестве от 1 до 100. Пустой вызов функции или вызов функции с количеством параметров > 100 приведет к ошибке. |
issues WithRemote LinksByGlobalId() |
IN, NOT IN | issue in issuesWithRemote LinksByGlobalId (abc, def) |
lastLogin() | Возвращает время начала предыдущего сеанса текущего пользователя. Используется в выражениях с полями «Created» (Создано), «Due Date» (Срок исполнения), «Resolved» (Дата решения), «Updated» (Обновлено), кастомными полями формата дата-время. |
lastLogin() | =, !=, >, >=, <, <= в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED |
created > lastLogin() |
latest Released Version() |
Для поиска на основе самой последней выпущенной версии указанного проекта. Внимание Самая последняя выпущенная версия определяется порядком, а не датами. Применяется для создания выражений с полями «AffectedVersion» (Проявляется в версиях), «FixVersion» (Исправлено в версиях), кастомными полями формата Version. |
latest ReleasedVersion (project) |
=, != | affectedVersion = latestReleased Version(ABC) fixVersion = latestReleased Version(ABC) |
linkedIssues() | Для отбора задач по признаку наличия связи с определенной задачей. Внимание LinkType чувствителен к регистру. |
linkedIssues (issueKey) linkedIssues (issueKey,linkType) |
IN, NOT IN | issue in linkedIssues (ABC-123, «is duplicated by») |
membersOf() | Для отбора задач по признаку принадлежности пользователя из определенного поля определенной JIRA-группе. Используется для создания выражений с полями «Reporter» (Автор), «Assignee» (Исполнитель), «Voter», «Watcher» и кастомными полями формата «User». |
membersOf (Group) |
IN, NOT IN | assignee not in membersOf(QA) |
myApproval() | Только для JIRA Service Desk. Для отбора задач JIRA Service Desk, требующих согласования текущего пользователя или уже согласованных текущим пользователем. Применяется к полям типа «Approvals». |
myApproval() | = | approval = myApproval() |
myPending() | Только для JIRA Service Desk. Для отбора задач JIRA Service Desk, требующих согласования текущего пользователя. Применяется к полям типа «Approvals». |
myPending() | = | approval = myPending() |
now() | Для поиска за текущее время. Используется для создания выражений с полями «Reporter» (Автор), «Assignee» (Исполнитель), «Voter», «Watcher» и кастомными полями формата «User». |
now() | =, !=, >, >=, <, <= в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED |
duedate < now() and status not in (closed, resolved) |
openSprints() | Применимо к полю «Sprint». Для отбора задач, добавленных в незавершенные спринты |
openSprints() | IN, NOT IN | sprint in openSprints() |
pending() | Только для JIRA Service Desk. Для отбора задач JIRA Service Desk, требующих согласования. Применяется к полям типа «Approvals». |
pending() | = | approval = pending() |
pendingBy() | Только для JIRA Service Desk. Для отбора задач JIRA Service Desk, требующих согласования определенного(ых) пользователя(ей). Применяется к полям типа «Approvals». |
pendingBy (user1,user2) projectsLead ByUser() |
= | approval = pending(demo_1) approval = pending(demo_1, demo_2) |
projectsLead ByUser() |
Для отбора задач из проектов, на роль Project Lead которых назначен определенный пользователь. Применяется к полю «Project». |
projectsLeadByUser() — для отбора задач по текущему пользователю. projectsLead ByUser (username) |
IN, NOT IN | project in projectsLead ByUser() AND status = Open project in projectsLead ByUser(demo_1) AND status = Open |
projects WhereUser Has Permission() |
Для отбора задач из проектов, в которых текущий пользователь имеет определенное разрешение. Применяется к полю «Project». |
projects WhereUser HasPermission (permission) |
IN, NOT IN | project in projectsWhere UserHas Permission («Resolve Issues») AND status = Open |
projects WhereUser HasRole() |
Для отбора задач из проектов, в которых текущий пользователь имеет определенную проектную роль. Применяется к полю «Project». |
projectsWhere UserHasRole (rolename) |
IN, NOT IN | project in projectsWhere UserHasRole («Developers») AND status = Open |
released Versions() |
Для поиска по выпущенным версиям определенного проекта или сразу всем JIRA-проектам. Применяется для создания выражений с полями «AffectedVersion» (Проявляется в версиях), «FixVersion» (Исправлено в версиях), кастомными полями формата Version. |
ReleasedVersions() — для отбора задач по всем проектам. releasedVersions (project) |
IN, NOT IN | fixVersion in releasedVersions (ABC) affectedVersion in releasedVersions (ABC) |
standard IssueTypes() |
Для отбора задач родительского типа. | standard IssueTypes() |
IN, NOT IN | issuetype in standard IssueTypes() |
startOf Day() |
Для поиска по началу текущего дня. Используется в выражениях с полями «Created» (Создано), «Due Date» (Срок исполнения), «Resolved» (Дата решения), «Updated» (Обновлено), кастомными полями формата дата-время. |
startOfDay() startOfDay(«inc») где inc — опциональный инкримент (±)nn(y|M|w|d|h|m). Если спецификатор единицы измерения времени опущен, по умолчанию используется естественный период функции, т. е. 1 день. Если опущен знак ±, то по умолчанию предполагается +. |
=, !=, >, >=, <, <= в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED |
created > startOfDay() – задачи, созданные за текущий день. created > startOfDay ("-3d") – задачи, созданные за последние три дня. |
startOf Month() |
Для поиска по началу текущего месяца. Используется в выражениях с полями «Created» (Создано), «Due Date» (Срок исполнения), «Resolved» (Дата решения), «Updated» (Обновлено), кастомными полями формата дата-время. |
startOfMonth() startOfMonth(«inc») где inc — опциональный инкримент (±)nn(y|M|w|d|h|m). Если спецификатор единицы измерения времени опущен, по умолчанию используется естественный период функции, т. е. 1 месяц. Если опущен знак ±, то по умолчанию предполагается +. |
=, !=, >, >=, <, <= в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED |
created > startOfMonth() — задачи, созданные за текущий месяц created > startOfMonth ("+14d") — задачи, созданные с пятнадцатого числа текущего месяца. |
startOf Week() |
Для поиска по началу текущей недели. Используется в выражениях с полями «Created» (Создано), «Due Date» (Срок исполнения), «Resolved» (Дата решения), «Updated» (Обновлено), кастомными полями формата даты-времени. |
startOfWeek() startOfWeek(«inc»), где inc — опциональный инкримент (±)nn(y|M|w|d|h|m). Если спецификатор единицы измерения времени опущен, по умолчанию используется естественный период функции, т. е. 1 неделя. Если опущен знак ±, то по умолчанию предполагается +. |
=, !=, >, >=, <, <= в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED |
created > startOfWeek()- задачи, созданные за текущую неделю. created > startOfWeek ("-1") — задачи, дата создания которых старше начала прошлой недели. |
startOf Year() |
Для поиска по началу текущего года. Используется в выражениях с полями «Created» (Создано), «Due Date» (Срок исполнения), «Resolved» (Дата решения), «Updated» (Обновлено), кастомными полями формата дата-время. |
startOfYear() startOfYear(«inc») где inc — опциональный инкримент (±)nn(y|M|w|d|h|m). Если спецификатор единицы измерения времени опущен, по умолчанию используется естественный период функции, т. е. 1 год. Если опущен знак ±, то по умолчанию предполагается +. |
=, !=, >, >=, <, <= в предикатах операторов WAS, WAS IN, WAS NOT, WAS NOT IN, CHANGED |
created > startOfYear() — задачи созданные за текущий год. created > startOfYear ("-1") — задачи, дата создания которых старше начала прошлого года. |
subtask IssueTypes() |
Для отбора подзадач. | subtask IssueTypes() |
IN, NOT IN | issuetype in subtask IssueTypes() |
unreleased Versions() |
Для поиска по не выпущенным версиям определенного проекта или сразу всем JIRA-проектам. Применяется для создания выражений с полями «AffectedVersion» (Проявляется в версиях), «FixVersion» (Исправлено в версиях), кастомными полями формата Version. |
unreleasedVersions() используется для отбора задач по всем проектам. unreleased Versions (project) |
IN, NOT IN | fixVersion in unreleased Versions(ABC) |
voted Issues() |
Для отбора задач, за которые вы отдали свой голос. | votedIssues() | IN, NOT IN | issue in votedIssues() |
watched Issues() |
Для отбора задач, наблюдателем которых являетесь вы. | watchedIssues() | IN, NOT IN | issue in watchedIssues() |
Надеюсь, что разбор продвинутого режима поможет вам при поиске задач.
Пользуйтесь и не теряйтесь ;)
Комментарии (24)
Apakc
07.05.2019 15:30Очень не хватает раскрытия темы про issueFunction.
aayatsenko Автор
07.05.2019 15:42Добрый день.
issueFunction — идет в комплекте со Script Runner.
Есть идея позднее описать возможности Script Runner в рамках JQL.
Сейчас активно собираю весь материал :-)Apakc
07.05.2019 15:45Оу, спасибо за эту деталь — не знал, думал «из коробки» идет.
В любом случае, если эта статья про продвинутый поиск, то issueFunction уже профессиональный. Немало времени ушло на его раскуривание. Оформить его в статью было бы дюже полезно.
maxzh83
Подскажите, пожалуйста, как осуществить такой поиск:
Есть список задач, у которых есть префикс, например «BE:». Я хочу найти все задачи, в которых есть префикс BE и слово «пользователь». Хочется написать вот так:
summary ~ "BE:*пользователь*"
Но это не работает, я так понял, что "*" работает только внутри слова и это вот очень странное поведение. Буду признателен, если подскажите как следует написать запрос.
Apakc
Проще всего будет
summary ~ "BE" and summary ~ "пользователь"
maxzh83
Для некоторых кейсов работает, для некоторых нет (для префикса FE ищет, для BE — нет). Почему так происходит, непонятно. Из-за таких вот
глюковособенностей возникает дикое негодование от пользования хорошим продуктом.Apakc
Значит, причина в чем-то другом. Может быть там русские В или Е?
Как правило, в конечном итоге приходит понимание что сам себе злой буратино. К JIRA есть много вопросов, но поиск, как раз, работает очень стабильно.
aayatsenko Автор
Apakc
Проверил. Этот кейс действительно воспроизводится :-) С FE Работает :-)
maxzh83
А с этим кейсом в поддержку atlassian не обращались? :-) Уж очень интересное поведение :-)
maxzh83
Я в свое время искал причину, наткнулся на открытый баг, но потом забыл про это и просто не пользовался т.к. не понимал когда работает, а когда нет.
maxzh83
Нет, я тупо скопировал текст из заголовка.
vmm86
Возможен ещё вариант с помещением логического оператора внутрь строки:
summary ~ "BE: AND пользователь"
Но в обоих случаях падежи и числа русского языка не работают, по крайней мере, в JIRA 7.10.
Если пытаться писать «пользователя», «пользователю», «пользователи» и т.п. — ответ будет одинаковым, содержащим все формы этого слова.
Apakc
aayatsenko vmm86 maxzh83 Ну что же мы велосипед изобретаем. Как я и говорил, сами себе злобные буратины:
Документация
BE забукано атлассианом
aayatsenko Автор
Да. Я писал об этом. Экранировал \\ — не помогло :-)
Apakc
Тут экраном не обойтись. Ключевые слова из доков использовать в стандартном поиске вообще нельзя.
Может быть, стоит эту статью заапдейтить этими ограничениями тоже?
maxzh83
Замечательно. Как же это все «очевидно», конечно. Сначала догадайся что маска работает только на слово, а не на все текстовое поле. Потом держи в голове еще и слова, которые совсем нельзя использовать.
Apakc
Согласен. Штука дюже неочевидная.
Справедливости ради, отмечу, что за лет 8 ни разу не встречался с этим ограничением.
aayatsenko Автор
Да. Хорошая идея. Обязательно заапдейчу :-)
maxzh83
Вот так правильно же?
summary ~ "'BE'" and summary ~ «пользователь»
Не работает. Так тоже:
summary ~ 'BE'
Apakc
Синтаксически, правильно. Однако, «be» запрещен к использованию самим атлассианом, как и некоторые другие ключевые слова. См. мой коммент выше
maxzh83
Выдает все по пользователю, без учета BE
Apakc
Как вариант, использовать упомянутый ниже скриптраннер.
С запросом
project = X and issueFunction in issueFieldMatch("project = X", "summary", "BE:") and summary ~ "пользователь"
все завелось.
maxzh83
Спасибо, я помню крутил похожий вариант в поисках решения, но, видно, не дожал. Но повседневно такой красотой пользоваться не буду все же, просто не вспомню второй раз.
Apakc
Можно прикопать же фильтр :)