2012-06-14 19 views
5

Necesitaba cambiar un campo de elemento de trabajo de Texto sin formato -> Cadena. Como no pude cambiar el tipo en el elemento de trabajo, crear un nuevo campo y actualizar su valor desde el otro campo es mi enfoque.TFS "Copiar" el valor de un campo a otro

He intentado con "Edición masiva de elementos de trabajo seleccionados ..." desde TFS/Web, pero no estoy seguro de si puede hacer referencia a otro valor de campo en esa plantilla.

¿Cómo puedo establecer [Objeto de trabajo]. [FieldNew] .Value = [Objeto de trabajo]. [FieldOriginal] .Value ??

¿Esto es posible incluso sin tener que usar la API TFD?

enter image description here

La razón por la que tengo que cambiar el tipo de campo elemento de texto plano de cuerdas es que yo quiero tener una consulta con un operador de la columna para poner a prueba si el campo tiene valor o no.

Para un campo plainText, el único operador permitido es Contiene/No contiene. ¿Puedo anular esto para permitir un ">"? enter image description here

Respuesta

2

No es posible a través de Excel.

  1. Cree una consulta con columnas de campo nuevas y viejas visibles.
  2. Exportar la consulta a Excel.
  3. Copie y pegue los datos de la columna de campo anterior en el campo nuevo.
  4. En Excel, en el menú Equipo, haga clic en Publicar para actualizar los cambios en TFS.
+1

Tuve el mismo problema. Pero, podría resolverlo con la solución anterior. Mi campo anterior es "Cadena" y el tipo de campo es "HTML". Este nuevo campo se convierte en de solo lectura cuando se exporta a TFS. ¡Cualquier idea es más que bienvenida! –

4

La solución de KMoraz tampoco me funciona, porque el campo HTML se convierte en de solo lectura cuando se exporta a Excel. Por lo tanto, he usado un script de PowerShell para copiar el valor de un campo a otro (basta con sustituir la variable "$ wiFieldNewValue" con el campo de origen está copiando)

referencia Código: Bulk update TFS work items using Powershell

Link to code

Código incrustado:

#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]") 
} 
Cuestiones relacionadas