2012-06-14 3 views
5

작업 항목 필드를 PlainText -> String으로 변경해야했습니다. 작업 항목의 유형을 변경할 수 없기 때문에 새 필드를 만들고 다른 필드에서 값을 업데이트하는 것이 내 접근 방식입니다.한 필드에서 다른 필드로 TFS "복사"값

TFS/Web에서 "일괄 편집 선택한 작업 항목 .."을 시도했지만 해당 템플릿의 다른 필드 값을 참조 할 수 있는지 확실하지 않습니다.

[작업 항목]. [FieldNew] .Value = [작업 항목]. [FieldOriginal] .Value ??

TFD API를 사용하지 않아도 가능합니까?

enter image description here

내가 문자열 일반 텍스트에서 항목 필드 형식을 변경해야하는 이유는 내가 필드 값을 가지고 아닌지 테스트하는 열 연산자 쿼리를 갖고 싶어한다는 것입니다.

plainText 필드의 경우 허용되는 유일한 연산자는 포함/포함되지 않음입니다. ">"를 허용하려면 이것을 무시해도됩니까? enter image description here

답변

2

Excel을 통해 가능합니다.

  1. 이전 필드 열과 새 필드 열을 모두 표시하는 쿼리를 만듭니다.
  2. 쿼리를 Excel로 내 보냅니다.
  3. 이전 필드 열의 데이터를 복사하여 새 필드에 붙여 넣습니다.
  4. Excel에서 팀 메뉴에서 게시를 클릭하여 TFS의 변경 사항을 업데이트합니다.
+1

나는 동일한 문제가있었습니다. 하지만, 위의 솔루션으로 해결할 수 있습니다. 내 이전 필드는 "문자열"이고 필드 유형은 "HTML"입니다. 이 새 필드는 TFS로 내보낼 때 읽기 전용이됩니다. 어떤 아이디어라도 환영받을 만하다! –

4

Excel로 내보낼 때 HTML 필드가 읽기 전용이되기 때문에 KMoraz의 솔루션이 나에게 적합하지 않습니다. Bulk update TFS work items using Powershell

Link to code

: 따라서, 나는

코드 참조 (바로 소스 필드는 복사와 "$ wiFieldNewValue"변수를 대체 할) 다른에 하나 개의 필드의 값을 복사 할 PowerShell 스크립트를 사용 포함 된 코드 :

#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]") 
} 
관련 문제