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

Azure DevOps自定义流程模板下TFS API无法返回自定义状态如何解决

根因说明

你修改的是全局Scrum流程模板的配置,已存在的旧项目创建时使用的是修改前的模板版本,默认不会自动同步模板的更新内容,所以旧项目的工作项类型定义中仍没有新增的自定义状态,只有新建项目会直接拉取最新的模板配置,因此仅新项目可正常返回自定义状态。

修复方案

  • 方案1:手动同步模板更新到已有项目
    使用TFS内置的witadmin命令行工具,将修改后的工作项类型定义导入到所有需要生效的旧项目中:

    1. 首先导出你修改完成的流程模板对应的工作项类型定义文件:
    witadmin exportwitd /collection:http://<你的TFS服务地址>/tfs/<集合名称> /p:<模板所属的测试项目名> /n:"<你修改的工作项类型,如任务/用户故事>" /f:"C:\temp\Task.xml"
    
    1. 遍历所有需要更新的旧项目,执行导入操作:
    witadmin importwitd /collection:http://<你的TFS服务地址>/tfs/<集合名称> /p:<要更新的旧项目名> /f:"C:\temp\Task.xml"
    

    导入完成后需要清理TFS客户端缓存,或调用API的刷新方法拉取最新配置。

  • 方案2:调整API逻辑,强制刷新缓存
    你当前使用的WorkItemStore默认优先读取本地缓存,不会主动拉取服务端最新的工作项配置,需要在读取前主动触发刷新,调整后的代码如下:

    WorkItemStore workItemStore = this.tfsTeamProjectCollection.GetService<WorkItemStore>();
    // 新增:强制刷新WorkItemStore的所有配置,拉取服务端最新的工作项定义
    workItemStore.Refresh();
    
    int projectConunt = workItemStore.Projects.Count;
    List<WorkItemFieldsInfo> workItemFieldsInfo = new List<WorkItemFieldsInfo>();
    string filedRefName = "System.State"; // 状态字段的引用名,可根据实际情况修改
    
    for (int i = 0; i < projectConunt; i++)
    {
        WorkItemTypeCollection workItemTypeCollection = workItemStore.Projects[i].WorkItemTypes;
        // 新增:刷新当前项目的工作项类型缓存
        workItemTypeCollection.Refresh();
        
        for (int j = 0; j < workItemTypeCollection.Count; j++)
        {
            string workitemType = workItemTypeCollection[j].Name;
            for (int k = 0; k < workItemTypeCollection[j].FieldDefinitions.Count; k++)
            {
                Microsoft.TeamFoundation.WorkItemTracking.Client.FieldDefinition fieldDefinition =
                    workItemTypeCollection[j].FieldDefinitions[k];
               
                if (filedRefName == fieldDefinition.ReferenceName)
                {
                    // 新增:刷新字段允许值缓存
                    fieldDefinition.AllowedValues.Refresh();
                    List<string> allowedValues = new List<string>();
    
                    foreach (var allowedValue in fieldDefinition.AllowedValues)
                    {
                        allowedValues.Add(allowedValue.ToString());
                    }
    
                    WorkItemFieldsInfo workItemFieldInfo = workItemFieldsInfo.Find(st => st.Type == workitemType);
    
                    if (workItemFieldInfo == null)
                    {
                        workItemFieldsInfo.Add(new WorkItemFieldsInfo()
                        {
                            Type = workitemType,
                            AllowedValues = allowedValues
                        });
                    }
                    else
                    {
                        List<string> unionFields = workItemFieldInfo.AllowedValues.Union(allowedValues).ToList();
                        workItemFieldInfo.AllowedValues = unionFields;
                    }
    
                    break;
                }
            }
        }
    }
    
  • 方案3:开启继承式流程自动同步(适用于TFS 2018及以上版本)
    如果你使用的是继承类型的流程模板而非XML自定义流程,可在流程模板的设置页面开启「自动更新所有关联项目」选项,后续修改模板配置后,所有使用该模板的项目会自动同步更新内容,无需手动操作。

自定义状态配置截图

自定义状态配置截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 17:54:05