Блог
Главная     Блог    IT     Как сделать быструю интеграцию Excell с Jira API через VBA

Как сделать быструю интеграцию Excell с Jira API через VBA

На одном проекте понадобилось получить данные с тасков из Jira в Excell, статус приоритет и тд. Немножко магии и VBA — нашел простой способ, решил им поделиться. Может кому-нибудь пригодится, ничего внятного в интернете не нашел. Оформил на Github.

У Jira есть rest API, и прекрасная документация на английском. API дает вытащить Get -запросами все что угодно. На каждый запрос возвращается Json который можно спарсить и получить значение конкретного атрибута, например статус таска. Для тестирования любого апи я использую Postman, очень удобно, выглядит вот так:

Интерфейс Postman

Ответ на запрос выглядит примерно так, в зависимости от настроек атрибутов вашей Jira структура Json может отличаться. Название атрибутов и их значение в двойных кавычках и разделены двоеточием, например, «id» : «11104»

Чтобы записать ответ апи в ячейку экселя придется проделать следующие действия:

  1. Авторизоваться в Jira по логину и паролю
  2. Отправить гет запрос функцией эксель
  3. Из полученного Json ответа выбрать нужный нам атрибут

Я хотел функции, которые по идентификатору таска в джире возвращали бы несколько атрибутов: статус, приоритет, название и дату создания. Таких функций нет в Excell но на VBA можно написать свою функцию и использовать на листах. Сделал такую таблицу:

Excell таблица под нужные атрибуты

Покажу функцию для получения статуса, нет смысла показывать их все, все равно вам придется переписать пару строк для своей Jira — структура тасков у всех своя. В конце статьи приложу готовый лист с настройками и модулями, скачал настроил и готово.

' Функция для получения статуса задачи
Function getTaskStatus(ByVal taskURL As String) As String

    ' Базовая авторизация
    Dim jiraRequest As Object
    Set jiraRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
    jiraRequest.Open "POST", "https://domain-jira.ru/login.jsp?os_username=jiralogin&os_password=jirapass"
    jiraRequest.Send
    
    ' GET запрос в Rest API Jira
    jiraRequest.Open "GET", taskURL
    jiraRequest.Send
    
    ' Парсим Json ответ
    Dim Json As Object
    Set Json = JsonConverter.ParseJson(jiraRequest.ResponseText)
    getTaskStatus = Json("fields")("status")("name")
End Function

Чтобы все работало:

  1. Скачиваем архив в конце статьи.
  2. Открываем «Jira-excel-example.xlsm»
  3. Жмем «alt+f11»
  4. Правим модуль «funcJira» под свой домен Jira логин и пароль
  5. Не забываем через postman глянуть структуру ответа в своей Jira и правим последнюю строку функции
  6. Вызываем функцию в ячейке через знак «=»

Такую эксельку можно использовать для интеграции с любым API, просто меняешь параметры функции и готово. Скачать готовый эксель файл.

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

Sub getJSON()
    Dim taskId As String
    Dim jiraRequest As Object
    Dim Json As Object
    Set jiraRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
    jiraRequest.Open "POST", "https://domain-jira.ru/login.jsp?os_username=yourlogin&os_password=yourpass"
    jiraRequest.Send
    

    Dim i As Long
    For i = 3 To Application.WorksheetFunction.CountA(Range("A3:A300")) + 2
    Cells(i, 3) = i
        taskId = Range("A" & i)
        jiraRequest.Open "GET", "https://domain-jira.ru/rest/api/2/issue/" & taskId
        jiraRequest.Send
        
        Set Json = JsonConverter.ParseJson(jiraRequest.ResponseText)
        Range("B" & i) = Json("fields")("status")("name")
        Range("C" & i) = Json("fields")("priority")("name")
        Range("D" & i) = Json("fields")("created")
        Range("E" & i) = Json("fields")("summary")
    Next
    MsgBox "Готово!"
End Sub

Ваш комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Отправляя сообщение, Вы разрешаете сбор и обработку персональных данных. Политика конфиденциальности.