2016-03-18 43 views
3

Ich versuche, eine WIQL-Abfrage auf TFS-Server (nach this Beispiel) auszuführen und Arbeitsaufgaben mit dem Titel und andere Felder. Obwohl ich die Spalten, die ich in der Ausgabe haben möchte, definiere, gab der JSON nur mit ID und URL zurück.TFS-API - WIQL - Abfrage gibt nur ID und URL

Abfrage

Select [System.Title], 
    [System.Description], 
    [System.WorkItemType],[System.Id] 
    From WorkItems 
    Where [System.WorkItemType] = 'Task' 
     AND [State] <> 'Closed' 
     AND [State] <> 'Removed' 
     AND [System.AssignedTo] = @me 
    order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc 

Json zurück

{"queryType":"flat","queryResultType":"workItem","asOf":"2016-03-18T22:53:15.777Z","columns":[{"referenceName":"System.Title","name":"Title","url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/fields/System.Title"},{"referenceName":"System.Description","name":"Description","url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/fields/System.Description"},{"referenceName":"System.WorkItemType","name":"Work Item Type","url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/fields/System.WorkItemType"},{"referenceName":"System.Id","name":"ID","url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/fields/System.Id"}],"sortColumns":[{"field":{"referenceName":"Microsoft.VSTS.Common.Priority","name":"Priority","url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/fields/Microsoft.VSTS.Common.Priority"},"descending":false},{"field":{"referenceName":"System.CreatedDate","name":"Created Date","url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/fields/System.CreatedDate"},"descending":true}],"workItems":[{"id":6760,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6760"},{"id":6734,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6734"},{"id":6731,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6731"},{"id":6526,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6526"},{"id":6525,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6525"},{"id":6524,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6524"},{"id":6514,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6514"},{"id":6372,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6372"},{"id":6371,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6371"},{"id":6235,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6235"},{"id":6218,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6218"},{"id":6123,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6123"},{"id":6122,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6122"},{"id":6121,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6121"},{"id":6120,"url":"http://<my tfs server>/tfs/DefaultCollection/_apis/wit/workItems/6120"}]} 

Gibt es eine Flagge, die ich auf die Abfrage passieren sollte, so kann ich die Felder auf der ouput bekommen?

Antwort

3

Die Frage, von dem, was ich am Nennwert erzählen kann, basiert auf dem ersten POST Beispiel, das auf dem documentation page zur Verfügung gestellt wird, das Sie verwiesen.

an den Inhalt Ihrer json der Suche führen Sie folgende json Array bemerken:

"workItems":[ 
{"id":7331, 
"url":"https://<hostname>/tfs/<collection>/_apis/wit/workItems/7331"}, ... etc. 

im documentation page verwiesen Lesen auf folgendes angegeben:

„Nach der Ausführung Bei der Abfrage erhalten Sie die Arbeitsaufgaben mit den IDs , die in der Abfrageergebnisantwort zurückgegeben wurden. Sie können bis zu 200 Arbeitsaufgaben gleichzeitig abrufen. "

Dies bedeutet, dass die Abfrage ein zweistufiger Prozess

1. eine Liste der Workitem-IDs in dem ersten Aufruf abzurufen ist.

2. rufen Sie weitere Details zu den im ersten API-Aufruf zurückgegebenen Arbeitselementen auf, indem Sie weitere Aufrufe tätigen.

Der Grund für das Limit von 200 Workitems ist sinnvoll, die Reaktionsfähigkeit des Service wäre negativ beeinflusst, wenn es kein solches Limit gäbe.

Die Dokumentation geht dann auf ein prägnantes Beispiel, um Daten für jede der Arbeitseinheit IDs zurück bekommen (in den Arbeitsschritten array) von dem ersten api Aufruf.

referenzierte Beispiel (aus dem gleichen doc) unten beachten, dass die in der ersten Abfrage der ID zurück in dieser Abfrage verwendet werden würde:

GET: https://fabrikam.visualstudio.com/DefaultCollection/_apis/wit/WorkItems?ids=300,299,298,17,16,15,14,9,8&fields=System.Id,System.Title,System.State&asOf=2014-12-29T20:49:34.617Z&api-version=1.0 

Unterm Strich: An diesem Punkt gibt es Kein Flag, das die API zwingt, alle Arbeitselemente zurückzugeben, die aus der ersten Abfrage resultieren.

+0

Danke für die Antwort. Mein Problem besteht hier nicht in der Anzahl der zurückgegebenen Workitems, sondern in den Feldern, die in der Eigenschaft workitem zurückgegeben werden. Wie Sie in meinem Beispiel sehen können, gibt es nur ID und URL zurück, obwohl ich explizit [System.Title], System.Description], [System.WorkItemType] und [System.Id] in der WIQL-Abfrage deklariert habe. – rbianchi

+0

Ja zugestimmt.Die Nuance, der ich zustimme, ist ein bisschen irreführend, die anfängliche Anfrage in meinem Kopf erfordert auch nicht die zusätzlichen Felder, die ich angegeben habe. Ich persönlich glaube, dass das VS-Produktteam dieses Dokument aktualisieren sollte, um die Argumentation zu reflektieren. Der Punkt ist jedoch, dass dies ein zweistufiger Prozess ist. Die anfängliche Abfrage gibt nur eine Liste von IDs zurück, und dann muss der Client die Arbeitselementdetails in Batches von 200 abfragen, um eine Überlastung des Service zu vermeiden. Stellen Sie sich vor, Sie schreiben eine Abfrage, die alle Arbeitselemente zurückgibt. Beispiel: Wir haben 1040000 Arbeitselemente in unserer tfs-Instanz, die bis 2008 zurückreichen. Nicht gut. – Elmar