Я хотел бы сделать копию рабочего элемента и все его задачи.
Я использую эту версию продукта: 11.0.50727.1 Я использую шаблон Scrum 2.0 для проекта
Если это возможно, как я могу это сделать?
Я хотел бы сделать копию рабочего элемента и все его задачи.
Я использую эту версию продукта: 11.0.50727.1 Я использую шаблон Scrum 2.0 для проекта
Если это возможно, как я могу это сделать?
Вы пробовали Excel? Это ваш лучший друг при массовом редактировании рабочих элементов. Вы можете скопировать/вставить несколько рабочих элементов. выбрав все столбцы, кроме столбца ID. Скопируйте их, а затем вставьте их в нижней части открытого запроса в Excel.
Вам нужно убедиться, что вы используете запрос на основе дерева и что все столбцы, которые вы хотите дублировать, являются частью столбцов запросов.
Тем не менее вы можете потерять форматирование HTML-типизированных полей.
Мне было бы интересно узнать, почему вы хотите, чтобы массовые копии элементов Backlog продукта со всеми их задачами, с точки зрения схватки, я действительно не вижу, как это будет иметь смысл.
Я вижу к дате этот вопрос чуть больше двух лет. Excel не создавал бы родительские ссылки для меня. Вот мое решение Powershell:
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
}
}