2016-04-18 4 views
0

Я пытаюсь получить поле Risks от tabs в TFS, однако, когда я печатаю все Fields, я не вижу Risks.Как получить ВСЕ поля WorkItem?

Я пробовал доступ к нему напрямую через WorkItem.Fields["FieldName"] butno luck.

Любые идеи?

+0

Вы пробовали отладку? – silkfire

+0

@silkfire Да, я распечатываю все ссылочные имена полей, к которым я могу получить доступ, и по какой-то причине Риски не проходят через – Stefan

+0

Является ли это настраиваемым полем? –

ответ

0

Вы можете использовать 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); 
    } 
} 
0

Я немного поздно, я думаю, но так как он все еще может помочь кому-то, я собираюсь этот пост в любом случае. Даже если вы не указали, если вы находитесь в интерфейсе или бэкэнд.

tl; dr: попытаться опустить поля в запросе.

Фон: Я хотел бы предоставить больше деталей workitem в деталях запроса pull-запросов, поэтому я создал пользовательский текст для TamperMonkey. Это означает, что у меня нет прямого доступа к TFS, так как я получаю доступ только к интерфейсу через JavaScript.

Как и вы, я также заметил, что TFS не выводит все поля. Чтобы решить эту проблему, я затем изменил запрос ajax TFS с помощью jQuery, чтобы опустить параметр fields. Затем TFS начал возвращать все существующие поля для рабочего элемента.

Я нашел информацию в TFS documentation for work-items

полей (строка)
через запятую список до 100 полей, чтобы получить с каждого рабочего элемента. Если не указано, все поля возвращаются.

В случае, когда на самом деле это ваш потребительной случай, я также предоставляет сценарий, который я написал, чтобы изменить запрос Аякса:

// 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 в «обычных» случаях использования, но в этом случае у меня не было много доступных вариантов.

Смежные вопросы