使用 VBA 使用带有可变 URI 的 REST API 更新/编辑 Jira 问题

问题描述

修改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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...