如何通过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
相关产品推荐
相关产品推荐

