如何通过PowerShell调用API将CSV导入Azure Boards以恢复工作项
如何通过API从CSV恢复Azure Boards工作项
要从CSV备份恢复Azure Boards工作项,核心是利用你提供的Work Item Create API(JSON Patch格式),按以下步骤实现:
核心步骤
解析CSV字段映射
先梳理CSV中每一列对应的Azure Boards字段路径:- 系统字段示例:标题对应
/fields/System.Title,描述对应/fields/System.Description,指派给对应/fields/System.AssignedTo - 自定义字段:路径格式为
/fields/Custom.字段引用名称(可在Azure Boards工作项设置中查看字段的引用名称)
- 系统字段示例:标题对应
构造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"} // 按需添加其他字段(优先级、状态、自定义字段等) ]发送认证请求
- 替换API URL中的
{project}为你的项目名,${type}为CSV中对应的工作项类型(如Task、Bug) - 必须携带认证头:用个人访问令牌(PAT)生成
Authorization头,格式为Basic base64编码的:PAT字符串 - 请求头需设置
Content-Type: application/json-patch+json
- 替换API URL中的
代码实现示例(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
相关产品推荐
相关产品推荐

