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

如何通过PowerShell调用API将CSV导入Azure Boards以恢复工作项

如何通过API从CSV恢复Azure Boards工作项

要从CSV备份恢复Azure Boards工作项,核心是利用你提供的Work Item Create API(JSON Patch格式),按以下步骤实现:

核心步骤

  1. 解析CSV字段映射
    先梳理CSV中每一列对应的Azure Boards字段路径:

    • 系统字段示例:标题对应/fields/System.Title,描述对应/fields/System.Description,指派给对应/fields/System.AssignedTo
    • 自定义字段:路径格式为/fields/Custom.字段引用名称(可在Azure Boards工作项设置中查看字段的引用名称)
  2. 构造JSON Patch请求体
    每个工作项的创建请求需要一个JSON数组,数组中每个对象对应一个字段的添加操作(op: "add")。示例如下:

    [
      {"op": "add", "path": "/fields/System.Title", "value": "从CSV读取的标题"},
      {"op": "add", "path": "/fields/System.Description", "value": "从CSV读取的描述"},
      {"op": "add", "path": "/fields/System.AssignedTo", "value": "user@example.com"}
      // 按需添加其他字段(优先级、状态、自定义字段等)
    ]
    
  3. 发送认证请求

    • 替换API URL中的{project}为你的项目名,${type}为CSV中对应的工作项类型(如Task、Bug)
    • 必须携带认证头:用个人访问令牌(PAT)生成Authorization头,格式为Basic base64编码的:PAT字符串
    • 请求头需设置Content-Type: application/json-patch+json

代码实现示例(Python)

import csv
import requests
import base64

# 配置参数
ORG_URL = "https://dev.azure.com/fabrikam"
PROJECT_NAME = "你的项目名称"
PAT = "你的PAT令牌(需包含Work Items读写权限)"
CSV_PATH = "工作项备份.csv"

# 构建请求头
headers = {
    "Content-Type": "application/json-patch+json",
    "Authorization": f"Basic {base64.b64encode(f':{PAT}'.encode()).decode()}"
}

# 遍历CSV创建工作项
with open(CSV_PATH, mode='r', encoding='utf-8') as csv_file:
    reader = csv.DictReader(csv_file)
    for row in reader:
        # 从CSV提取关键数据
        wi_type = row["Type"]
        title = row["Title"]
        desc = row["Description"]
        assigned_to = row["AssignedTo"]

        # 构造Patch请求体
        patch_body = [
            {"op": "add", "path": "/fields/System.Title", "value": title},
            {"op": "add", "path": "/fields/System.Description", "value": desc},
            {"op": "add", "path": "/fields/System.AssignedTo", "value": assigned_to}
            # 补充其他需要恢复的字段
        ]

        # 发送创建请求
        api_endpoint = f"{ORG_URL}/{PROJECT_NAME}/_apis/wit/workitems/${wi_type}?api-version=7.1-preview.3"
        response = requests.post(api_endpoint, json=patch_body, headers=headers)

        # 处理响应
        if response.status_code == 200:
            wi_id = response.json()["id"]
            print(f"成功恢复工作项: {title} (ID: {wi_id})")
        else:
            print(f"恢复失败: {title} - 错误: {response.text}")

关键注意事项

  • 字段合法性校验:确保CSV中的字段值符合Azure Boards规则(如AssignedTo必须是项目中的有效用户,状态必须匹配工作项类型的流程)
  • 关联关系恢复:如果CSV包含父工作项、链接等关联,需先创建所有基础工作项并记录ID,再通过Update API发送add操作添加关联,示例:
    {"op": "add", "path": "/relations/-", "value": {
        "rel": "System.LinkTypes.Hierarchy-Reverse",
        "url": "https://dev.azure.com/fabrikam/_apis/wit/workitems/1234",
        "attributes": {"comment": "恢复父链接"}
    }}
    
  • 批量处理优化:若工作项数量大,可添加请求间隔避免触发限流,或捕获错误后记录失败项以便重试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:30:36