我试图从TFS中的tabs中检索Risks字段,但是,当我打印所有的Fields时,我看不到Risks。
我试过直接通过WorkItem.Fields["FieldName"]访问它,但没有成功。
有什么想法吗?
发布于 2016-04-19 18:06:19
您可以使用WIQL Queries来获取所有字段的值。以下是所有Work item field index的列表。下面是如何获取特定项目的所有工作项和所有字段的示例:
using Microsoft.TeamFoundation.WorkItemTracking.Client;
Query query = new Query(
workItemStore,
"select * from issue where System.TeamProject = @project",
new Dictionary<string, string>() { { "project", project.Name } }
);
var workItemCollection = query.RunQuery();
foreach(var workItem in workItemCollection)
{
/*Get work item properties you are interested in*/
foreach(var field in workItem.Fields)
{
/*Get field value*/
info += String.Format("Field name: {0} Value: {1}\n", field.name, field.Value);
}
}发布于 2016-09-19 17:32:52
我想我来晚了一点,但因为它可能仍然对某些人有帮助,所以我无论如何都要把这篇文章贴出来。即使你没有指定,如果你在前端或后端。
tl;dr:尝试省略请求中的字段参数。
背景:我想在pull requests details-view中提供更多的工作项细节,所以我为TamperMonkey创建了一个用户脚本。这意味着我不能“直接”访问TFS,因为我只能通过JavaScript访问前端。
和您一样,我也注意到TFS不会输出所有字段。为了解决这个问题,我随后用jQuery修改了TFS ajax请求,省略了fields参数。然后,TFS开始返回工作项的所有现有字段。
我在TFS documentation for work-items里找到了信息
字段(字符串)
每个工作项最多包含100个字段的逗号分隔列表。如果未指定,则返回所有字段。
如果这确实是您的用例,我还提供了我编写的用于修改ajax请求的脚本:
// by Joel Richard -> http://stackoverflow.com/a/26849194/4524280
function parseParams(str) {
return str.split('&').reduce(function (params, param) {
var paramSplit = param.split('=').map(function (value) {
return decodeURIComponent(value.replace('+', ' '));
});
params[paramSplit[0]] = paramSplit[1];
return params;
}, {});
}
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
// Modify ajax request to return all fields... definitely not a hack :D
if(options && options.url && options.url.indexOf('_apis/wit/workItems') >= 0) {
var parsedData = parseParams(options.data);
delete parsedData.fields;
options.data = $.param(parsedData);
}
});
$(document).ajaxComplete(function(event, request, settings) {
// trigger after ajax is complete to get values
if(settings && settings.url && settings.url.indexOf('_apis/wit/workItems') >= 0 && request.responseJSON) {
var workItemsData = request.responseJSON.value;
// -> workItemsData.fields contains all existing fields
}
});只是为了协议:我认为任何人都不应该在“正常”用例中使用$.ajaxPrefilter,但在这种情况下,我没有太多的选择。
https://stackoverflow.com/questions/36704123
复制相似问题