0

我想做什么

我是 Azure DevOps 服务用户。
有没有办法通过 Azure Boards 查询计算工作项中日期之间的持续时间?
或者,日期之间是否有任何天数字段?

例如,我想显示激活日期和创建日期之间的持续时间超过 5 天的工作项列表。

我试过的

我试过Activated Date > [Field] Created Date + 5但结果是
TF51005: The query references a field that does not exist. The error is caused by Created Date + 5.

我想知道是否只有支持的宏,如 @Today 或 @StartOfDay 才能用于查询编辑器中的计算。
我阅读了以下官方参考资料,但无法找到解决方案。

如果通过查询没有解决方案,欢迎提出其他想法。

4

1 回答 1

1

这不能通过查询来完成。您将需要使用 rest api 作为解决方法。但它很复杂,可能无法达到与Query相同的效果。

1,首先您可以使用工作项wiql api查询那些[Microsoft.VSTS.Common.ActivatedDate] > [System.CreatedDate]获取工作项ID的项目

2、然后您可以使用工作项列表api列出上述步骤查询到的那些工作项的字段详细信息。

3、最后使用powershell脚本过滤那些在Activated Date和Created Date之间的持续时间超过5天的工作项

请在 powershell 脚本中查看以下示例:

对于 {PAT},请在此处查看以获取个人访问令牌以在 API 调用下进行身份验证

# 查询那些 [Microsoft.VSTS.Common.ActivatedDate] > [System.CreatedDate] 的项目并获取工作项的 id

$qurl =  "https://dev.azure.com/{org}/{proj}/_apis/wit/wiql?api-version=5.1"

$WIQL_query = "Select [System.Id], [System.Title], [System.State],[Microsoft.VSTS.Common.ActivatedDate],[System.CreatedDate] From WorkItems Where [Microsoft.VSTS.Common.ActivatedDate] > [System.CreatedDate]"
$body = @{ query = $WIQL_query }
$bodyJson=@($body) | ConvertTo-Json

$pat = {PAT}

$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($pat)"))

$result = Invoke-RestMethod -Uri $qurl -Headers @{authorization = "Basic $base64AuthInfo"} -Method post -ContentType "application/json" -Body $bodyJson

# 获取工作项 ID

$ids = $result.workItems | select id | foreach{ $_.id }
$id= '{0}' -f ($ids -join ",")

# 使用工作项列表 api 列出这些工作项的字段详细信息

$url = "https://dev.azure.com/{ORG}/{PROJ}/_apis/wit/workitems?ids=$($id)&api-version=5.1"

$result1 = Invoke-RestMethod -Uri $url -Headers @{authorization = "Basic $base64AuthInfo"} -Method get

# 过滤Activated Date和Created Date之间持续时间超过5天的工作项。

$result1.value.fields | where {[datetime]$_.'Microsoft.VSTS.Common.ActivatedDate' -gt ([datetime]$_.'System.CreatedDate').AddDays(5)} 

以上希望有帮助!

于 2020-02-26T07:09:30.363 回答