Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
接收';操作中止错误';通过vba使用jira api向现有问题添加标签时,即使标签已成功添加_Vba_Excel_Jira_Jira Rest Api - Fatal编程技术网

接收';操作中止错误';通过vba使用jira api向现有问题添加标签时,即使标签已成功添加

接收';操作中止错误';通过vba使用jira api向现有问题添加标签时,即使标签已成功添加,vba,excel,jira,jira-rest-api,Vba,Excel,Jira,Jira Rest Api,我试图通过VBA使用JIRARESTAPI向JIRA中的现有问题添加标签。我可以成功登录、获取会话id/cookie、查找问题并向问题添加注释,但当我尝试添加标签时,在Excel中收到以下错误消息 然而,有趣的是,这个标签实际上是加上去的 宏之前: 宏之后: 我就是无法解释或弄清楚到底发生了什么。我已经浏览了互联网(特别是Atlassian论坛),发现了一些页面上的例子,这些例子表明我正确地发送了这个请求,但我仍然收到这个运行时错误。在这里的许多事情中,有一些事情是我读过/做过的,试图弄明

我试图通过VBA使用JIRARESTAPI向JIRA中的现有问题添加标签。我可以成功登录、获取会话id/cookie、查找问题并向问题添加注释,但当我尝试添加标签时,在Excel中收到以下错误消息

然而,有趣的是,这个标签实际上是加上去的

宏之前:

宏之后:

我就是无法解释或弄清楚到底发生了什么。我已经浏览了互联网(特别是Atlassian论坛),发现了一些页面上的例子,这些例子表明我正确地发送了这个请求,但我仍然收到这个运行时错误。在这里的许多事情中,有一些事情是我读过/做过的,试图弄明白这一点

  • 我在本期的
    /editmeta
    上做了一个
    GET
    ,以获取
    labels
    字段的详细信息,该字段产生了这个

    labels":{  
       "required":false,
       "schema":{  
          "type":"array",
          "items":"string",
          "system":"labels"
       },
       "name":"Labels",
       "autoCompleteUrl":"http://jira.company.local:8080/rest/api/1.0/labels/suggest?query=",
       "operations":[  
          "add",
          "set",
          "remove"
       ]
    }
    
因此,根据这一点,我应该能够使用“add”动词来添加标签

  • 我使用的方法(在这个问题的底部)是根据用户Patrick Patrick的评论改编的

  • 我已经阅读了有关编辑数据的文档

  • 我知道我应该使用PUT而不是POST
  • 具体阅读如何更新标签,并遵循中的语法,然后尝试响应中描述的新方法

  • 最后,我在Atlassian社区发现了一堆与这类问题有关的bug。从

所以,这就是我的目的。我的问题很简单:

如何添加标签而不每次都收到运行时错误?如果我的宏在每次为一个问题添加一个标签时都停止,这似乎有点毫无意义

下面是我正在使用的相应代码

JIRA模块:

选项显式
次吉拉()
Dim ASNumber作为字符串,供应商作为字符串,IssueLink作为字符串
Dim myJIRA作为新的CLSjirrest
和myJIRA
.UserName=“*******”
.Password=“*******”
.URL=”http://jira.company.local:8080"
如果.Login=False,则退出Sub
.GetLastSummary

IssueLink=.GetIssueLink'看起来他们给了你一个特定的错误代码。这很好,因为您可以忽略该错误,但仍可以处理其他可能的错误-如果该错误号不是“PostExportComment”操作的特定错误,则将自己设置为局部变量以跟踪错误发生的位置:

    On Error GoTo ErrHandler

    '...

        currentStep = "PostExportComment"
        .PostExportComment '<-Throws run-time error 'Operation aborted'
        currentStep = "Logout"
        .Logout
    End With

CleanExit:
    'clean up here
    Exit Sub
ErrHandler:
    '"Operation aborted" error is a false positive, see https://jira.atlassian.com/browse/JRA-27929
    If currentStep = "PostExportComment" And Err.Number = -2147467260 Then
        Resume Next 
    Else
        'handle other possible runtime errors here
        Resume CleanExit
    End If

