获取Azure DevOps扩展中项目根区域路径ID的问题
问题解析与解决方案
差异原因
Azure DevOps的区域路径存在两层根节点:
- 系统默认根节点:每个项目创建时自动生成的顶层区域节点,ID通常为2(迭代对应ID为3),这是工作项分配到"默认根区域"时实际使用的ID,也是查询列中显示的ID。
- 用户可见的区域树根节点:你通过
getClassificationNode获取到的\proj_name\Area属于这一层,是系统默认根节点下的第一个可编辑节点,ID由系统后续分配(示例中的4),属于用户可自定义的区域树入口节点。
两者并非同一节点,因此ID会存在固定差值(你观察到的减2)。
获取实际根区域路径ID的方法
方法1:追溯节点的父级ID
通过getClassificationNode返回的根节点(即你拿到的ID=4的节点),直接读取其parent.id属性,即可得到系统默认的根区域ID:
import { getClient } from "azure-devops-extension-api"; import { WorkItemTrackingRestClient, TreeStructureGroup } from "azure-devops-extension-api/WorkItemTracking"; const witClient = getClient(WorkItemTrackingRestClient); const areaRoot = await witClient.getClassificationNode(project!.name, TreeStructureGroup.Areas, '', 1); // 获取系统默认根区域ID const actualRootAreaId = areaRoot.parent.id;
方法2:直接获取系统顶层分类节点
调用getClassificationNode时,将第三个参数(起始路径)设为null,即可直接获取系统默认的根节点:
import { getClient } from "azure-devops-extension-api"; import { WorkItemTrackingRestClient, TreeStructureGroup } from "azure-devops-extension-api/WorkItemTracking"; const witClient = getClient(WorkItemTrackingRestClient); // 直接获取系统默认的根区域节点 const systemRootArea = await witClient.getClassificationNode(project!.name, TreeStructureGroup.Areas, null, 1); const actualRootAreaId = systemRootArea.id; // 此处ID即为工作项中使用的2
方法3:通过工作项字段直接获取(针对当前工作项)
如果是要获取当前工作项关联的区域ID,直接使用你已有的代码即可:
const areaPathID = await workItemFormService.getFieldValue("System.AreaID");
内容的提问来源于stack exchange,提问作者ccclever2
相关产品推荐
相关产品推荐

