2011-10-05 12 views
7

Belirli bir ürün biriktirme kimliği verildiğinde, programlı olarak PBI'ye alt öğe olan görevlerin bir listesini almak istiyorum.TFS API'sindeki Ürün İş Listesi Öğesinden çocuk görevleri listesi nasıl alınır?

Görevde "Ebeveyn PBI Kimliği" yazan bir alan olmadığını biliyorum. Çalışmakta olan bir kod sürümüm var, ancak gerçekten çok yavaş, çünkü filtreleme bölümümün bir kısmını gerçekleştiriyorum.

Şu anda nasıl olduğumu bakınız: standart olarak

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; 
+0

mı olmalı Sorgu oluşturucu GUI'de sorgu oluşturmaya çalıştınız mı? Bunu yapabilir ve sonra da sorguyu bir dosya olarak kaydederseniz, dosya iyi bir wiql deyimi içerecektir. Sorguyu wiql'de yapabilirseniz, istemci API'sinde bunu yapmak yerine arka planda tek bir sql sorgusuna dönüşecektir. – bryanmac

+0

Yöntem, bir yüklemeyi kabul ettiği sürece 'workItem.Fields.Cast () .FirstOrDefault (f => field.Name ==" Kalan İş ")' i kullanabilirsiniz. Şu anda 'Nerede (..). FirstOrDefault() 'yi kullanıyorsunuz. – abatishchev

+0

wistore nedir? –

cevap

2

, MSF Çevik ekibi proje sorgu kümesi ile birlikte gelir. 'İş Öğeleri' -> 'Yineleme 1' -> 'Yineleme İşareti' bölümüne bir göz atın.

Bu sorgunun diskinizde WIQL dosyası olarak kaydedilmesi kesinlikle mümkündür.
Modifiye edilmiş bir wiqlQuery olarak kullanmak, yaptığınız birçok filtrelemeden sizi rahatlatır.

DÜZENLEME (yanıtta yorum yapmak: "Tamam, ben yaptım, ancak sorgu ebeveyn ve bağlantılı (çocuk) öğeler arasındaki ilişkiyi söz etmez"):

ı WIQL açıldı varsayılan "Yineleme Backlog":

<?xml version="1.0" encoding="utf-8"?> 
<WorkItemQuery Version="1"> 
    <TeamFoundationServer> 
    http://****> 
    <TeamProject>****</TeamProject> 
    <Wiql>SELECT [System.Id], [System.WorkItemType], [System.Title], 
    [System.State], [System.AssignedTo], 
    [Microsoft.VSTS.Scheduling.RemainingWork], 
    [Microsoft.VSTS.Scheduling.CompletedWork], 
    [Microsoft.VSTS.Scheduling.StoryPoints], 
    [Microsoft.VSTS.Common.StackRank], 
    [Microsoft.VSTS.Common.Priority], 
    [Microsoft.VSTS.Common.Activity], [System.IterationPath], 
    [System.AreaPath] FROM WorkItemLinks WHERE 
    (Source.[System.TeamProject] = @project and 
    Source.[System.AreaPath] under @project and 
    Source.[System.IterationPath] under '****\Iteration 1' and 
    (Source.[System.WorkItemType] = 'User Story' or 
    Source.[System.WorkItemType] = 'Task')) and 
    [System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward' 
    and Target.[System.WorkItemType] = 'Task' ORDER BY 
    [Microsoft.VSTS.Common.StackRank], 
    [Microsoft.VSTS.Common.Priority] mode(Recursive)</Wiql> 
</WorkItemQuery> 

ilgili öğeleri alır sorgunun bir parçası bu

[System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward' 
+0

Scrum şablonunu kullanıyorum, ama neden bahsettiğinizi biliyorum. Benim durumumda, istediğimi yapan bir "Sprint Backlog" sorgum var, ancak diske kaydetmenin herhangi bir yolunu veya kullanılan dize sorgusunu nasıl görebiliyorum. Bu "İş Öğeleri Ağacı" nın bir sorgusudur. –

+0

Ben de bunun farkında değildim ve bu konuya dikkat ettim http://stackoverflow.com/questions/6534060/how-to-export-bug- list-ya-hiç-özel-sorgu-den-tfs-to-excel-dan-bir-komuta-lin/6541934 # 6541934. Dosyayı bir kez kaydettikten sonra herhangi bir editörde açabilir ve WIQL sorgusunu C# – pantelif

+0

kopyalayabilirsin, bunu yaptım ama sorgu ana ve bağlantılı (alt) öğeler arasındaki ilişkiden söz etmiyor –

İlgili konular