2016-10-19 9 views
-1

Я хотел извлечь данные из VSTS с использованием «WIQL» и сделать некоторые отчеты с этими данными. 1) Может кто-нибудь, пожалуйста, дайте мне знать, можно ли использовать «WIQL» в PowerShell? Если да, сообщите мне, где я могу найти некоторые образцы или демонстрации для этого?Процедура написания и выполнения пользовательских запросов для служб Visual Studio Team Services (VSTS) с использованием языка запросов рабочих элементов (wiql)

2) Также есть ли какие-либо другие клиентские инструменты, которые поддерживают «WIQL», чтобы выполнить пользовательский запрос в VSTS. Если да, сообщите мне, где я могу найти демо или некоторые образцы по этому поводу?

+0

Вы решаете эту проблему с моим решением? –

+0

@ starain..yes. Я отметил это как ответ. Спасибо – Srini33

ответ

1

Да, в PowerShell можно использовать WIQL, простой способ заключается в том, что вы можете позвонить Work Item Query REST API с помощью PowerShell.

Например:

$vstsAccount = "XX" 
$projectName = "XX" 
$user = "" 
$token = "personal access token" 
Function QueryWorkItem{ 



# Base64-encodes the Personal Access Token (PAT) appropriately 
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token))) 

# Construct the REST URL to obtain Build ID 
$uri = "https://$($vstsAccount).visualstudio.com/$($projectName)/_apis/wit/wiql?api-version=1.0" 


$body = "{ 
    'query':'Select [System.Id],[System.Title] From WorkItems Where [System.Id] = 123' 
}" 

# Invoke the REST call and capture the results (notice this uses the PATCH method) 
$result = Invoke-RestMethod -Uri $uri -Method Post -ContentType "application/json" -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Body $body 

Write-Output ("work item title: '$($result.WorkItems[0].URL)'") 

    } 

    QueryWorkItem 

Более подробную информацию, вы можете обратиться к this статье.

Во-вторых, вы можете создать приложение самостоятельно, например консольное приложение с языком C#.

  1. Установите Microsoft.TeamFoundationServer.ExtendedClient Пакет
  2. Простой C# код

:

var u = new Uri("https://XXX.visualstudio.com"); 
       VssCredentials c = new VssCredentials(new Microsoft.VisualStudio.Services.Common.WindowsCredential(new NetworkCredential("user name", "password"))); 
       var connection = new VssConnection(u, c); 
       var workitemClient = connection.GetClient<WorkItemTrackingHttpClient>(); 

       var result = workitemClient.QueryByWiqlAsync(new Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.Wiql() { Query= "Select [System.Id],[System.Title] From WorkItems Where [System.Id] = 123" },"Scrum2015").Result; 
       Console.WriteLine(result.WorkItems.First().Url); 

Update 1:

ССТ/VSTS SDK или расширить SDK можно использовать в PowerShell. Например:

if((Get-PSSnapIn -Name Microsoft.TeamFoundation.PowerShell -ErrorAction SilentlyContinue) -eq $null) 
{ 
    Add-PSSnapin Microsoft.TeamFoundation.PowerShell 
} 
$Tfs2015AssembliesPath="[vs Installation path]\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer" 
Add-Type -Path "$Tfs2015AssembliesPath\Microsoft.TeamFoundation.Client.dll" 
Add-Type -Path "$Tfs2015AssembliesPath\Microsoft.TeamFoundation.Common.dll" 
Add-Type -Path "$Tfs2015AssembliesPath\Microsoft.TeamFoundation.Build.Client.dll" 
Add-Type -Path "$Tfs2015AssembliesPath\Microsoft.TeamFoundation.Build.Common.dll" 
Add-Type -Path "$Tfs2015AssembliesPath\Microsoft.TeamFoundation.Git.Client.dll" 
Add-Type -Path "$Tfs2015AssembliesPath\Microsoft.TeamFoundation.SourceControl.WebApi.dll" 
#Add-Type -Path "$Tfs2015AssembliesPath\Microsoft.TeamFoundation.TestManagement.Client.dll" 
Add-Type -Path "$Tfs2015AssembliesPath\Microsoft.TeamFoundation.VersionControl.Client.dll" 
Add-Type -Path "$Tfs2015AssembliesPath\Microsoft.TeamFoundation.WorkItemTracking.Client.dll" 
Function GetWorkItems{ 
    param([string]$teamProjectName,[string]$address) 
    $credentials = New-Object System.Net.NetworkCredential("[user name]", "[password]") 
    $tfsCollection = New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection((New-Object System.URI($address))) 
    $wis = $tfsCollection.GetService([Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore]) 
    $wiqlQuery = "SELECT [System.ID], [System.WorkItemType], [System.Title], [System.AssignedTo], [System.State] FROM WorkItems WHERE [System.TeamProject] = 'Scrum2015' AND [State] = 'New' AND [System.WorkItemType] in ('Bug','User Story') ORDER BY [System.ID]"; 
    $witCollection = $wis.Query($wiqlQuery); 

# add logical to export to excel. 
    Foreach($witItem in $witCollection) 
     { 

      Write-Host $witItem.Title 
     } 
} 
GetWorkItems "[project name]" "[tfs/vsts address]" 
+0

Спасибо за предоставление некоторой идеи о том, как написать wiql в Powershell. – Srini33

+0

@ starain..Я пробовал вышеуказанный код в Powershell, но я заметил, что данные не извлекаются в powershell, а вместо этого отправляются в URL. (1) Есть ли способ извлечь данные в объект powershell и выполнить некоторые операции над этим объектом? Я хотел извлечь список рабочих элементов (например, список ошибок, эпос и т. Д.) Конкретного командного проекта в файл .CSV или .XLS. Это возможно? – Srini33

+0

@ Srini33 Да, возможно, я обновил свой ответ, вы можете проверить его. Кстати, если у вас есть дополнительная проблема или вопрос, который напрямую не связан с оригинальной проблемой, вы можете открыть новый поток. –