web-dev-qa-db-ja.com

C#でTFSから作業項目のリストを取得するにはどうすればよいですか?

WPF/C#でプロジェクトレポートツールを作成しようとしています。 TFS(Team Foundation Server)上のすべてのプロジェクト名にアクセスし、特定のプロジェクトの各作業項目の統計を表示したいと思います。

プロジェクト名はわかりましたが、実際の作業項目を取得するのが大変です。これが私がこれまでに得たものです:

public const string tfsLocation = "http://whatever";

// get the top list of project names from the team foundation server
public List<string> LoadProjectList()
{
    var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsLocation));
    var workItemStore = new WorkItemStore(tpc);
    var projects = (from Project project in workItemStore.Projects select project.Name).ToList();

    return projects;
}

public string GetProjectInfo(string targetProject)
{
    string info = String.Empty;

    var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsLocation));
    var workItemStore = new WorkItemStore(tpc);

    foreach (Project project in workItemStore.Projects)
    {
        if (project.Name == targetProject)
        {
            info += String.Format("Project: {0}\n\n", project.Name);

            info += "Work Item Types:\n";
            foreach (WorkItemType item in project.WorkItemTypes)
            {
                info += String.Format("-   {0}\n", item.Name);
                info += String.Format("    -   Description: {0}\n", item.Description);
                info +=               "    -   Field Definitions:\n";

                foreach (FieldDefinition field in item.FieldDefinitions)
                {
                    info += String.Format("        -   {0}\n", field.Name);
                }
                info += "\n";
            }
        }
    }

    return info;
}

GetProjectInfoは、各プロジェクトの内容に関する役立つ情報を返しますが、これまでのところ、definitionsはWorkItemsの構成要素のみであり、actualWorkItems自体。私が書いたプログラミングは間違った場所を探していると思います。

MicrosoftのWorkItemの定義から、( http://msdn.Microsoft.com/en-us/library/Microsoft.teamfoundation.workitemtracking.client.workitem.aspx )WorkItemTracking.Client内にあるように見えます、ただしWorkItemStore内ではなく、どこにアクセスするかわかりません。

最終版:

以下は、以下の回答を参照した後の私の関数の更新バージョンです。これは、印刷のために、改行付きの作業項目名の長い文字列を返すだけです。これは、私が(今のところ)機能させようとしているすべてです。

public string GetProjectInfo(string targetProject)
{
    string info = String.Empty;

    var tpc = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri(tfsLocation));
    WorkItemStore workItemStore = new WorkItemStore(tpc);

    Query query = new Query(workItemStore, "SELECT * FROM WorkItems WHERE [System.TeamProject] = @project", new Dictionary<string, string>() { { "project", targetProject } });

    WorkItemCollection wic = query.RunQuery();

    foreach (WorkItem item in wic)
    {
        info += String.Format("{0}\n", item.Title);
    }

    return info;
}
14
Nightmare Games

興味のある実際の作業項目を取得するには、WIQLクエリを使用する必要があります。特定のプロジェクトのすべての作業項目を取得するには:

using Microsoft.TeamFoundation.WorkItemTracking.Client;

Query query = new Query(
     workItemStore, 
     "select * from issue where System.TeamProject = @project",
     new Dictionary<string, string>() { { "project", project.Name } }
);

var workItemCollection = query.RunQuery();
foreach(Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItem workItem in workItemCollection) 
{
   /*Get work item properties you are interested in*/
   foreach(Microsoft.TeamFoundation.WorkItemTracking.Client.Field field in workItem.Fields)
   {
      /*Get field value*/
      info += String.Format("Field name: {0} Value: {1}\n", field.Name, field.Value);
   }
}
13
Oleg Mikhaylov