2017-01-11 18 views
0

Когда мы клонируем любой инцидент (WorkItem) в TFS, все копируется, кроме задач, которые уже связаны с исходным инцидентом. Как мы копируем задачу? У меня отсутствует какой-либо рабочий процесс? Нужно ли добавить для этого расширение/API?Как скопировать задачи при клонировании Инциденты в TFS2015?

+0

Какой у вас случай использования, зачем вы хотите это сделать? Встроенный клон не поддерживает этот афайк. Но вы можете делать множество пользовательских вещей в TFS с относительной легкостью с помощью API REST: https://www.visualstudio.com/en-us/docs/integrate/api/overview – TToni

+0

Был ли мой ответ решен ваш вопрос? –

+0

Я не пробовал сценарий PS cuz Я не знаю. Однако, используя C#, я идентифицирую связанный инцидент (исходный инцидент) и клонирую все его ручные задачи на вновь созданный инцидент. Таким образом, я частично получаю то, что мне нужно. –

ответ

0

Когда вы создаете копию рабочего элемента, вы можете скопировать некоторые ссылки на существующий элемент, например, тестовые примеры, которые выстроились под рабочий элемент. Однако вы не можете создать копию дочерних элементов, таких как задачи.

Например: Вы создали элемент отставания продукта и назначили задачи для элемента отставания продукта. Когда вы выполняете Создайте копию рабочего элемента, он не копирует «задачи» и не связывает их с скопированным рабочим элементом.

Там было родственный UserVoice, вы можете проголосовать за это, чтобы получить больше внимания:

Сделать WorkItem шаблоны гражданами первого сорта

https://visualstudio.uservoice.com/forums/330519-team-services/suggestions/2073749-make-workitem-templates-first-class-citizens

Сейчас вы можете попробовать использовать excel и PS-скрипт для достижения желаемого. Более подробную информацию вы можете найти на этом аналогичном вопрос: How to copy a work item and its tasks

if ((Get-PSSnapin -Name Microsoft.TeamFoundation.PowerShell -ErrorAction SilentlyContinue) -eq $null) 
{ 
    Add-PSSnapin Microsoft.TeamFoundation.PowerShell 
} 

[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Client") 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Client") 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.Build.Common") 
[void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.TeamFoundation.WorkItemTracking.Client") 

# Connect to TFS and get Work Item Store. 
$tfsCollectionUrl = "https://tfs.CORP.com/tfs/group" 
$tfs = Get-TfsServer -name $tfsCollectionUrl 
$ws = $tfs.GetService([type]"Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore") 

$storyID = 15211 # ID of the story you want to copy. 

$story = $ws.GetWorkItem($storyID) 
Write-Host "Cloning User Story: " + $story.Title 

#Clone User Story 
$cloneStory = $story.Copy() 
($story, $cloneStory) 
$cloneStory.Title = "COPY : " + $story.Title 

# cloneStory will not have links to all the tasks that were linked to the orginal story. 
# cloneStory will have two links, one to the same "feature" that the orginal was linked to, and one to the story it was cloned from. 
$cloneStory.Links 

# cloneStory will have 0 for an ID, because it has not yet been saved. 
$cloneStory.Id 
#$cloneStory.Save() 
# cloneStory will now have an ID. 
$cloneStory.Id 
$parentID = $cloneStory.Id # Parent ID will be used to link new cloned tasks to this story. 

$links = $story.Links 

# Define a Link Type to be used in the loop. 
$linkType = $ws.WorkItemLinkTypes[[Microsoft.TeamFoundation.WorkItemTracking.Client.CoreLinkTypeReferenceNames]::Hierarchy] 


foreach ($link in $links) 
{ 

    $itemID = $link.RelatedWorkItemId 
    #$itemID 

    $item = $ws.GetWorkItem($itemID) 

    if (($item.Type).Name -eq "Task") 
    { 
     $reportLine = "Cloning Task ID:{0} {1}" -f $itemId, $item.Title 
     Write-Host $reportLine 
     # Clone the Task 
     # Create the Parent Link object 
     # Add the Parent Link to Cloned Task 
     # Save New Cloned Task 

     $cloneTask = $item.Copy() 
     $cloneTask.Title = "COPY : " + $item.Title 
     $parentLink = new-object Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemLink($linkType.ReverseEnd, $parentID) 
     $cloneTask.WorkItemLinks.Add($parentLink) 
     $cloneTask.save() 
     $cloneTask 
    } 
    else 
    { 
     $reportLine = "Skipping: {0} is not a Task, it is a {1}" -f $item.Title, ($item.Type).Name 
     Write-Host $reportLine 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^