使用WorkItemLinks获取子级的层次结构

时间:2015-03-27 19:28:31

标签: c# tfs tfs2013 tfs-sdk

我试图使用tfs api和C#

从tfs获取给定工作项id的所有子项

这是方案

功能(Id:1)

- >产品积压项目(Id:2) - >任务(Id:3)

- >产品积压项目(Id:4)

ID为1的工作项目有2个孩子,ID为2& 4

Id:2有一个Id:3

的孩子

当一个工作项id被传递时我想得到所有的孩子,完成树所以对于上面的场景我当Id:1被传递时该方法应该返回所有的孩子ID 2,3,4 这是我到目前为止所做的,难以进行递归调用,有人可以给我一只手

注意:我不想使用wiql返回层次结构,我想使用WorkItemLinks返回所有子项

 public List<string> getWorkItemChildren(string Collection, string Project, int Id)
    {
        var teamCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(new Uri("tfsConnection" + Collection));
        teamCollection.EnsureAuthenticated();
        WorkItemStore store = new WorkItemStore(teamCollection);
        Query query = new Query(store, "select * from issue where System.TeamProject = @project", new Dictionary<string, string>() { { "project", Project } });
        query.RunQuery();
        WorkItem workitem = store.GetWorkItem(Id);
        int parentLinkId = store.WorkItemLinkTypes.LinkTypeEnds["Parent"].Id;

        List<int> relatedWorkItemIds = new List<int>();
        List<string> relatedWorkItemType = new List<string>();
        if(workitem.Links.Count!=0)
        {
            foreach (WorkItemLink link in workitem.WorkItemLinks)
            {
                if (link.LinkTypeEnd.Id != parentLinkId)
                {
                    relatedWorkItemIds.Add(link.TargetId);

                }
            } 
        foreach (var linkType in relatedWorkItemIds)
        {
            WorkItem relatedWorkItem = store.GetWorkItem(linkType);
            relatedWorkItemType.Add(relatedWorkItem.Type.Name);
            foreach(WorkItemLink childlinks in relatedWorkItem.WorkItemLinks)
            {

            }
        }

        return relatedWorkItemType;

        } 
    }

1 个答案:

答案 0 :(得分:0)

您需要使用:

Store.GetWorkItem(123);

然后遍历链接,并为每个子链接类型执行相同的操作。

然后重复...