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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:41:08