【问题标题】:TFS "Copy" value from one field to anotherTFS 将值从一个字段“复制”到另一个字段
【发布时间】:2015-12-04 06:52:44
【问题描述】:

我需要从 PlainText -> String 更改工作项字段。 由于我无法更改工作项上的类型,因此创建一个新字段并从另一个字段更新它的值是我的方法。

我已尝试使用 TFS/Web 中的“批量编辑选定工作项..”,但我不确定您是否可以引用该模板中的另一个字段值。

如何设置 [Work Item].[FieldNew].Value = [Work Item].[FieldOriginal].Value ??

这甚至可以在不使用 TFD API 的情况下实现吗?

我需要将项目字段类型从纯文本更改为字符串的原因是我想使用列运算符进行查询以测试该字段是否具有值。

对于纯文本字段,唯一允许的运算符是包含/不包含。我可以覆盖它以允许 ">" 吗?

【问题讨论】:

    标签: tfs workitem


    【解决方案1】:

    KMoraz 的解决方案对我也不起作用,因为 HTML 字段在导出到 Excel 时变为只读。因此,我使用 Powershell 脚本将一个字段的值复制到另一个字段(只需将“$wiFieldNewValue”变量替换为您要复制的源字段)

    代码参考:Bulk update TFS work items using Powershell

    Link to code

    嵌入代码:

    #This script sets a specific field to a specified value for all work items in a specific project
    
    Function LoadTfsAssemblies() {
    Add-Type –AssemblyName "Microsoft.TeamFoundation.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    Add-Type -AssemblyName "Microsoft.TeamFoundation.WorkItemTracking.Client, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    
    }
    
    ##### SETTINGS
    #The TFS Team Project Collection to connect to
    $tfsUri = "http://tfsserver:8080/tfs/DefaultCollection"
    
    #The TFS Team Project from which to select the work items
    $tfsProject = "Test Project"
    
    #The work item type of the work items to update
    $wiType = "Test Case"
    
    #The reference name of the field to update
    $wiFieldRefName = "Microsoft.VSTS.Common.Priority"
    
    #The value to set the field to
    $wiFieldNewValue = "1"
    ##### END SETTINGS
    
    LoadTfsAssemblies
    $tfs = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($tfsUri)
    $tfs.EnsureAuthenticated()
    if($tfs.HasAuthenticated)
    {
    Write-Output "Successfully authenticated to TFS server [$tfsUri]"
    $workItemStore = $tfs.GetService([Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemStore])
    $query = "SELECT [System.Id], [System.Title] FROM WorkItems WHERE [System.TeamProject] = '{0}' AND [System.WorkItemType] = '{1}'" -f $tfsProject, $wiType
    Write-Output("Using query [$query]")
    
    $workItems = $workItemStore.Query($query)
    Write-Output("Going to update [{0}] work items" -f $workItems.Count)
    $successCount = 0
    $failureCount = 0
    ForEach($wi in $workItems) {
    Write-Output("Updating work item [{0}]" -f $wi.Title)
    
    try {
    $wi.Open()
    $wi.Fields[$wiFieldRefName].Value = $wiFieldNewValue
    Write-Output("Set field [{0}] to [{1}]" -f $wiFieldRefName, $wiFieldNewValue)
    $validationMessages = $wi.Validate()
    
    if($wi.IsValid() -eq $true)
    {
    $wi.Save()
    Write-Output("Successfully updated work item [{0}]" -f $wi.Title)
    $successCount++
    } else {
    Write-Error("Work item is not valid!")
    ForEach($validationMessage in $validationMessages)
    {
    Write-Error("Error: {0}" -f $validationMessage)
    }
    $failureCount++
    }
    } catch {
    Write-Error("Couldn't set field [{0}] to [{1}] for work item [{2}]" -f $wiFieldRefName,$wiFieldNewValue,$wi.Title)
    Write-Error $_
    $failureCount++
    }
    }
    
    Write-Output("Finished!")
    Write-Output("Successfully updated: {0}" -f $successCount)
    Write-Output("Failed to update: {0}" -f $failureCount)
    
    } else {
    Write-Error("Couldn't authenticate to TFS server [$tfsUri]")
    }
    

    【讨论】:

      【解决方案2】:

      我无法通过 Excel。

      1. 创建一个新旧字段列都可见的查询。
      2. 将查询导出到 Excel。
      3. 将旧字段列中的数据复制并粘贴到新字段中。
      4. 在 Excel 中,从“团队”菜单中单击“发布”以更新 TFS 中的更改。

      【讨论】:

      • 我遇到了同样的问题。但是,我可以用上述解决方案解决它。我的旧字段是“字符串”,字段类型是“HTML”。此新字段在导出到 TFS 时变为只读。任何想法都非常受欢迎!
      猜你喜欢
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多