问题描述
我修改了 this 以在 Excel/VBA 中为电子表格中选择的行创建 Jira 问题,结果很好。现在我希望能够在 Excel 中修改问题。
所以我尝试了以下操作,但似乎它甚至没有访问 URI。
Sub updateIssue()
Dim id As String
Dim rng As Range
Dim rs As Long
Dim JiraService As New MSXML2.XMLHTTP60
Dim ResponseTxt As Variant
Dim Summary As Variant
Dim Description As Variant
Dim Project As Variant
Dim IssueType As Variant
Dim IssueData As Variant
Dim Path As Variant
Dim UN As Variant
Dim PW As Variant
Dim Assignee As Variant
Dim sEncbase64Auth As Variant
Dim IssueKey As Variant
Dim IssueAddress As Variant
Dim IssueURL As Variant
UN = Sheet2.Range("A4").Value
Pw = Sheet2.Range("A5").Value
For Each rng In Selection.Rows
rs = rng.Row
Summary = ActiveSheet.Cells(rs,4).Value 'summary
Description = ActiveSheet.Cells(rs,5).Value 'Description
IssueType = ActiveSheet.Cells(rs,9).Value 'IssueType
Assignee = ActiveSheet.Cells(rs,8).Value 'assignee
IssueKey = ActiveSheet.Cells(rs,14).Value 'issue key# in the format of TEST-111
IssueAddress = """ + "https://your-domain.atlassian.net/jira/rest/api/latest/issue/" + IssueKey + """
IssueData = " { ""update"": {},""fields"" : { ""parent"" : { ""key"" : ""TEST"" },""summary"" : """ & _
Summary & """,""description"" : """ & Description & """,""assignee"" : { ""name"" : """ & Assignee & """ }} } "
sEncbase64Auth = CommonFunction.EncodeBase64(UN & ":" & Pw)
ActiveSheet.Range("G6").Value = IssueData & " | Auth Basic: " & sEncbase64Auth
'Updating/editing issue
With JiraService
.Open "POST",IssueAddress,False
.SetRequestHeader "Content-Type","application/json"
.SetRequestHeader "Accept","application/json"
.SetRequestHeader "X-Atlassian-Token","nocheck"
.SetRequestHeader "Authorization","Basic " & sEncbase64Auth
.Send (IssueData)
ResponseTxt = .ResponseText
End With
ActiveSheet.Cells(rs,8).Value = ResponseTxt
Set JiraService = nothing
Next
End Sub
下面是 CommonFunciton 模块,仅供参考(你可以跳过这个,因为这部分工作正常)
' Module CommonFunction
Public Function EncodeBase64(text As String) As String
Dim arrData() As Byte
arrData = StrConv(text,vbFromUnicode)
Dim objXML As MSXML2.DOMDocument
Dim objNode As MSXML2.IXMLDOMElement
Set objXML = New MSXML2.DOMDocument
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
EncodeBase64 = objNode.text
Set objNode = nothing
Set objXML = nothing
End Function
我认为解析部分是导致错误的地方,因为我没有看到 ResponseTxt 返回任何内容。
解决方法
您应该能够使用返回当前登录用户的 myself
命令检查访问权限。
Sub TestConnect()
Const TEST_URL = "https://your-domain.atlassian.net/jira/rest/api/latest/myself"
Dim JiraService As New MSXML2.XMLHTTP60,ResponseTxt As String,sEncbase64Auth as string
' credentials
With Sheet2
sEncbase64Auth = CommonFunction.EncodeBase64(.Range("A4") & ":" & .Range("A5")) ' un & pw
End With
With JiraService
.Open "GET",TEST_URL,False
.SetRequestHeader "Content-Type","application/json"
.SetRequestHeader "Accept","application/json"
.SetRequestHeader "X-Atlassian-Token","nocheck"
.SetRequestHeader "Authorization","Basic " & sEncbase64Auth
.Send
Debug.Print .Status,.statusText,.ResponseText
End With
End Sub