You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过Azure DevOps REST API为系统内置工作项类型新增状态

解决Azure DevOps系统工作项类型新增状态的RefName问题

问题根源

系统默认工作项类型(如Bug、UserStory)的引用名称(witRefName)并非通用的Microsoft.VSTS.WorkItemTypes.xxx,而是与项目绑定的具体流程模板(如自定义Kanban、Scrum、Agile)关联,格式为[流程名称].[工作项类型](例如Processo-Kanban.Bug)。直接使用全局默认RefName会触发VS402805错误,因为该名称在当前流程的工作项类型列表中不存在。

解决方案步骤

1. 获取目标流程下工作项类型的正确RefName

通过Azure DevOps Processes API查询当前项目绑定流程的所有工作项类型,提取对应的引用名称:

import requests
from requests.auth import HTTPBasicAuth

# 替换为你的组织、流程ID和个人访问令牌(PAT)
ORG_URL = "https://dev.azure.com/你的组织名"
PROCESS_ID = "你的流程ID"
PAT = "你的PAT令牌"

# 调用API获取流程下所有工作项类型
url = f"{ORG_URL}/_apis/work/processes/{PROCESS_ID}/workitemtypes?api-version=7.1-preview.2"
response = requests.get(url, auth=HTTPBasicAuth('', PAT))
wit_list = response.json()["value"]

# 遍历输出工作项类型名称与对应RefName
for wit in wit_list:
    print(f"工作项类型: {wit['name']} | 引用名称: {wit['referenceName']}")

如何获取流程ID?

先调用流程列表API获取所有流程,找到目标项目使用的流程ID:

url = f"{ORG_URL}/_apis/work/processes?api-version=7.1-preview.2"
response = requests.get(url, auth=HTTPBasicAuth('', PAT))
process_list = response.json()["value"]
for process in process_list:
    print(f"流程名称: {process['name']} | 流程ID: {process['id']}")

2. 使用正确的RefName调用添加状态API

将脚本中原来的Microsoft.VSTS.WorkItemTypes.xxx替换为上述步骤获取的流程绑定RefName,再调用状态添加API:

# 替换为实际的工作项类型RefName和新状态信息
WIT_REF_NAME = "Processo-Kanban.Bug"
NEW_STATE_NAME = "待评审"
NEW_STATE_COLOR = "ffa500"
STATE_CATEGORY = "InProgress"  # 可选值:Proposed, InProgress, Resolved, Completed, Removed

# 添加状态的API请求
add_state_url = f"{ORG_URL}/_apis/work/processes/{PROCESS_ID}/workitemtypes/{WIT_REF_NAME}/states?api-version=7.1-preview.3"
payload = {
    "name": NEW_STATE_NAME,
    "color": NEW_STATE_COLOR,
    "stateCategory": STATE_CATEGORY
}

response = requests.post(add_state_url, json=payload, auth=HTTPBasicAuth('', PAT))
# 检查响应结果
if response.status_code == 201:
    print("状态添加成功:", response.json())
else:
    print("错误信息:", response.json())

3. 关键注意事项

  • 确保你的PAT拥有**Processes (Read & Write)**权限,否则会触发权限错误。
  • 不同流程模板下的同一工作项类型RefName不同,比如Scrum流程下的Bug可能是Scrum.Bug,自定义Kanban流程下是Processo-Kanban.Bug。
  • Web UI操作后能看到正确RefName的原因是,UI会自动使用当前流程绑定的实例化RefName进行操作。

内容的提问来源于stack exchange,提问作者fcoalcantarajr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:03:24