2017-07-25 154 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'." 
    ] 
} 

希望别人会有所帮助在未来