Я пытаюсь получить поле Risks
от tabs в TFS
, однако, когда я печатаю все Fields
, я не вижу Risks
.Как получить ВСЕ поля WorkItem?
Я пробовал доступ к нему напрямую через WorkItem.Fields["FieldName"]
butno luck.
Любые идеи?
Я пытаюсь получить поле Risks
от tabs в TFS
, однако, когда я печатаю все Fields
, я не вижу Risks
.Как получить ВСЕ поля WorkItem?
Я пробовал доступ к нему напрямую через WorkItem.Fields["FieldName"]
butno luck.
Любые идеи?
Вы можете использовать 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);
}
}
Я немного поздно, я думаю, но так как он все еще может помочь кому-то, я собираюсь этот пост в любом случае. Даже если вы не указали, если вы находитесь в интерфейсе или бэкэнд.
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 в «обычных» случаях использования, но в этом случае у меня не было много доступных вариантов.
Вы пробовали отладку? – silkfire
@silkfire Да, я распечатываю все ссылочные имена полей, к которым я могу получить доступ, и по какой-то причине Риски не проходят через – Stefan
Является ли это настраиваемым полем? –