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

VSTS仪表板Widget中getWorkItem的expand参数使用问题

解决VSTS Widget中getWorkItem()的expand参数传递问题

我来帮你搞定这个expand参数的传递问题!你遇到的核心问题是直接写All没有被识别为合法的参数值,下面给你详细说明正确的用法:

一、expand参数的类型与合法值

getWorkItem()的expand参数属于WorkItemExpand枚举类型,可选值包括:None、Relations、Fields、Links、All。你有两种合法的传递方式:

  • 使用API提供的枚举成员(推荐,避免拼写错误)
  • 直接传入对应的字符串值(注意大小写必须匹配,比如"All")

二、修改你的代码

你原来的代码里直接写All是未定义的变量,所以会报错。下面是两种修正后的代码示例:

方法1:使用枚举成员(推荐)

VSS.require(["VSS/Service", "TFS/Dashboards/WidgetHelpers", "TFS/WorkItemTracking/RestClient"], 
function (VSS_Service, WidgetHelpers, TFS_Wit_WebApi) { 
    WidgetHelpers.IncludeWidgetStyles(); 
    VSS.register("myapp", function () { 
        var fetchData = function (widgetSettings) { 
            const epicID = 123456; 
            // 获取WIT客户端
            return VSS_Service.getCollectionClient(TFS_Wit_WebApi.WorkItemTrackingHttpClient)
                // 使用枚举值传递expand参数
                .getWorkItem(epicID, null, null, TFS_Wit_WebApi.WorkItemExpand.All)
                .then(function (workItem) { 
                    $('#myText').text(JSON.stringify(workItem)); 
                    console.log(workItem); 
                    // 从relations中提取Epic下的Feature ID
                    const featureIds = workItem.relations
                        .filter(rel => rel.rel === "System.LinkTypes.Hierarchy-Forward")
                        .map(rel => {
                            // 从链接URL中提取WorkItem ID
                            const urlParts = rel.url.split('/');
                            return urlParts[urlParts.length - 1];
                        });
                    console.log("Epic关联的Feature ID列表:", featureIds);
                    return WidgetHelpers.WidgetStatusHelper.Success(); 
                }, function (error) { 
                    return WidgetHelpers.WidgetStatusHelper.Failure(error.message); 
                }); 
        }
        // 返回Widget的核心对象(必须包含load方法)
        return {
            load: function(widgetSettings) {
                return fetchData(widgetSettings);
            }
        };
    }); 
});

方法2:直接传入字符串值

如果你不想依赖枚举,也可以直接传匹配的字符串:

.getWorkItem(epicID, null, null, "All")

三、获取Epic下的Feature ID细节

当expand参数设置为All(或Relations)后,返回的WorkItem对象会包含relations数组。你需要筛选出层级子项的链接(对应Feature):

  • 过滤rel属性为"System.LinkTypes.Hierarchy-Forward"的关系项(这代表当前Epic的子WorkItem)
  • 从每个关系的url末尾提取数字,就是对应的Feature ID

补充小提示

如果你的需求只是获取子项关系,其实不需要传All,传TFS_Wit_WebApi.WorkItemExpand.Relations就足够了,这样返回的数据量更小,性能更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:00:00