You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过TFS Java SDK查询关联工作项?附普通查询代码

使用TFS Java SDK查询关联工作项

嗨,我来帮你搞定用TFS Java SDK查询关联工作项的问题~你已经有了普通工作项的查询基础,接下来咱们直接看关联工作项的两种常用实现方式:

方式1:从已有工作项入手,获取它的关联项

如果已经拿到了某个工作项的实例,直接遍历它的链接集合就行,筛选出属于工作项的关联链接(比如父子、相关、重复这些类型),再拿到对应的关联工作项详情。

代码示例:

public static void getRelatedWorkItems(TFSTeamProjectCollection tpc, int targetWorkItemId) {
    WorkItemClient workItemClient = tpc.getWorkItemClient();
    
    // 先拿到目标工作项
    WorkItem targetWorkItem = workItemClient.getWorkItemByID(targetWorkItemId);
    if (targetWorkItem == null) {
        System.out.println("没找到ID为" + targetWorkItemId + "的工作项哦");
        return;
    }
    
    // 遍历所有链接,挑出工作项关联链接
    for (Link link : targetWorkItem.getLinks()) {
        if (link instanceof RelatedLink) {
            RelatedLink relatedLink = (RelatedLink) link;
            int relatedWorkItemId = relatedLink.getRelatedWorkItemID();
            // 获取关联工作项的详细信息
            WorkItem relatedWorkItem = workItemClient.getWorkItemByID(relatedWorkItemId);
            
            System.out.println("关联工作项ID: " + relatedWorkItemId);
            System.out.println("标题: " + relatedWorkItem.getTitle());
            System.out.println("链接类型: " + relatedLink.getLinkTypeEnd().getName());
            System.out.println("---");
        }
    }
}

方式2:直接用WIQL查询关联工作项

你也可以写WIQL语句直接查询符合条件的关联工作项,比如找某个工作项的所有活跃关联项,或者所有有父项的子工作项。

举个WIQL例子(查询ID为100的工作项的所有活跃关联项):

SELECT ID, Title, [System.Links.LinkType] 
FROM WorkItems 
WHERE [System.RelatedLinkID] = 100 
AND [System.State] = 'Active'

对应的Java代码实现:

public static void queryRelatedWorkItemsViaWIQL(TFSTeamProjectCollection tpc, String projectName) {
    Project project = tpc.getWorkItemClient().getProjects().get(projectName);
    WorkItemClient workItemClient = project.getWorkItemClient();
    
    // 定义查询关联工作项的WIQL语句
    String wiqlQuery = "SELECT ID, Title, [System.Links.LinkType] " +
                       "FROM WorkItems " +
                       "WHERE [System.RelatedLinkID] = 100 " + // 这里替换成你要查的目标工作项ID
                       "AND [System.State] = 'Active' " +
                       "ORDER BY ID ASC";
    
    // 执行查询拿到结果集合
    WorkItemCollection workItems = workItemClient.query(wiqlQuery);
    
    // 遍历输出结果
    for (WorkItem workItem : workItems) {
        System.out.println("工作项ID: " + workItem.getID());
        System.out.println("标题: " + workItem.getTitle());
        System.out.println("关联类型: " + workItem.getFields().getField("System.Links.LinkType").getValue());
        System.out.println("---");
    }
}

几个要注意的点

  • 链接类型区分:TFS里有好几种链接类型(Parent/Child、Related、Duplicate等),你可以通过RelatedLink.getLinkTypeEnd().getName()来判断类型,也能在WIQL里用[System.Links.LinkType]筛选特定类型的关联项。
  • 权限问题:要确保你的TFS账号有访问目标工作项和关联工作项的权限,不然会查不到内容。
  • 性能优化:如果关联项很多,记得在WIQL里加更多筛选条件(比如状态、区域路径),减少返回的结果数量,提升查询速度。

内容的提问来源于stack exchange,提问作者Ansar Samad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:29:02