首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取WorkItem的所有字段?

如何获取WorkItem的所有字段?
EN

Stack Overflow用户
提问于 2016-04-19 04:55:02
回答 2查看 2.9K关注 0票数 1

我试图从TFS中的tabs中检索Risks字段,但是,当我打印所有的Fields时,我看不到Risks

我试过直接通过WorkItem.Fields["FieldName"]访问它,但没有成功。

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2016-04-19 18:06:19

您可以使用WIQL Queries来获取所有字段的值。以下是所有Work item field index的列表。下面是如何获取特定项目的所有工作项和所有字段的示例:

代码语言:javascript
复制
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);
   }
}
票数 1
EN

Stack Overflow用户

发布于 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请求的脚本:

代码语言:javascript
复制
// 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,但在这种情况下,我没有太多的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36704123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档