How to copy a work item and its tasks

前端 未结 2 1738
独厮守ぢ
独厮守ぢ 2021-01-17 09:41

I would like to make a copy of a work item and all of its task.

I\'m using this version of the product: 11.0.50727.1 I\'m using Scrum 2.0 template for the project

2条回答
  •  天涯浪人
    2021-01-17 10:18

    I see by the date this question is a little more than 2 years old. Excel would not create the parent links for me. Here is my Powershell solution:

    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
        }
    }
    

提交回复
热议问题