Team System: 工作项目和撤消支持2011-11-06 msdn Brian A. Randell在本专栏 2007 年 1 月期中 (msdn.microsoft.com/msdnmag/issues/07/01/TeamSystem),我介绍了 如何创建 Microsoft® Word 2003 加载项来与 Team Foundation Server 版本控制子系统协同工作。 在 2007 年 4 月期的专栏中 (msdn.microsoft.com/msdnmag/issues/07/04/TeamSystem),我深入探讨了 工作项目跟踪子系统。在本月的专栏中,我将介绍如何向加载项添加工作项目支持。此外,您还将了解如 何添加原本应出现在第一版本加载项中的功能 — 撤消支持。更改在介绍加载项的第一期专栏中,我使用了 Microsoft Visual Studio® 2005 Tools for the 2007 Microsoft Office system 的测试版本(Visual Studio 2005 Tools for Office Second Edition,或简称为 VSTO 2005 SE)。从那之后,Microsoft 已经发布了最终版本,该版本支持为 Office 2003 和 2007 Office system 创建应用程序加载项。所以,如果您打算按照该专栏文章中的说明 操作,则需将该加载项的第一个“版本”升级到 RTM 版本。为此,只需在安装了 VSTO 2005 SE 的计算机上打开该解决方案并重新编译即可。一旦确认新版本可正常运行,下一步要做的就是添加撤 消挂起的更改支持。该功能要求您修改 tfsvcUtil 类和 ThisAddin 类。在 tfsvcUtil 中,添加 一个新的共享方法 UndoPendingChanges(该方法可接受目前正在修改的文档的完整路径),并让其返回 布尔值。事实证明,该新方法的核心功能很像现有的 CheckInDocument 方法。该方法会进行检查,以确 保已与 Team Foundation Server 建立有效连接,并确认加载了有效工作区。这一步完成后,它将为传入 的文档获取一个 PendingChanges 对象数组。假设返回了一项挂起的更改,然后调用用户工作区的 Undo 方法,传入 PendingChanges 数组。这一方法应返回整数值 1。如果确实如此,该方法返回 True,否则 便使用新定义的 MSG_UNDO_NOT_ZERO 常量引发 tfsUtilException。图 1 提供了完整的方法列表。Figure 1 tfsvcUtil 中的 UndoPendingChanges 方法
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) " Retval should equal the number of items "undone" If retval = 1 Then Return True Else Throw New tfsUtilException(String.Format( _ MSG_UNDO_NOT_ZERO, docPath, retval)) End If Else Return False End If Else Throw New tfsUtilException(MSG_SERVER_NOT_VALIDATED) End IfEnd Function
您需要对 ThisAddIn 类进行的更改非常简单。像以前一样,由于篇幅所限,我不 再对 Word 加载项特殊代码进行更多详述(您可以将本期专栏的下载内容和以前的版本做比较,看看有些 什么变化)。毫无疑问,您必须修改该类,为工具栏添加新的“撤消挂起的更改”按钮,为新 按钮添加单击处理程序,并添加其他代码来处理状态变化以控制该按钮是否启用。基本上,“撤消 挂起的更改”按钮的启用状态应反映现有“签入”按钮的状态。