Gewusst wie: abrufen der Liste der Kind Aufgaben aus einem Product Backlog Item im TFS-API?

Sich auf ein bestimmtes Produkt-backlog-id, ich will programmgesteuert abrufen einer Liste von Aufgaben, die Kind der PBI.

Ich bin mir bewusst, dass es nicht das eine Feld in der Aufgabe, sagt "Eltern-PBI-Id". Ich habe eine version von code, der ist arbeiten, aber das ist wirklich wirklich langsam, da ich noch tun, führen Sie ein Teil meiner Filterung int client.

Sehen, wie ich bin derzeit dabei:

string wiqlQuery =
    string.Format(
        "Select ID, [Remaining Work], State " +
        "from WorkItems " +
        "where (([Work Item Type] = 'Task')" +
        " AND ([Iteration Path] = '{0}' )" +
        " AND (State <> 'Removed')" +
        " AND (State <> 'Done')) ",
        sprint, storyId);

//execute the query and retrieve a collection of workitems
WorkItemCollection workItems = wiStore.Query(wiqlQuery);

if (workItems.Count <= 0)
    return null;

var result = new List<TaskViewModel>();
foreach (WorkItem workItem in workItems)
{
    var relatedLink = workItem.Links[0] as RelatedLink;
    if (relatedLink == null) continue;
    if (relatedLink.RelatedWorkItemId != storyId) continue;

    Field remWorkField = (from field in workItem.Fields.Cast<Field>()
                          where field.Name == "Remaining Work"
                          select field).FirstOrDefault();
    if (remWorkField == null) continue;
    if (remWorkField.Value == null) continue;

    var task = new TaskViewModel
    {
        Id = workItem.Id,
        ParentPbi = relatedLink.RelatedWorkItemId,
        RemainingWork = (double) remWorkField.Value,
        State = workItem.State
    };

    result.Add(task);
}

return result;
  • Haben Sie versucht, erstellen Sie die Abfrage im Abfrage-generator-gui? Wenn Sie das tun können und speichern Sie die Abfrage als Datei, die Datei enthält eine gute wiql-Anweisung. Wenn Sie das tun können Sie die Abfrage in der wiql, es zu verwandeln in einer einzigen sql-Abfrage auf das backend anstelle von Ihnen tut es auf der client-api.
  • Sie können workItem.Fields.Cast<Field>().FirstOrDefault(f => field.Name == "Remaining Work") soweit die Methode akzeptiert ein Prädikat. Derzeit verwenden Sie Where(..).FirstOrDefault() ist überwältigend.
  • was ist wistore?
InformationsquelleAutor Padu Merloti | 2011-10-05
Schreibe einen Kommentar