获取当天所有工作项id状态
Get all the work item id states in the same day
我正在处理一些工作项 ID 数据,但我需要工作项 ID 的所有状态和更改日期。当我进入 Analytics View 并创建一个 table 时,它只显示当天的最后状态,而不是所有状态(所以如果他们经常改变状态同一天,我只得到最后一个)。
在 Azure Devops 查询中,我们不支持在同一天获取所有工作项 ID 状态。但是我们可以使用 Rest Api 来帮助我们。
首先,我们需要使用API:Queries – Get来帮助我们找到在同一天更改状态的所有工作项。
然后,我们需要使用 Api: Revisions – List 来帮助我们找到所有状态历史,然后过滤我们需要的状态。
这是演示ps脚本来帮助你(在我的测试中,我使用当前数据,你也可以客户你喜欢的时间)
$token = "XXXXXXX"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$urlIds = "https://dev.azure.com/{organization}/{ProjectName} /_apis/wit/wiql?api-version=6.0"
$currentTime = Get-Date -Format 'yyyy-MM-dd'
$JSON = @'
{
"query": "select [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags] from WorkItems where [System.TeamProject] = @project and [System.WorkItemType] <> '' and [Microsoft.VSTS.Common.StateChangeDate] = @today"
}
'@
$response2 = Invoke-RestMethod -Uri $urlIds -Headers @{Authorization = "Basic $token"} -Method Post -Body $JSON -ContentType application/json
$ids = $response2.workItems
foreach($id in $ids.id){
$id.ToString()
$url = "https://dev.azure.com/{organization}/{ProjectName}/_apis/wit/workItems/"+$id+"/revisions?api-version=6.0"
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
$Test = $response.value.fields
foreach($fields in $Test){
$date = $fields."System.ChangedDate"
$clean = $date -replace '(T|Z),'
$dateObject = [datetime]$clean
If((get-date $currentTime) -lt (get-date $dateObject)){
$fields."System.State".ToString()
$dateObject.ToString('yyyy-MM-dd HH:mm:ss')
}
}
}
这是测试结果,格式为(Workitem ID, states, change states time):
我正在处理一些工作项 ID 数据,但我需要工作项 ID 的所有状态和更改日期。当我进入 Analytics View 并创建一个 table 时,它只显示当天的最后状态,而不是所有状态(所以如果他们经常改变状态同一天,我只得到最后一个)。
在 Azure Devops 查询中,我们不支持在同一天获取所有工作项 ID 状态。但是我们可以使用 Rest Api 来帮助我们。
首先,我们需要使用API:Queries – Get来帮助我们找到在同一天更改状态的所有工作项。 然后,我们需要使用 Api: Revisions – List 来帮助我们找到所有状态历史,然后过滤我们需要的状态。
这是演示ps脚本来帮助你(在我的测试中,我使用当前数据,你也可以客户你喜欢的时间)
$token = "XXXXXXX"
$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))
$urlIds = "https://dev.azure.com/{organization}/{ProjectName} /_apis/wit/wiql?api-version=6.0"
$currentTime = Get-Date -Format 'yyyy-MM-dd'
$JSON = @'
{
"query": "select [System.Id], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State], [System.Tags] from WorkItems where [System.TeamProject] = @project and [System.WorkItemType] <> '' and [Microsoft.VSTS.Common.StateChangeDate] = @today"
}
'@
$response2 = Invoke-RestMethod -Uri $urlIds -Headers @{Authorization = "Basic $token"} -Method Post -Body $JSON -ContentType application/json
$ids = $response2.workItems
foreach($id in $ids.id){
$id.ToString()
$url = "https://dev.azure.com/{organization}/{ProjectName}/_apis/wit/workItems/"+$id+"/revisions?api-version=6.0"
$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json
$Test = $response.value.fields
foreach($fields in $Test){
$date = $fields."System.ChangedDate"
$clean = $date -replace '(T|Z),'
$dateObject = [datetime]$clean
If((get-date $currentTime) -lt (get-date $dateObject)){
$fields."System.State".ToString()
$dateObject.ToString('yyyy-MM-dd HH:mm:ss')
}
}
}
这是测试结果,格式为(Workitem ID, states, change states time):