Простой пример создания задачи
Итак, заходим в редактор vba в Excel, создаем новый модуль и вписываем в него следующее:
Const REDMINE_URL = "http://redmine_url"
Public issue_url, issue_id As String
Sub Redmine_Create_Issue()
Dim ReqStatus As Boolean
Dim PROJECT_ID, TRACKER_ID, ASSIGNED_TO_ID, CATEGORY_ID As Integer
Dim Subject, Body, DUE_DATE, REDMINE_API_KEY As String
PROJECT_ID = 32
TRACKER_ID = 1
ASSIGNED_TO_ID = 20
Subject = "Тема задачи"
Body = "Текст задачи"
DUE_DATE = Format(ActiveSheet.Cells(ActiveCell.Row, 12), "yyyy-mm-dd")
ReqStatus = PostIssue(PROJECT_ID, TRACKER_ID, ASSIGNED_TO_ID, Subject, Body, DUE_DATE, _
REDMINE_API_KEY, CATEGORY_ID)
If ReqStatus <> False Then
MsgBox "Redmine: Ok, задача отправлена"
ActiveSheet.Cells(ActiveCell.Row, 2) = issue_id
ActiveSheet.Hyperlinks.Add Range("B" & ActiveCell.Row), issue_url, "", _
"Открыть задачу" & issue_url
ActiveSheet.Cells(ActiveCell.Row, 11) = Date
Else
MsgBox "Redmine: Ошибка, обратитесь к администратору"
End If
End Sub
Function PostIssue(ByVal PROJECT_ID As Integer, ByVal TRACKER_ID As Integer, _
ByVal ASSIGNED_TO_ID As Integer, ByVal Subject As String, _
ByVal Body As String, ByVal DUE_DATE As String, _
ByVal REDMINE_API_KEY As String, ByVal CATEGORY_ID As String)
Dim xhr
Dim RequestURL As String
Dim RequestBody As String
RequestURL = REDMINE_URL & "/issues.xml?format=xml"
Set xhr = CreateObject("Microsoft.XMLHTTP")
xhr.Open "GET", RequestURL, False
xhr.SetRequestHeader "Content-Type", "text/xml"
RequestBody = "<?xml version=" & Chr(34) & "1.0" & Chr(34) & "?>"
RequestBody = RequestBody & "<issue>"
RequestBody = RequestBody & "<project_id>" & PROJECT_ID & "</project_id>"
RequestBody = RequestBody & "<tracker_id>" & TRACKER_ID & "</tracker_id>"
RequestBody = RequestBody & "<assigned_to_id>" & ASSIGNED_TO_ID & "</assigned_to_id>"
RequestBody = RequestBody & "<subject>" & Subject & "</subject>"
RequestBody = RequestBody & "<description>" & Body & "</description>"
RequestBody = RequestBody & "<due_date>" & DUE_DATE & "</due_date>"
RequestBody = RequestBody & "</issue>"
xhr.Send (RequestBody)
If xhr.Status = 201 Then
PostIssue = True
Else
PostIssue = False
End If
issue_url = xhr.getResponseHeader("location")
issue_id = Right(issue_url, Len(issue_url) - InStrRev(issue_url, "/"))
End Function
Примечание: для авторизации в Redmine можно использовать логин и пароль, или ключ API, который можно посмотреть в профиле. В примере выше используется логин-пароль, строки с ключом закомментированы.Всё хорошо, но как быть с параметрами, которые мы можем узнать только из базы данных Redmine? Я имею в виду ID для проекта, трекера, и на кого назначена задача.В моем случае все эти параметры связаны с данными из таблицы (проект, его статус, ответственный отдел), поэтому я поступил просто, хоть и неправильно с точки зрения универсальности. Я подсмотрел ID в базе Redmine через phpMyAdmin и создал на отдельном листе табличку настроек, где прописал эти ID для нужных мне параметров из основной таблицы. Как результат, пользователю нужно только выбрать нужную строку в таблице и нажать кнопку отправки задачи, никаких дополнительных диалоговых окон.
Источник: https://habr.com/ru/post/318198/
Комментариев нет:
Отправить комментарий