7

特定の製品バックログ ID を指定して、PBI の子であるタスクのリストをプログラムで取得したいと考えています。

タスクに「Parent PBI Id」というフィールドが 1 つもないことは承知しています。動作しているコードのバージョンがありますが、クライアントでフィルタリングの一部を実行しているため、実際には非常に遅いです。

私が現在どのようにやっているかを見てください:

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;
4

1 に答える 1

2

標準として、MSF Agile のチーム プロジェクトには一連のクエリが付属しています。「作業項目」 -> 「反復 1」 -> 「反復バックログ」を見てください。

このクエリを WIQL ファイルとしてディスクに保存することは絶対に可能です。
それを変更されたものとして使用すると、wiqlQuery行う多くのフィルタリングから解放されるはずです。

編集(コメントへの応答:「わかりました、私はそれをしましたが、クエリは親とリンクされた(子)アイテムの間の関係について言及していません」):

デフォルトの「イテレーション バックログ」の WIQL を開きました。

<?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>

関連項目を取得するクエリの部分は次のとおりです。

[System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Forward'
于 2011-10-05T07:41:58.293 に答える