2017-07-25 34 views
1

我有一個門戶用戶可以訪問構建在cherrypy上,它具有一些可以提交的格式,可以通過REST api發送給JIRA進行跟蹤。一旦提交,我就會從用戶提供的信息中獲取有關表單和JIRA問題ID的信息,並將它們發送到oracle數據庫。通過REST API查詢JIRA以及查詢中可能的錯誤值

然後,我擴展了門戶的功能,以便能夠通過列表頁面查看用戶提交的內容,然後選擇一條記錄查看數據庫中提交的內容。我有想法然後使用JIRA的REST API來獲取JIRA中的問題的狀態和受讓人。將我的代碼轉換爲提交給API以使用必要的JQL語句來查詢它非常簡單,可以在下面看到。

def jira_status_check(jira_id): 
if jira_id != "No JIRA Issue": 
    try: 
     search_url = "https://myjirainstance.atlassian.net/rest/api/2/search/?jql=issue=" + jira_id + "&fields=status,assignee,resolution" 
     print search_url 
     username = 'some_user' 
     password = 'some_password' 
     request = urllib2.Request(search_url) 
     base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '') 
     request.add_header("Authorization", "Basic %s" % base64string) 
     request.add_header("Content-Type", "application/json") 
     result = urllib2.urlopen(request).read() 
     json_results = json.loads(result) 
     print json_results 
     jira_status = json_results["issues"][0]["fields"]["status"]["name"] 
     if json_results["issues"][0]["fields"]["resolution"] is None: 
      tmp = "tmp" 
     if json_results["issues"][0]["fields"]["resolution"] is not None: 
      jira_status = jira_status + " - " + json_results["issues"][0]["fields"]["resolution"]["name"] 
     # assignee_name = "TEST" 
     # assignee_NT = "TEST" 
     if json_results["issues"][0]["fields"]["assignee"] is None: 
      assignee_name = "Unassigned" 
      assignee_NT = "Unassigned" 
     if json_results["issues"][0]["fields"]["assignee"] is not None: 
      assignee_name = json_results["issues"][0]["fields"]["assignee"]["displayName"] 
      assignee_NT = json_results["issues"][0]["fields"]["assignee"]["name"] 
     # if json_results["issues"][0]["fields"]["assignee"]["displayName"] is not None: 
     #  assignee_name = json_results["issues"][0]["fields"]["assignee"]["displayName"] 
     # if json_results["issues"][0]["fields"]["assignee"] is None: 
     #  assignee_NT = "Unassigned" 
     # if json_results["issues"][0]["fields"]["assignee"]["name"] is not None: 
     #  assignee_NT = json_results["issues"][0]["fields"]["assignee"]["name"] 
     print jira_status 
     print assignee_name 
     print assignee_NT 
     output = [jira_status, assignee_name, assignee_NT] 
    except: 
     jira_status = "No JIRA Issue by that number or JIRA inaccessible" 
     assignee_name = "No JIRA Issue by that number or JIRA inaccessible" 
     assignee_NT = "No JIRA Issue by that number or JIRA inaccessible" 
     output = [jira_status, assignee_name, assignee_NT] 
else: 
    jira_status = "No JIRA Issue" 
    assignee_name = "No JIRA Issue" 
    assignee_NT = "No JIRA Issue" 
    output = [jira_status, assignee_name, assignee_NT] 
return output 

但它僅限於搜索,在一次一個記錄,當你只查看單個記錄其工作原理,但我希望有可能擴展,以我的列表頁面,並立即用一個搜索多api查詢而不是單一問題查詢。我有能力使用jql和其他API在這樣的鏈接上搜索多個問題編號https://myjirainstance.atlassian.net/rest/api/2/search/?jql=Issue%3DSPL-3284%20OR%20Issue%3DSPL-3285&fields=status,assignee,resolution

但是後來我在想如果以某種方式將不良問題ID保存並作爲大量查詢的一部分進行查詢。以前,它是在我的jira_status_check函數中使用except語句處理的,因爲它是單個記錄查詢。當我嘗試查詢與像共享的最後一個環節的REST API我反而得到

{"errorMessages":["An issue with key 'SPL-6666' does not exist for field 'Issue'."],"warningMessages":[]} 

我試圖從一個高級搜索的問題,建立一個查詢,但是當我這樣做Issue=SPL-3284 OR Issue=SPL-3285 OR Issue=SPL-6666我得到的迴應An issue with key 'SPL-6666' does not exist for field 'Issue'.

是否有正確的方式通過JQL搜索多個問題編號,併爲沒有匹配問題編號的字段返回沒有值?

還是我堅持做一噸單一問題查詢的API來覆蓋我的基地?這可能不太理想,並且可能會導致我僅限於查看單個記錄時的api查詢,而不是可用性列表頁面。

我會更好的移動我的函數來查詢JIRA的JavaScript/jQuery的可以填充頁面呈現後的提交列表?

回答

1

我結束了與我有關JQL問題的Atlassian,然後給了下面的其餘api文檔,並告訴了有關validateQuery參數添加到我的JQL以實現我的搜索。 https://docs.atlassian.com/jira/REST/6.1.7/

當我現在在我的REST API鏈接使用類似的查詢與我的附加參數

jql=Issue%3DSPL-3284 OR Issue%3DSPL-3285&fields=status,assignee,resolution&validateQuery=true

我得到一個JSON與它們是有效的問題,實際的內容,然後單獨warningMessages對象與任何不好的。一個例子是JSON以下,但很明顯,$內容是從查詢實際結果

{ 
    "expand": "schema,names", 
    "startAt": 0, 
    "maxResults": 50, 
    "total": 2, 
    "issues": [ 
    { 
     $CONTENT 
    }, 
    { 
     $CONTENT 
    } 
    ], 
    "warningMessages": [ 
    "An issue with key 'SPL-6666' does not exist for field 'Issue'." 
    ] 
} 

希望別人會有所幫助在未來