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

如何通过TypeScript代码识别VSTS/TFS项目的当前流程模板?

识别VSTS/TFS项目流程模板(Agile/Scrum/CMMI)的TypeScript实现

我刚好做过类似的VSTS/TFS扩展开发需求,用vsts-node-api完全可以实现识别项目流程模板的功能,下面是具体的步骤和代码示例:

核心思路

VSTS/TFS的每个项目都会关联一个流程模板,我们可以通过以下两步获取模板信息:

  1. 获取目标项目的基本信息,从中提取流程模板的ID
  2. 通过流程模板ID获取模板的详细名称,判断属于Agile、Scrum还是CMMI

实现步骤及代码

1. 安装依赖

首先确保你已经安装了vsts-node-api包:

npm install vsts-node-api

2. TypeScript代码实现

import { WebApi, getPersonalAccessTokenHandler } from 'vsts-node-api';
import { IProjectApi } from 'vsts-node-api/ProjectApi';
import { IWorkItemTrackingProcessApi } from 'vsts-node-api/WorkItemTrackingProcessApi';
import { Process } from 'vsts-node-api/interfaces/WorkItemTrackingInterfaces';

/**
 * 获取指定项目的流程模板名称
 * @param orgUrl VSTS/TFS组织地址(如:https://your-org.visualstudio.com)
 * @param projectName 目标项目名称
 * @param pat 个人访问令牌(需具备项目读取和工作项跟踪读取权限)
 * @returns 流程模板名称(Agile/Scrum/CMMI/未知流程模板)
 */
async function getProjectProcessTemplateName(
    orgUrl: string,
    projectName: string,
    pat: string
): Promise<string> {
    // 初始化API客户端
    const authHandler = getPersonalAccessTokenHandler(pat);
    const webApi = new WebApi(orgUrl, authHandler);

    // 获取项目API实例,获取项目详情(包含流程模板ID)
    const projectApi: IProjectApi = await webApi.getProjectApi();
    const project = await projectApi.getProject(projectName, false, true);
    
    if (!project.processTemplate?.id) {
        throw new Error('无法获取项目关联的流程模板ID');
    }

    // 获取工作项跟踪流程API实例,根据ID获取流程模板详情
    const processApi: IWorkItemTrackingProcessApi = await webApi.getWorkItemTrackingProcessApi();
    const process: Process = await processApi.getProcess(project.processTemplate.id);

    // 判断并返回流程模板类型
    switch (process.name.toLowerCase()) {
        case 'agile':
            return 'Agile';
        case 'scrum':
            return 'Scrum';
        case 'cmmi':
            return 'CMMI';
        default:
            return '未知流程模板';
    }
}

// 使用示例
(async () => {
    try {
        const orgUrl = 'https://your-org.visualstudio.com';
        const projectName = 'YourTargetProject';
        const pat = 'your-personal-access-token'; // 注意:不要在生产代码中硬编码PAT

        const templateName = await getProjectProcessTemplateName(orgUrl, projectName, pat);
        console.log(`当前项目使用的流程模板:${templateName}`);

        // 这里可以根据模板名称编写对应的工作项状态更新逻辑
        if (templateName === 'Agile') {
            // 处理Agile模板下的工作项状态更新
            console.log('执行Agile模板专属的工作项状态更新逻辑');
        } else if (templateName === 'Scrum') {
            // 处理Scrum模板下的工作项状态更新
            console.log('执行Scrum模板专属的工作项状态更新逻辑');
        } else if (templateName === 'CMMI') {
            // 处理CMMI模板下的工作项状态更新
            console.log('执行CMMI模板专属的工作项状态更新逻辑');
        }
    } catch (error) {
        console.error('获取流程模板失败:', error);
    }
})();

注意事项

  • 权限要求:你的个人访问令牌(PAT)需要具备Project and Team (Read)和Work Item Tracking (Read)权限,否则会出现权限不足的错误。
  • TFS版本兼容:如果是TFS 2018及更早版本,部分API可能有所差异,建议参考对应版本的官方文档调整调用方式。
  • 状态映射:拿到模板名称后,你可以提前定义好不同模板下工作项类型的状态转换规则,比如:
    • Agile模板:Bug状态为New→Active→Resolved→Closed
    • Scrum模板:Bug状态为New→Approved→Committed→Done
    • CMMI模板:Bug状态为Proposed→Active→Resolved→Closed

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:14:36