Задача

Бывает нужно найти задачи, по критерию, относящемуся к связанным задачам. Например, в проекте есть "улучшения" и связанные  ними "ошибки". Предположим, что нам нужно получить список открытых "улучшений", по которым есть неисправленные и к тому же блокирующие "ошибки".

Решение

Увы, штатными средствами JIRA решить такую задачу невозможно. На помощь приходит бесплатный плагин Script Runner. Помимо множества прочих полезных функций плагин добавляет в JIRA новый JQL-оператор "issueFunction". В нём то и есть свойство, позволяющее задать параметры связанных задач.

Пример 1

У нас в JIRA ведутся сделки (тип sale) и карточки инстансов (instance). Есть задача - получить список неоплаченных клиентских инстансов на хостинге. Приведем это бизнес-требование к формату, понятному аналитику или системному администратору:

Покажи карточки работающих в промышленном режиме инстансов, у которых нет сделок в статусе "Поставка услуг".

Пишем JQL-запрос:

reporter != robot AND issuetype = Instance AND "Режим работы" = Промышленный AND status = Работает AND issueFunction not in linkedIssuesOf("status = Delivering", "Инстансы по Сделке")

, где ключевым моментом, на который стоит обратить внимание в рамках данной задачи, является выражение, описывающее фильтр связанных сделок:

issueFunction not in linkedIssuesOf("status = Delivering", "Инстансы по Сделке"). 

Дословно это означает: покажи все инстансы, у которых НЕТ задач с типом связи "Инстансы по Сделке" в статусе "Delivering".

(error) Обращаю внимание, данная конструкция не понимает статусы с пробелами, поэтому в данном примере наш статус был использован не в оргинале - "Поставка услуг", а в переводе одним словом "Delivering".

Скриншот с результатами:

Пример 2

Возможно ли сделать выборку заявок, не имеющих связи с другими заявками?

Пишем следующий JQL-запрос (перечисляйте все имена ваших связей - их обычно не много):

issueFunction not in hasLinkType("Дубликат") AND issueFunction not in hasLinkType("Связанные задачи")

Пример 3

Найти все запросы, где автор и исполнитель разные пользователи:

issueFunction in expression("", "assignee != reporter")

Полезные ссылки по теме