如果错误在API端,并且毫无意义,…为什么不直接接受它呢?(在出错时用
将失败的行换行,然后在出错时继续下一步
{code}
转到0
)我想我可以,只是那样对我来说有点脏,你知道吗?难道不应该有一种更干净的方法吗?我不知道Jira的API,但是你能用最少的代码来重新编程错误吗?也就是说,试着将行为与周围的一切隔离开来。如果它能工作,但仍然抛出那个错误,我想这个错误是在Jira一边的,而不是你的。这正是我所做的。我浏览并注释掉了周围的代码,它只是添加标签的
.send
调用中的错误。我的意思是,根据我发布的链接中的bug问题,这似乎是Jira意识到的一个问题。真糟糕,他们什么都没做。啊,真聪明!再说一次,当它来自您时总是这样:)只有一个问题,您将API包装在类模块中并以这种方式处理错误是什么意思?我之所以这么问,是因为现在我已经在一个类模块中拥有了所有API功能(请参阅我的clsJIRARest类模块)。这就是你的意思吗?我刚刚意识到我忘了将它清楚地标记为类模块,我将立即修复它。不管怎样,你建议我如何做更好/更干净的选择?@CaffeinatedCoder我添加了一个包装示例谢谢您的示例!
Public Function Login() As Boolean

    Login = False

    With JiraAuth
        .Open "POST", sURL & "/rest/auth/1/session", False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Accept", "application/json"

        .send " {""username"" : """ & sJIRAUserID & """, ""password"" : """ & sJIRAPass & """}"" '*** HTTP-Request senden"

        sErg = .responseText

        If .Status = "200" Then
            sCookie = "JSESSIONID=" & Mid(sErg, 42, 32) & "; Path=/" & sPfad
            Login = True
        End If

    End With

End Function

Public Function GetLastSummary()

    Dim myRegEx As Object: Set myRegEx = CreateObject("vbscript.regexp")
    myRegEx.Global = True
    myRegEx.Pattern = "as\/([0-9]{4,5}).+?(?=\-)" '<-Working
    With JiraService
        .Open "GET", sURL & "/rest/api/2/search?jql=assignee=mhill+order+by+lastViewed&now&maxResults=5", False
       .setRequestHeader "Content-Type", "application/json"
       .setRequestHeader "Accept", "application/json"
       .setRequestHeader "Set-Cookie", sCookie '*** see Create a "Cookie"

        .send
        Set sRestAntwort = myRegEx.Execute(.responseText)
        Sup = sRestAntwort(0)
        ANum = sRestAntwort(0).Submatches(0)

        myRegEx.Pattern = "self"":""(.+?(?=""))"
        myRegEx.Global = False
        Set sRestAntwort = myRegEx.Execute(.responseText)
        sIssueLink = sRestAntwort(0).Submatches(0)
    End With

End Function

'The comment posts fine below, but the label is what causes the error
Public Function PostExportComment() As Boolean
    With JiraService
        .Open "POST", sIssueLink & "/comment", False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Accept", "application/json"
        .setRequestHeader "Set-Cookie", sCookie '*** see Create a "Cookie"
        Dim sExportComment As String: sExportComment = "Full Export Requested - Awaiting Download Email"
        .send " {""body"" : """ & sExportComment & """}"" '*** HTTP-Request senden"
'
'        PostExportComment = IIf(.Status = "201", True, False)

        .Open "PUT", sIssueLink, False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Accept", "application/json"
        .setRequestHeader "Set-Cookie", sCookie '*** see Create a "Cookie"
        Dim sExportingLabel As String: sExportingLabel = "Exporting"
        '===============Errors on next line==================
        .send " { ""update"": { ""labels"": [{""add"": """ & sExportingLabel & """}] } }"" '*** HTTP-Request senden" '(See below photo for error message)
        Debug.Print .Status & "|" & .statusText
    End With
End Function
    On Error GoTo ErrHandler

    '...

        currentStep = "PostExportComment"
        .PostExportComment '<-Throws run-time error 'Operation aborted'
        currentStep = "Logout"
        .Logout
    End With

CleanExit:
    'clean up here
    Exit Sub
ErrHandler:
    '"Operation aborted" error is a false positive, see https://jira.atlassian.com/browse/JRA-27929
    If currentStep = "PostExportComment" And Err.Number = -2147467260 Then
        Resume Next 
    Else
        'handle other possible runtime errors here
        Resume CleanExit
    End If
Private wrapped As My3rdPartyThing

Public Enum MeaningfulError
    ERR_FoobarNotInitialized = vbObjectError + 42
    ERR_WrongCredentials
    ERR_Whatever
End Enum

Private Sub Class_Initialize()
    Set wrapped = New My3rdPartyThing
End Sub

Private Sub Class_Terminate()
    Set wrapped = Nothing
End Sub

'wraps the "GetFoo" API method
Public Function GetFoo(ByVal bar As Long) As Something
    On Error GoTo ErrHandler

    Set GetFoo = wrapped.GetFoo(bar)

    Exit Function
ErrHandler:
    If Err.Number = 12345 Then 
        Err.Raise ERR_FoobarNotInitialized
    Else
        Err.Raise ERR_Whatever
    End If
End Sub