Время прочтения: 5 мин.
Ранее мы рассматривали основной функционал JQL в Jira. Во второй части разбора JQL мы рассмотрим применение функций для расширенного поиска. Вот ссылка на первую часть, если еще не видели (https://newtechaudit.ru/jql-dlya-nachinayushhih-polzovatelej/ ).
Функция в JQL отображается в виде слова, за которым идут круглые скобки. В этих скобках могут содержаться значения переменных, названий полей или, откуда функция возьмет эти значения.
В запросе JQL функции предшествует оператор, перед которым стоит название поля. Функция выполняет вычисления для конкретных данных Jira, либо для вычисления содержимого в скобках функции и извлекает только истинные результаты, которые потом будут использоваться в запросе JQL.
Следует запомнить, что поиск по JQL не возвращает пустые поля в результате. К примеру, для поиска задач, где исполнитель — не текущий пользователь, мы можем воспользоваться выражением assignee != currentUser(), но данное выражение пропустит задачи в которых исполнитель еще не назначен. Для включения в результат задач без исполнителя мы должны дополнительно дописать assignee is EMPTY, что дает нам в итоге вот такое выражение: assignee != currentUser() OR assignee is EMPTY
С водными разобрались, теперь рассмотрим некоторые существующие функции и примеры написания в запросе.
approved() ‒ ищет задачи, которым было или не было получено утверждение
Синтаксис: approved()
Поддерживаемые поля: катстомные поля типа Approval
Поддерживаемые операторы: =
Пример: поиск всех задач, по которым было получено утверждение: approvals = approved()
approver() ‒ ищет задачи, которые были утверждены определенным пользователем. Мы можем указать несколько пользователей внутри скобок через запятую, чтобы найти задачи так, как будто мы используем OR для их поиска.
Синтаксис: approver(user,user)
Поддерживаемые поля: катстомные поля типа Approval
Поддерживаемые операторы: =
Пример: найдем все задачи, одобренные Ivan: approvals = approver(Ivan), найдем все задачи, одобренные Ivan или Egor: approvals = approver(Ivan, Egor)
myApproval() ‒ ищет задачи, которые были утверждены текущим пользователем
Синтаксис: myApproval()
Поддерживаемые поля: катстомные поля типаApproval
Поддерживаемые операторы: =
Пример: найдем все задачи, которые были утверждены текущим пользователем: approvals = myApproval()
currentLogin() ‒ поиск происходит в рамках начала своей текущей сессии в Jira
Синтаксис: currentLogin()
Поддерживаемые поля: Created, Due, Resolved, Updated, катстомные поля типа Date/Time
Поддерживаемые операторы: = , != , > , >= , < , <= WAS* , WAS IN* , WAS NOT* , WAS NOT IN* , CHANGED*
* только в качестве предиката
Пример: найдем задачи, которые были созданы в рамках текущей сессии: created > currentLogin()
lastLogin() ‒ поиск происходит в рамках своей предыдущей сессии в Jira
Синтаксис: lastLogin()
Поддерживаемые поля: Created. Due, Resolved, Updated, катстомные поля типа Date/Time
Поддерживаемые операторы: = , != , > , >= , < , <= WAS* , WAS IN* , WAS NOT* , WAS NOT IN* , CHANGED*
* только в качестве предиката
Пример: найдем задачи, которые были созданы в рамках предыдущей сессии: created > lastLogin()
currentUser() ‒ поиск происходит по текущему пользователю. Отметим, что эта функция может использоваться только для залогированного пользователя – если вы используете в своих фильтрах анонимного пользователя, то не используйте эту функцию.
Синтаксис: currentUser()
Поддерживаемые поля: Assignee, Reporter, Voter, Watcher, Creator, катстомные поля типа User Поддерживаемые операторы: = , !=
Пример: найдем задачи, назначенные на текущего пользователя: assignee = currentUser(), найдем задачи, созданные текущем пользователем, но где он не является исполнителем: reporter = currentUser() AND (assignee != currentUser() OR assignee is EMPTY)
linkedIssues() ‒ функция ищет задачи, которые связаны с другой задачей. Дополнительно можно выбрать вид связи.
Синтаксис: linkedIssues(issueKey), linkedIssues(issueKey,CaseSensitiveLinkType)
Поддерживаемые поля: Issue
Поддерживаемые операторы: IN , NOT IN
Пример: найти все связные задачи с T-1000: issue in linkedIssues(T-1000), найти все связные задачи с T-1000 с типом связи is duplicated by: issue in linkedIssues(T-1000,»is duplicated by»)
membersOf() ‒ происходит поиск, который зависит от группы пользователя
Синтаксис: membersOf(Group)
Поддерживаемые поля: Assignee, Reporter, Voter, Watcher, Creator, катстомные поля типа User
Поддерживаемые операторы: IN , NOT IN , WAS IN , WAS NOT IN
Пример: найдем задачи, в которых исполнитель является участником группы «jira-administrators»: assignee in membersOf(«jira-administrators»), найдем задачи, в которых исполнитель является участником группы QA: assignee not in membersOf(QA)
now() ‒ происходит поиск, который зависит от текущего времени
Синтаксис: now()
Поддерживаемые поля: Created. Due, Resolved, Updated, катстомные поля типа Date/Time
Поддерживаемые операторы: = , != , > , >= , < , <= WAS* , WAS IN* , WAS NOT* , WAS NOT IN* , CHANGED*
* только в качестве предиката
Пример: найдем просроченные задачи: duedate < now() and status not in (closed, resolved)
updatedBy() ‒ поиск задач, которые были обновлены определенным пользователем и может дополнен периодом дат этого обновления. Под обновлением задачи подразумевается создание задачи, обновление любого поля в задаче, создание/удаление/последнее редактирование комментария. Эта функция возвращает до 32 тысяч задач. Для указания периода, мы можем воспользоваться следующими форматами: «yyyy/MM/dd», «yyyy-MM-dd». Или использовать «w» (weeks) или «d» (days) для обозначения от текущей даты.
Синтаксис: updatedBy(user), updatedBy(user, dateFrom), updatedBy(user, dateFrom, dateTo)
Поддерживаемые поля: Issuekey, and its aliases (id, issue, key)
Поддерживаемые операторы: IN , NOT IN
Пример: найдем все задачи, обновленные пользователем Nikita: issuekey IN updatedBy(Nikita), найдем все задачи, обновленные пользователем Nikita в течение 8ми дней: issuekey IN updatedBy(Nikita, «-8d»), найдем все задачи, обновленные в 2021 году с июня по август включительно: issuekey IN updatedBy(jsmith, «2018/06/01», «2018/08/31»). Для поиска задач, обновленных за последний час пользователем Nikita: issuekey IN updatedBy(Nikita, «-1h»)
watchedIssues() ‒ поиск происходит по задачам, в которых текущий пользователь является наблюдателем. Эта функция возвращает до 32 тысяч задач.
Синтаксис: watchedIssues()
Поддерживаемые поля: Issue
Поддерживаемые операторы: IN , NOT IN
Пример: найдем задачи, в которых текущий пользователь является наблюдателем: issue in watchedIssues()
А теперь попробуйте самостоятельно написать запрос, который в результате поиска выдаст:
- Задачи где пользователь является наблюдателем и связаны с задачами типа Epic.
- Задачи, где в Описании содержится слово «NewTechAudit» и пользователь Olga обновил задачу вчера.
В данной части мы рассмотрели расширенный функционал JQL. В следующей статье мы рассмотрим, какие существуют функции в JQL и полезные возможности по управлению вашими запросами JQL.