суббота, 18 августа 2018 г.

JIRA: JQL. Фильтр по времени, за период

Задача

Получить список задач, за указанный  период дат и указанный промежуток времени. Например: 
задачи, которые были созданы с 01.06.2018 по 30.06.2018 в промежуток с 11:00 до 16:31

Пожелания

Иметь возможность вариативно указывать дополнительные параметры стандартного фильтра: проект, статус и др.

Решение

Данные, за которые будем цепляться
У нас имеется поле Created, которое отображает дату и время создания задачи.

Как и по примеру прошлой задачи - мы будем перебирать массив задач, а затем сравнивать фактическое время создания задачи с условиями поиска.
All_SIL/JQL/JQL_search_issue_in_time_interval.sil
/*
для начала строка фильтра выбирает все задачи в указанном интервале дат, где начало времени первой задачи будет больше или равно первому аргументу
а второй аргумент будет меньше или равен второму аргументу
*/
string jql = "project = \"" + argv[0] + "\" AND created >= \"" + argv[1] + "\" AND created <= \"" + argv[2] + "\""//все параметры в навигаторе должны быть в  кавычках!
 
string[] selIssues = selectIssues(jql); //складываем в массив все задачи по указанному фильтру.
string[] needIssues; //массив задач, которые будет необходимо вывести
 
//парсим даты аргументов для приведения их в понятный для кода вид и дальнейшего разбора по часам и минутам. таким образом не надо время указывать отдельными аргументами
date dateStartJql = parseDate("yyyy-MM-dd HH:mm", argv[1]);
date dateEndJql = parseDate("yyyy-MM-dd HH:mm", argv[2]);
 
//цикл, который перебирает полученные на старте первого фильтра задачи и складывает их в нужный массив задач, для вывода
for(string isc in selIssues)
    {
        //объявляем числовые переменные часов и минут фактического и требуемого времени
        number needStartHour = hour(dateStartJql);
        number needEndHour = hour(dateEndJql);
        number needStartMin = minute(dateStartJql);
        number needEndMin = minute(dateEndJql);
        number createdHourIssue = hour(%isc%.created);
        number createdMinIssue = minute(%isc%.created);
         
        if(createdHourIssue > needStartHour)
            {
                if(createdHourIssue < needEndHour)
                    {
                        needIssues+=isc; //таким образом добавляем подходящую задачу в нужный массив для дальнейшего вывода
                    }
                else if(createdHourIssue == needEndHour)
                    {
                        if(createdMinIssue <= needEndMin)
                            {
                                needIssues+=isc;
                            }
                    }
            }
        if(createdHourIssue == needStartHour)
            {
                if(createdMinIssue >= needStartMin)
                    {
                        if(createdHourIssue < needEndHour)
                            {
                                needIssues+=isc;
                            }
                        else if(createdHourIssue == needEndHour)
                            {
                                if(createdMinIssue <= needEndMin)
                                    {
                                        needIssues+=isc;
                                    }
                            }
                    }
            }
    }
     
return needIssues; //возвращаем массив необходимых задач в навигатор

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

Найти задачи, созданные в проекте TRA. В период с 1 июня 2018 по 30 июня 2018, которые были созданы в интервале времени с 11:00 до 16:31
Как должен выглядеть запрос: 
Запрос в issue navigator
key in silJQLList("All_SIL/JQL/JQL_search_issue_in_time_interval.sil""TRA","2018-06-01 11:00","2018-06-30 16:31")
Где
  • TRA - имя проекта
  • 2018-06-01 11:00 - начальная дата и тут же начальное время требуемого интервала
  • 2018-06-30 16:31 - конечная дата и тут же финальное время требуемого интервала