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
相关产品推荐
相关产品推荐

