承接先前專欄,我們已打造可與 TFS 版本控制互動的 Word 2003 增益集。本期將補齊兩項關鍵功能:工作項目關聯 與 復原掛起變更,使簽入體驗更臻完整。
初版使用 VSTO 2005 SE Beta,現只需在安裝 RTM 版的電腦上重新編譯即可升級。確認無誤後,著手加入復原支援。
於 tfsvcUtil 類別新增共用方法 UndoPendingChanges(docPath As String) As Boolean,邏輯與 CheckInDocument 相似:驗證伺服器連線、取得工作區、呼叫 Workspace.GetPendingChanges(docPath) 取得陣列,若長度 > 0 則呼叫 Workspace.Undo(pendingChanges),回傳值應為 1 代表成功。
Public Shared Function UndoPendingChanges(ByVal docPath As String) As Boolean
If serverValidated Then
If m_userWorkspace Is Nothing Then
Dim userWorkstation As Workstation = Workstation.Current
Dim docWSInfo As WorkspaceInfo = userWorkstation.GetLocalWorkspaceInfo(docPath)
m_userWorkspace = m_tfsVCS.GetWorkspace(docWSInfo)
End If
Dim pc As PendingChange() = m_userWorkspace.GetPendingChanges(docPath)
If pc IsNot Nothing AndAlso pc.Length > 0 Then
Dim retval As Integer = m_userWorkspace.Undo(pc)
If retval = 1 Then Return True
Throw New tfsUtilException(String.Format(MSG_UNDO_NOT_ZERO, docPath, retval))
Else
Return False
End If
Else
Throw New tfsUtilException(MSG_SERVER_NOT_VALIDATED)
End If
End Function
ThisAddIn 類別同步新增工具列按鈕、點擊處理器與狀態同步邏輯,啟用狀態鎖定「簽入」按鈕一致。
需三步走:
tfsvcUtil 連線工作項目存放區 (WorkItemStore)。CheckInDocument 接受 WorkItemCheckinInfo() 參數並傳遞給 Workspace.CheckIn 多載。frmCheckIn 對話框,加入工作項目查詢下拉清單與資料網格,供使用者勾選關聯項目。加入 Microsoft.TeamFoundation.WorkItemTracking.Client.dll 參考 (位於 %Program Files%\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\),新增共用方法 ConnectWIS() 延遲初始化 WorkItemStore 並快取於 m_tfsWIS。
Public Shared Sub ConnectWIS()
If Not m_tfs Is Nothing Then
If tfsvcUtil.m_tfsWIS Is Nothing Then
tfsvcUtil.m_tfsWIS = CType(m_tfs.GetService(GetType(WorkItemStore)), WorkItemStore)
End If
Else
Throw New tfsUtilException(MSG_SERVER_NOT_VALIDATED)
End If
End Sub
提供 GetStoredQueries(docPath) 取得 StoredQueryCollection,與 RunWIQ(docPath, WIQ) 執行查詢回傳 WorkItemCollection,並處理 @Project、@Me 等巨集參數。
cboStoredQueries) 與 DataGridView (dgvWorkItems),欄位含核取方塊、類型、ID、標題、狀態、簽入動作 (Associate/Resolve)。CellFormatting 事件將 WorkItemType 顯示為 Name;CurrentCellDirtyStateChanged 依工作項目狀態動態切換簽入動作下拉清單內容。FormClosing 事件彙總勾選項目建立 WorkItemCheckinInfo() 陣列供呼叫端取用。
至此增益集已支援:新增文件至版控、簽出/簽入、關聯工作項目、復原掛起變更。下一期將加入簽入備註與策略支援。