2015-12-02 40 views

回答

3

好工作项查询导出到Excel,找到一种方式来完成这项工作。我再看看API文档。页面https://www.visualstudio.com/en-us/docs/integrate/api/wit/overview帮助我。你首先需要做

GET https://{account}.visualstudio.com/defaultcollection/{project}/_apis/wit/queries/{folderpath}?api-version={version}&$expand=wiql 

从你需要得到wiql的一部分,这是实际的查询产生的JSON。在此之后,你需要做一个

POST https://{account}.visualstudio.com/defaultcollection/{project}/_apis/wit/wiql?api-version={version} 

在身体与{“查询” =“YOURQUERY”}

的JSON因此,您会收到包含所有工作项的网址/ ID的JSON。你需要通过他们去,并通过

GET URL?$expand=all 

通知查询每个单独的工作项:加$扩大=所有只有当你需要的关系和附件吗?。 我把一些东西放在一起用于PowerShell。注意:我决定对查询进行硬编码,并删除错误处理以使其缩短一点。

function loadJsonFile($fileName) 
{ 
    return ConvertFrom-Json "$(Get-Content $fileName)" 
} 
function getLastItemFromURL($url) 
{ 
    $absPath = ([System.Uri]$url).AbsolutePath 
    $lastSlash = $absPath.LastIndexOf("/") 
    $absPath.Substring($lastSlash+1) 
} 
function getWorkItemId($url) 
{ 
    getLastItemFromURL($url) 
} 

# make sure you enabled alternative credentials and access for them 
# you can get the value for YOURCODE i.e. via Fiddler 
$headers = @{Authorization="Basic YOURCODE"} 

# before this you would need to find the WIQL of the query; left to you 
$body = @{ 
    "query" = "THEQUERYFROMTHEJSON" 
} 
$bodyJson = $body | ConvertTo-Json 

Invoke-RestMethod -method Post -ContentType application/json -Uri "https://{account}.visualstudio.com/defaultcollection/{project}/_apis/wit/wiql?api-version=1.0" -Headers $headers -Body $bodyJson -OutFile workitems.json 

$workItemsJson = $(loadJsonFile workitems.json) 
$workItems = $(foreach ($relation in $workItemsJson.workItemRelations) 
{ 
    $relation.target.url 
    $relation.source.url 
}) | select -Unique | sort 

echo "Going to download the following ids from $(getWorkItemId $workItems[0])-$(getWorkItemId $workItems[-1])" 

# download the workitems 
foreach($workItemUrl in $workItems) 
{ 
    $workItemId = getWorkItemId $workItemUrl 
    echo "Download ID: $workItemId" 

    $workItemUrl = "$workItemUrl`?`$expand=all" 
    $fileName = "workitem_$workItemId.json" 
    Invoke-RestMethod -ContentType application/json -Uri "$workItemUrl" -Headers $headers -OutFile "$fileName" 

    # download attachments 
    $workItemJson = $(loadJsonFile "$fileName") 
    foreach($relation in $workItemJson.relations) 
    { 
     if($relation.rel -eq "AttachedFile") 
     { 
      $fileUrl = $relation.url 
      Invoke-WebRequest $fileUrl -Headers $headers -OutFile $(getLastItemFromURL $fileUrl) 
     } 
    } 
} 
1

你可以使用的Team Foundation加载到Excel中描述here

+0

我需要一些你可以在powershell脚本中执行的东西。理想情况下没有安装Excel。 – SACO