2012-06-14 10 views
5

作業項目フィールドをPlainText - > Stringに変更する必要がありました。 作業項目の型を変更できなかったので、新しい項目を作成し、その項目の値を他の項目から更新することは私のアプローチです。TFSフィールド間で値をコピーする

TFS/Webから「Bulk Edit Selected Work Items ..」を試しましたが、そのテンプレートの別のフィールド値を参照できるかどうかはわかりません。

[ワークアイテム]をどのように設定できますか。[FieldNew]。値= [ワークアイテム]。[FieldOriginal]。値??

これはTFD APIを使用しなくても可能ですか?

enter image description here

私はStringに平文から項目フィールドタイプを変更する必要がある理由は、私がフィールドに値を持っているかどうかを調べるために、列演算子を使用してクエリを持つようにしたいということです。

plainTextフィールドの場合、許可される演算子はContains/Does Not Containです。 ">"を許可するためにこれを上書きすることはできますか? enter image description here

答えて

2

Excel経由でご利用いただけます。

  1. 古いフィールド列と新しいフィールド列の両方を表示するクエリを作成します。
  2. クエリをExcelにエクスポートします。
  3. 古いフィールドの列から新しいフィールドにデータをコピーして貼り付けます。
  4. Excelでは、[チーム]メニューの[発行]をクリックして、TFSの変更を更新します。
+1

私は同じ問題がありました。しかし、私は上記の解決策でそれを解決することができます。私の古いフィールドは "String"で、フィールドタイプは "HTML"です。この新しいフィールドは、TFSにエクスポートされると読み取り専用になります。どんなアイデアでも大歓迎です! –

4

ExcelにエクスポートしたときにHTMLフィールドが読み取り専用になるため、KMorazのソリューションは私にとってはうまくいきません。したがって、私は

(ちょうどあなたがコピーしているソースフィールドに「$ wiFieldNewValue」変数を置き換える)他に一つのフィールドの値をコピーするPowerShellスクリプトを使用するコードの参照: 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]") 
} 
関連する問題