ALM Team Foundation Server
▌背景
當升級TFS之後, 如果有客製化的欄位必須更新到新的WIT (Work Item Type)的其他欄位(也有可能是新的客製化欄位)。 這時候手動更新TFS Database是最快的方式。
PS. 當然MSDN是極力強調避免手動更改Database … 不過我想不到更快的方式了。
▌環境
l Windows2008 R2
l Team Foundation
Server 2013 Update 5
l SQL SERVER
Management Studio 2012
|
▌Steps
重點在於以下幾個表格 (位於 TFS_XXXXCollection 資料庫)
Table Name
|
描述
|
[dbo].[Fields]
|
欄位明細表
|
[dbo].[WorkItemsAre]
|
Work Item 的屬性
|
[dbo].[WorkItemsLatest]
|
Work Item 的最後屬性
|
We
update the WorkItemsAre table during a save.
At this point the server does a rules evaluation to check whether any
of the changes made are valid (for example state transitions). When this rule check or authorization
succeeds, the changes in the WorkItemsAre table are copied to the
WorkItemLatest table (which is why they look identical).
|
亦即在新增/更新Work Item時, TFS會先儲存在WorkItemsAre,驗證正確後,再更新至WorkItemsLatest。
所以如果您要手動更改Wotk Item的欄位值,必須將WorkItemsAre & WorkItemsLatest 兩個同時更新。 如果只更新WorkItemsLatest, 在介面上的確會看到更新後的值,可是一儲存後,未在介面上更動的值又會被WorkItemsAre裡面的欄位值所覆蓋。
▋Sample SQL
底下的例子是我在TFS Migration之後,複製舊的工作成新的工作,再使用以下SQL將新工作裡面的新欄位值用舊工作的一些欄位取代。
Begin transaction;
UPDATE a
SET
--Fld10283=b.Fld10041,
--Fld10276=b.Fld10046,
--Fld10274=b.Fld10045,
--Fld10275=b.Fld10044,
--Fld10277=b.Fld10029,
--Fld10279=CASE WHEN b.Fld10031='Yes' THEN 'true'
--
WHEN b.Fld10031='No' THEN 'false'
-- ELSE NULL END,
----Fld10282=b.Fld10032
--Fld10278=b.Fld10030,
--Fld10280=b.Fld10033,
--Fld10281=b.Fld10034,
Fld10289=b.Fld10157,
Fld10288=b.Fld10158,
Fld10287=b.Fld10055
FROM WorkItemsLatest
a
INNER JOIN
(
select *
from WorkItemsLatest
where ID<35774
AND [Work
Item Type]='工作'
) b
ON a.Title=b.Title and a.ID!=b.ID
where a.ID>=35774
AND a.[Work Item Type]='需求'
commit;
|
▋是否可以直接調整Work Item所屬的Team專案?
答案是: I don’t know
how to do it correctly!
即使依照上面的做法,調整好兩個WI表格的AreaPath,介面上的確會顯示更新後的專案路徑。
可是一存檔的時候,馬上會出現以下錯誤訊息:
這一部分目前是直接手動用介面複製一份新的Work Item, 再刪除舊的。
(浪費超多時間 lol )
沒有留言:
張貼留言