我在 TFS 2013 中创建了一个查询,如下所示:
- 选择“工作项和直接链接”而不是“平面列表”
- 团队项目 = @Project
- 删除源工作项的所有其他子句。
- 删除所有“链接工作项的过滤器”
- 选择单选按钮“返回所有顶级工作项”
- 选择单选按钮“返回选定的链接类型”
- 勾选“父母”
当我在 TFS 中运行此查询时,结果包含所有符合源条件的工作项,无论它们是否具有链接。
以下 WIQL 由上述查询生成(如果我另存为文件):
SELECT [System.Id], [System.Links.LinkType], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags]
FROM WorkItemLinks
WHERE ([Source].[System.TeamProject] = @project)
And ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Reverse')
ORDER BY [System.Id] mode(MayContain)
但是,当我运行以下 powershell 时,生成的 sourceIds 仅包含具有父链接的工作项:
$CollectionUrl = "myCollectionUrl"
$ProjectName = "myProjectName"
'Microsoft.TeamFoundation.Client', 'Microsoft.TeamFoundation.Common', 'Microsoft.TeamFoundation.WorkItemTracking.Client' |
ForEach-Object {
Add-Type -AssemblyName "$_, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
}
[Microsoft.TeamFoundation.Client.TfsTeamProjectCollection] $tfs = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($CollectionUrl)
[Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore]$wis = `
New-Object -TypeName Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore `
-ArgumentList ($tfs, [Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStoreFlags]::BypassRules)
[string] $WIQL = "SELECT [System.Id], [System.Links.LinkType], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags]
FROM WorkItemLinks
WHERE ([Source].[System.TeamProject] = '$projectName')
And ([System.Links.LinkType] = 'System.LinkTypes.Hierarchy-Reverse')
ORDER BY [System.Id] mode(MayContain)"
$query = New-Object "Microsoft.TeamFoundation.WorkItemTracking.Client.Query" -ArgumentList $wis, $WIQL
$workItemLinkInfo = $query.RunLinkQuery()
$workItemLinkInfo | out-gridview
为什么 WIQL 在通过 API 传递时的行为与通过 UI 执行时不同?或者有人可以看到我要去哪里错了吗?