开发者

How do I run a TFS Work Item Query with Visual Studio Macros

开发者 https://www.devze.com 2023-02-11 13:44 出处:网络
I\'m trying to write a Vistual Studio 2008 macro to run a stored TFS query and display the results. Previously I\'ve created a query and named it \'Assigned to Me\' to display all the work items curre

I'm trying to write a Vistual Studio 2008 macro to run a stored TFS query and display the results. Previously I've created a query and named it 'Assigned to Me' to display all the work items currently assigned to me. Instead of View->Team Explorer, click, click down the tree to My Queries then double click 'Assigned to me' I want to write a macro to automate these steps.

The best I've come up with is the rather messy:

Sub TemporaryMacro()

    DTE.Windows.Item("{131369F2-062D-44A2-8671-91FF31EFB4F4}").Activate() 'Team Explorer
    DTE.ActiveWindow.Object.GetItem("tfsserver\MyProject\Work Items\My Queries\Assigned to Me").Select(vsUISelectionType.vsUISelectionTypeSelect)
    DTE.ActiveWindow.Object.DoDefaultAction()
    DTE.Windo开发者_开发知识库ws.Item("{131369F2-062D-44A2-8671-91FF31EFB4F4}").Close()
    DTE.Windows.Item("Assigned to Me [Results]").Activate()

End Sub

Is there a better way?


I've written a custom windows form application to allow me to run my own dynamic queries, and create new or update existing work items.

Below is a simplified version of a section of code I use to connect to our TFS 2010 server, run a query and get the results back.

Imports Microsoft.TeamFoundation.Client
Imports Microsoft.TeamFoundation.WorkItemTracking.Client
Imports System.Net
Imports System.Text.RegularExpressions
Imports System.Data.SqlTypes

Public Class DNATFSProxy
    Private _teamProjectCollection As TfsTeamProjectCollection
    Private _workItemStore As WorkItemStore
    Private _projectName As String
    Private _project As Project

    Public Sub Connect()
        _teamProjectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(New Uri(_uri))
        _workItemStore = New WorkItemStore(_teamProjectCollection)
        _project = _workItemStore.Projects(_projectName)
    End Sub

    Public Sub GetWorkItems(ByVal whereClause As String)
        If _workItemStore IsNot Nothing Then
            'Attempt to get the work items
            Dim query As String = String.Format("SELECT * FROM WorkItems WHERE {0}", whereClause)

            Dim workItemCollection As WorkItemCollection = _workItemStore.Query(query)

            'Iterate through each work item
            For Each workItem As WorkItem In workItemCollection

                'Insert your custom code here
                Dim title As String = workItem.Title.ToString()

                'You can also update the work item in TFS
                workItem.Title = "New title"
                workItem.Save()
            Next
        End If
    End Sub

Public Property URI() As String
    Get
        Return _uri
    End Get
    Set(ByVal value As String)
        _uri = value
    End Set
End Property

Public Property Project() As String
    Get
        Return _projectName
    End Get
    Set(ByVal value As String)
        _projectName = value
    End Set
End Property

End Class

You can then call this proxy as follows:

   Dim proxy As New DNATFSProxy()
   proxy.URI = "http://tfs:8080/tfs/DefaultCollection"
   proxy.Project = "Your Project Name"
   proxy.Connect()
   proxy.GetWorkItems("Insert your query here")

I hope this helps!

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号