11

TFS API Web サービスを使用して、TFS から 1 回の旅行で作業項目とそれらにリンクされた作業項目のリストを取得できるかどうかを知っている人はいますか?

現時点では、最初の呼び出し中に作成された各作業項目に対して 2 回目の呼び出しを行う必要があり、パフォーマンスの問題が発生しています。

それが不可能な場合、リンクされたワークアイテムのタイプを取得せずに覗く方法はありますか?

4

2 に答える 2

18

回答で参照している記事には、 WIQLを使用して、目的を実行する方法が示されています。確かに、悪い選択ではありません。

私の意見では、もう 1 つの方法は、目的の結果が得られるクエリをグラフィカルに生成することです。おそらく、単純な「作業項目と直接リンク」が必要です:
ここに画像の説明を入力

保存すると、次のことができるようになります:

  1. VS & Team Web Access でクエリを開きます
  2. クエリを Excel に関連付け、Excel 内から WI を操作する
  3. TFS-API でクエリ結果をキャッチします。

後半では、クエリの名前が「MyLinkedQuery」で、TeamProject「MyProj」の「Team Queries」の下にあると仮定すると、次のようなことができます。

using System;
using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.WorkItemTracking.Client;

namespace LinkedQueryResults
{
    class Program
    {
        static void Main()
        {
            TfsTeamProjectCollection teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("http://TFSURL"));

            var workItemStore = (WorkItemStore)teamProjectCollection.GetService(typeof(WorkItemStore));

            var project = workItemStore.Projects["MyProj"];
            QueryHierarchy queryHierarchy = project.QueryHierarchy;
            var queryFolder = queryHierarchy as QueryFolder;
            QueryItem queryItem = queryFolder["Team Queries"];
            queryFolder = queryItem as QueryFolder;

            if (queryFolder != null)
            {
                var myQuery = queryFolder["MyLinkedQuery"] as QueryDefinition;
                if (myQuery != null)
                {
                    var wiCollection = workItemStore.Query(myQuery.QueryText);
                    foreach (WorkItem workItem in wiCollection)
                    {
                        Console.WriteLine(workItem.Title); 
                    }
                }
            }       
        }
    }
}
于 2012-05-25T15:37:08.083 に答える
9

この問題に関する記事を見つけました。

これにより、1 つのクエリで親アイテム ID とリンクされたアイテム ID を取得できるツリー クエリを使用できます。これを使用して、2 番目のクエリを使用して、実際の詳細な作業項目オブジェクトを取得できます。問題を解決するための 2 つのクエリ。

編集:これについては、ブログにも投稿しました。

于 2012-05-25T06:50:19.477 に答える