本系列第五部(最終部),前文已實作簽入/簽出/取消掛起/關聯工作項目。本文補完:簽入說明 UI、簽入原則驗證、簽入衝突處理。
VersionControlServer.GetCheckinNoteDefinitions() 取得定義(名稱、顯示順序、是否必填)。Word 增益集需動態產生切換鈕、面板、標籤與文字框。必填驗證需自行實作邏輯阻擋簽入。
Workspace.EvaluateCheckin() 可預檢:衝突、缺漏說明、原則違規。參數含 PendingChange 陣列(全部/選取)、註解、CheckinNote、WorkItemCheckinInfo。回傳 CheckinEvaluationResult 含三類失敗集合。
Word 情境下,內建三原則僅 Work Item Required 相關。需忽略無關原則錯誤:
Dim cer As CheckinEvaluationResult = ...
For Each pf As PolicyFailure In cer.PolicyFailures
Dim i As IPolicyDefinition = DirectCast(pf.Policy, IPolicyDefinition)
Dim processPolicy As Boolean = (i.Type = "Work Items")
If Not processPolicy AndAlso i.Type = "Custom Path Policy" Then
processPolicy = (i.Description = "Work Items") ' 處理委派原則
End If
If processPolicy Then ' 處理此失敗 ' End If
Next
Office 檔案預設獨佔簽出(停用合併),理論上無衝突。但 TFS 2005 預設簽出不自動取得最新版,導致簽入時可能衝突。
解法:簽出前手動 Workspace.Get(..., VersionSpec.Latest, ..., GetOptions.Overwrite) 強制更新:
Dim status As GetStatus = m_userWorkspace.Get( _
New String() {docPath}, VersionSpec.Latest, RecursionType.None, _
GetOptions.GetAll Or GetOptions.Overwrite)
If status.NumConflicts + status.NumFailures + status.NumOperations + status.NumWarnings = 1 Then
m_userWorkspace.PendEdit(docPath)
End If
若仍發生衝突,可用 EvaluateCheckin 取得 Conflicts,呼叫 Workspace.ResolveConflict 並設 Resolution.AcceptYours。
至此具備打造豐富自訂簽入體驗的完整工具箱。後續可研究 TFS 2008 更新 API 及 Rosario 版本增強功能。