Вызов BuildHttpClientBase.GetBuildWorkItemsRefsAsync не возвращает рабочие элементы, созданные пользователями с доступом заинтересованных сторон - PullRequest
0 голосов
/ 28 августа 2018

Я использую пакет Nuget Microsoft.TeamFoundationServer.Client для получения списка рабочих элементов, которые были связаны с некоторыми сборками. Для этого я использую следующий код:

using Microsoft.VisualStudio.Services.Common;
using Microsoft.VisualStudio.Services.WebApi;
using Microsoft.TeamFoundation.Build.WebApi;

public async Task<IEnumerable<ResourceRef>> GetBuildWorkItems(string vstsUrl, string teamProjectName, int buildId, string pat)
{
    VssConnection connection = new VssConnection(new Uri(vstsUrl), new VssBasicCredential(string.Empty, pat));
    using (var buildClient = connection.GetClient<BuildHttpClient>())
    {
        var workItems = await buildClient.GetBuildWorkItemsRefsAsync(teamProjectName, buildId);                
        return workItems;
    }
}

Это работает нормально, за исключением случаев, когда рабочие элементы создаются пользователем с уровнем доступа заинтересованных сторон. В частности, эти рабочие элементы не возвращаются методом GetBuildWorkItemsRefsAsync.

Это задумано? Есть ли что-то, что я могу настроить в настройках VSTS Admin для заинтересованных сторон, чтобы этого не произошло?

Просто для пояснения, я использую TFVC вместо Git в своем командном проекте. Я не знаю, относится ли это к этому вопросу.

1 Ответ

0 голосов
/ 30 августа 2018

Попробовал метод GetBuildWorkItemsRefsAsync и не выяснил проблему.

Однако вы можете просто использовать REST API для получения списка рабочих элементов, которые были связаны с конкретной сборкой:

GET https://{accountName}.visualstudio.com/{project}/_apis/build/builds/{buildId}/workitems?api-version=4.1

Подробнее см. Сборки - Получить рабочие элементы сборки .

PowerShell, например:

Param(
   [string]$collectionurl = "https://{account}.visualstudio.com",
   [string]$project = "ProjectName",
   [string]$BuildID = "283",
   [string]$user = "username",
   [string]$token = "password"
)

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

$WITbaseUrl = "$collectionurl/$project/_apis/build/builds/$($BuildID)/workitems"

#Response           
$WITresponse = (Invoke-RestMethod -Uri $WITbaseUrl -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}).value

$WITrequests = @()

foreach($WITrequest in $WITresponse){

    $customObject = new-object PSObject -property @{
          "WorkitemID" = $WITrequest.id
          "WorkitemURL" = $WITrequest.url
        } 

    $WITrequests += $customObject       
}

$WITrequests | Select `
               WorkitemID,
               WorkitemURL
...