TFS API - 如何获取工作项的父项

发布于 2025-01-06 23:56:29 字数 1207 浏览 3 评论 0原文

我的最终目标是一次递归地获取一个工作项的父级,直到层次结构中不再有父级。目前,还没有任何递归,我仍在优化获取父工作项的方式。我想到了一种涉及查询的方法:

public WorkItem GetParentWorkItem(int id)
{
    StringBuilder queryString = new StringBuilder("SELECT [System.Id]" +    
                                                  " FROM WorkItemLinks " +
                                                  " WHERE [Source].[System.WorkItemType] = '" + TFS_TIMESHEET_WORK_ITEM_TYPE + "'"  +
                                                  " AND [Source].[System.TeamProject] = '" + TFS_TIMESHEET_PROJECT_KEY + "'" +
                                                  " AND [Source].[System.Id] = " + id 
                                                  );
    Query wiQuery = new Query(GetWorkItemStore, queryString.ToString());
    WorkItemLinkInfo[] wiTrees = wiQuery.RunLinkQuery();
    WorkItem wi = GetWorkItemStore.GetWorkItem(wiTrees[1].TargetId);

    return wi;
}

此方法的问题是它获取所有链接的工作项,包括前任、后继、子级和父级。我知道 wiTrees[1] 是父工作项,因此我对索引进行了硬编码。

我找到了一种从工作项存储中获取“父”WorkItemTypeEnd 对象的方法:

WorkItemLinkTypeEnd linkTypEnd = GetWorkItemStore.WorkItemLinkTypes.LinkTypeEnds["Parent"];

我该去哪里?

My ultimate goal is to get the parent of one work item at a time recursively, until there are no more parents in the hierarchy. At the moment, there is nothing recursive yet, I am still at the point of optimizing the way I obtain the parent work item. I have thought of a way of doing this involving a query:

public WorkItem GetParentWorkItem(int id)
{
    StringBuilder queryString = new StringBuilder("SELECT [System.Id]" +    
                                                  " FROM WorkItemLinks " +
                                                  " WHERE [Source].[System.WorkItemType] = '" + TFS_TIMESHEET_WORK_ITEM_TYPE + "'"  +
                                                  " AND [Source].[System.TeamProject] = '" + TFS_TIMESHEET_PROJECT_KEY + "'" +
                                                  " AND [Source].[System.Id] = " + id 
                                                  );
    Query wiQuery = new Query(GetWorkItemStore, queryString.ToString());
    WorkItemLinkInfo[] wiTrees = wiQuery.RunLinkQuery();
    WorkItem wi = GetWorkItemStore.GetWorkItem(wiTrees[1].TargetId);

    return wi;
}

The problem with this method is that it gets all the linked work items, including predecessor, successor, child and parents. I knew that wiTrees[1] was the parent work item so I hard coded the index.

I found out a way to get the "parent" WorkItemTypeEnd object from the work item store:

WorkItemLinkTypeEnd linkTypEnd = GetWorkItemStore.WorkItemLinkTypes.LinkTypeEnds["Parent"];

Where do I go from here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枕头说它不想醒 2025-01-13 23:56:29

这适用于 TFS 2013:

var parent_link = work_item.WorkItemLinks.Cast<WorkItemLink> ().FirstOrDefault (x => x.LinkTypeEnd.Name == "Parent");

WorkItem parent_work_item = null;
if (parent_link != null)
    parent_work_item = work_item_store.GetWorkItem (parent_link.TargetId);

This works on TFS 2013:

var parent_link = work_item.WorkItemLinks.Cast<WorkItemLink> ().FirstOrDefault (x => x.LinkTypeEnd.Name == "Parent");

WorkItem parent_work_item = null;
if (parent_link != null)
    parent_work_item = work_item_store.GetWorkItem (parent_link.TargetId);
双手揣兜 2025-01-13 23:56:29

找到了一个解决方案,如果有父项则返回父WorkItem,如果没有则返回null。

public WorkItem GetParentWorkItem(int id)
    {
        StringBuilder queryString = new StringBuilder("SELECT [System.Id]" +    
                                                      " FROM WorkItemLinks " +
                                                      " WHERE [Source].[System.WorkItemType] = '" + TFS_TIMESHEET_WORK_ITEM_TYPE + "'" +
                                                      " AND [Source].[System.TeamProject] = '" + TFS_TIMESHEET_PROJECT_KEY + "'" +
                                                      " AND [Source].[System.Id] = " + id 
                                                      );
        Query wiQuery = new Query(GetWorkItemStore, queryString.ToString());
        WorkItemLinkInfo[] wiTrees = wiQuery.RunLinkQuery();

        int parentLinkId = GetWorkItemStore.WorkItemLinkTypes.LinkTypeEnds["Parent"].Id;

        foreach (WorkItemLinkInfo linkInfo in wiTrees)
        {
            // -2 is the LinkTypeId for parent
            if (linkInfo.LinkTypeId == parentLinkId)
            {
                workItem = GetWorkItemStore.GetWorkItem(linkInfo.TargetId);
                break;
            }
            else
            {
                workItem = null;
            }
        }
        return workItem;
    }

Found a solution, which returns the parent WorkItem if there is a parent, if not returns null.

public WorkItem GetParentWorkItem(int id)
    {
        StringBuilder queryString = new StringBuilder("SELECT [System.Id]" +    
                                                      " FROM WorkItemLinks " +
                                                      " WHERE [Source].[System.WorkItemType] = '" + TFS_TIMESHEET_WORK_ITEM_TYPE + "'" +
                                                      " AND [Source].[System.TeamProject] = '" + TFS_TIMESHEET_PROJECT_KEY + "'" +
                                                      " AND [Source].[System.Id] = " + id 
                                                      );
        Query wiQuery = new Query(GetWorkItemStore, queryString.ToString());
        WorkItemLinkInfo[] wiTrees = wiQuery.RunLinkQuery();

        int parentLinkId = GetWorkItemStore.WorkItemLinkTypes.LinkTypeEnds["Parent"].Id;

        foreach (WorkItemLinkInfo linkInfo in wiTrees)
        {
            // -2 is the LinkTypeId for parent
            if (linkInfo.LinkTypeId == parentLinkId)
            {
                workItem = GetWorkItemStore.GetWorkItem(linkInfo.TargetId);
                break;
            }
            else
            {
                workItem = null;
            }
        }
        return workItem;
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文