在Azure Boards中返回工作流类别状态的用户

Return user for workflow category states in Azure Boards

提问人: 提问时间:12/15/2022 更新时间:12/16/2022 访问量:63

问:

我有一个python项目,我正在尝试获取用户详细信息,这些详细信息在Azure Board中设置工作流类别状态。

为此,我通过 REST API 请求加载工作项历史记录并返回一个 json 文件。json 文件如下所示 (->请参阅“示例响应”https://learn.microsoft.com/en-us/rest/api/azure/devops/wit/updates/get?view=azure-devops-rest-6.0&tabs=HTTP)

我想返回用户的详细信息,该用户将 System.State 设置为值“New”、“Approved”、“Committed”或“Resolved”。如果System.Tags的值为“MYVALUE”,我想返回将System.State设置为“New”的用户。

为此,我尝试了:

def find_user(updates):
  for update in updates:
    uniqueName = ''
    displayName = ''
    if 'fields'       in update and \
       'System.State' in update['fields']:
            if update['fields']['System.Tags']['newValue'] == 'MYVALUE' and \
               update['fields']['System.State']['newValue'] == 'New':
                  continue
            elif update['fields']['System.State']['newValue'] == 'New' or \
                 update['fields']['System.State']['newValue'] == 'Approved' or \
                 update['fields']['System.State']['newValue'] == 'Committed' or \
                 update['fields']['System.State']['newValue'] == 'Resolved':
                  return update['revisedBy']['uniqueName'], update['revisedBy']['displayName']
  return uniqueName, displayName

如果我的工作项具有 System.Tags 'MYVALUE' 和 System.State 'New',我将获取将 System.Tags 设置为“Approved”、“Committed”或“Resolved”的人员的用户详细信息。 问题是,如果我没有System.Tags'MYVALUE',我的程序不会返回任何内容,尽管四个System.State中的一个可用。

有谁知道我该如何解决这个问题?

提前致谢!

python json azure-devops tfs-workitem

评论


答:

0赞 Ceeno Qi-MSFT 12/16/2022 #1

在我的测试中,我发现我们可以用你的脚本正确地得到回报,下面是我们稍微编辑的内容。我们还建议您可以设置断点,以逐行检查响应,以便进一步进行故障排除。

import os
import json
import requests

def get_jsons(org,proj,workitem_id,pat):

    url = "https://dev.azure.com/"+org+"/"+proj+"/_apis/wit/workItems/"+workitem_id+"/updates?api-version=6.0"

    payload={}
    headers = {
    'Authorization': 'Basic '+pat,
    }

    response = requests.request("GET", url, headers=headers, data=payload)
    json_response = json.loads(response.text)
    return json_response['value']

def find_user(updates):
  for update in updates:
    uniqueName = ''
    displayName = ''
    if 'fields'       in update and \
       'System.State' in update['fields']:
            if update['fields']['System.Tags']['newValue'] == 'MYVALUE' and \
               update['fields']['System.State']['newValue'] == 'New':
                  continue
            elif update['fields']['System.State']['newValue'] == 'New' or \
                 update['fields']['System.State']['newValue'] == 'Approved' or \
                 update['fields']['System.State']['newValue'] == 'Committed' or \
                 update['fields']['System.State']['newValue'] == 'Resolved':
                  return update['revisedBy']['uniqueName'], update['revisedBy']['displayName']
  return uniqueName, displayName
org = '{org}'
proj = '{proj}'
workitem_id = '{id}'
base64encoded_pat = '{pat}'
updates = get_jsons(org,proj,workitem_id,base64encoded_pat)

print(find_user(updates))


``

评论

0赞 12/20/2022
我不知道为什么,但你是对的,我的代码正在工作。我还有一个问题。例如,当我的 elif-part 中只有一个语句时,当我只想返回名称(如果 System.State 为“New”)时,我会得到一个异常“System.Tags”。你可能知道为什么会这样吗?