React.js开发Azure DevOps扩展:WIQL查询PBI及API接入疑问
问题解答
1. 能否用Azure DevOps Extension SDK实现需求?
完全可以,不需要额外引入第三方库。Azure DevOps Extension SDK(原VSS Web Extension SDK,仅命名更新)本身就封装了对Azure DevOps REST API的调用能力,包括工作项的查询、创建和更新操作,足够覆盖你的需求。
2. API认证与对接实现
SDK会自动处理Azure DevOps的认证逻辑,不需要手动管理token或认证头——扩展运行在Azure DevOps环境中时,SDK会从上下文自动获取有效的认证凭证。以下是具体的实现步骤和代码示例:
初始化SDK
在React应用的入口处先完成SDK初始化:
import * as VSS from "@azure/devops-extension-sdk"; VSS.init({ explicitNotifyLoaded: true, usePlatformStyles: true }); VSS.ready().then(() => { // 在此执行后续业务逻辑 });
查询匹配标题的PBI
通过WorkItemTrackingHttpClient执行WIQL查询,获取目标PBI的ID:
import { WorkItemTrackingHttpClient } from "azure-devops-extension-api/WorkItemTracking"; async function findPbiByTitle(titleKeyword: string): Promise<number | undefined> { // 获取工作项跟踪客户端实例 const witClient = await VSS.getService<WorkItemTrackingHttpClient>(VSS.ServiceIds.WorkItemTracking); // 获取当前上下文的项目ID const projectId = VSS.getWebContext().project.id; // 构造WIQL查询语句,匹配标题包含指定关键词的Product Backlog Item const wiqlQuery = ` SELECT [System.Id] FROM WorkItems WHERE [System.WorkItemType] = 'Product Backlog Item' AND [System.Title] CONTAINS '${titleKeyword}' AND [System.TeamProject] = '${projectId}' `; // 执行查询并返回结果 const queryResult = await witClient.queryByWiql({ query: wiqlQuery }, projectId); // 返回第一个匹配的PBI ID(存在匹配项时) return queryResult.workItems?.[0]?.id; }
创建新任务并更新PBI描述
先创建任务工作项,再更新目标PBI的描述字段:
async function createTaskAndUpdatePbi(pbiId: number, taskTitle: string, newPbiDescription: string) { const witClient = await VSS.getService<WorkItemTrackingHttpClient>(VSS.ServiceIds.WorkItemTracking); const projectId = VSS.getWebContext().project.id; // 1. 创建新任务工作项 const taskFields = [ { op: "add", path: "/fields/System.Title", value: taskTitle }, { op: "add", path: "/fields/System.WorkItemType", value: "Task" }, { op: "add", path: "/fields/System.AssignedTo", value: VSS.getWebContext().user.name } ]; await witClient.createWorkItem(null, taskFields, projectId, "Task"); // 2. 更新目标PBI的描述字段 const pbiUpdateFields = [ { op: "replace", path: "/fields/System.Description", value: newPbiDescription } ]; await witClient.updateWorkItem(pbiUpdateFields, pbiId); }
关于文档的说明
你提到的VSS Web Extension SDK就是现在的Azure DevOps Extension SDK,仅名称更新,文档里的VSS相关API完全适用。对于TypeScript/React开发,直接参考SDK的类型定义(安装@azure/devops-extension-sdk和azure-devops-extension-api包后,编辑器会自动提供代码提示)即可,无需关注C#示例。
内容的提问来源于stack exchange,提问作者ph0t0nic
相关产品推荐
相关产品推荐

