2016-04-18 15 views
0

Ich versuche, das Risks Feld von tabs in TFS abzurufen, jedoch, wenn ich alle Fields drucke, kann ich die Risks nicht sehen.Wie bekomme ich ALLE Felder eines WorkItems?

Ich habe versucht, Zugriff direkt über WorkItem.Fields["FieldName"] butno Glück.

Irgendwelche Ideen?

+0

Haben Sie versucht, das Debuggen? – silkfire

+0

@silkfire Ja, ich drucke alle Referenznamen der Felder aus, auf die ich zugreifen kann, und aus irgendeinem Grund tritt das Risiko nicht auf – Stefan

+0

Ist es ein benutzerdefiniertes Feld? –

Antwort

0

Sie können WIQL Queries verwenden, um die Werte aller Felder abzurufen. Hier ist eine Liste aller Work item field index. Unten ist ein Beispiel, mit wie alle Workitems und alle Felder für ein bestimmtes Projekt zu erhalten:

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

ich ein bisschen spät bin, glaube ich, aber da es noch jemand helfen könnte, ich werde dies posten Sowieso. Auch wenn Sie nicht angegeben haben, ob Sie sich im Frontend oder Backend befinden.

tl; dr: Versuchen Sie, die Felder Parameter in der Anfrage wegzulassen.

Hintergrund: Ich wollte mehr workitem-details in der Pull-Requests-Detailansicht bereitstellen, also habe ich ein Userscript für TamperMonkey erstellt. Das heißt, ich habe keinen "direkten" Zugriff auf TFS, da ich nur über JavaScript auf das Frontend zugreife.

Wie Sie, habe ich auch festgestellt, dass TFS nicht alle Felder ausgibt. Um das zu lösen, habe ich dann die TFS-Ajax-Anfrage mit jQuery modifiziert, um den fields-Parameter wegzulassen. Dann hat TFS begonnen, alle vorhandenen Felder für das Arbeitselement zurückzugeben.

fand ich die Informationen in dem TFS documentation for work-items

Felder (string)
Eine durch Kommata getrennte Liste von bis zu 100 Feldern mit jedem Arbeitselement zu erhalten. Wenn nicht angegeben, werden alle Felder zurückgegeben.

Falls Ihr eigentlich Use-Case ist, ich sende auch das Skript, das ich die Ajax-Anforderung zu ändern, schrieb:

// 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 
    } 
}); 

Nur für das Protokoll: jemand Ich glaube nicht, sollte $ .ajaxPrefilter in "normalen" Anwendungsfällen verwenden, aber in diesem Fall hatte ich nicht viele Optionen zur Verfügung.