Today’s post is merely a little code fragment, that gets you started with using the TFS2010 API from F#.
Assuming you have referenced the following Assemblies:
the following code connects to a TFS Server (cbtfs, you might want to change the URI to your needs) on the default port (8080) and loads up information about the TeamProjectCollection DefaultCollection. This will succeed under the assumption that valid credentials are supplied to the UICredentialsProvider. The UICredentialsProvider is also the reason why the assembly reference to System.Windows.Forms is demanded.
After successful authentication, a simple work item query (wiql) is constructed retrieving all work items available for that TeamProjectCollection. Finally, each work item’s id and title information is displayed on the console.
Edit 2011-06-02
I corrected the flow to account for previously checked project collection exception and incorporated a use of sequence expressions to make it feel more F#-ish
// Learn more about F# at http://fsharp.net module TFSTest open System.Net open Microsoft.TeamFoundation open Microsoft.TeamFoundation.Common open Microsoft.TeamFoundation.Client open Microsoft.TeamFoundation.WorkItemTracking.Client let projectCollectionUri = System.Uri("http://cbtfs:8080/tfs/DefaultCollection") let mutable projectCollection:TfsTeamProjectCollection = null try projectCollection <- TfsTeamProjectCollectionFactory.GetTeamProjectCollection( projectCollectionUri , new UICredentialsProvider() ) projectCollection.EnsureAuthenticated() printfn "authenticated with your tfs ... " with | :? TeamFoundationServerUnauthorizedException -> ( printfn "error: failed to authorize with TFS service!") | :? TeamFoundationServiceUnavailableException -> ( printfn "error: failed to connect to TFS service - service unavailable!") | :? WebException -> (printfn "error: Network problem!" ) let mutable workItemStoreService = null if (projectCollection <> null) then try workItemStoreService <- projectCollection.GetService<WorkItemStore>() printfn "Connected to WorkItemStoreService" with | :? System.Exception -> (printfn "error: failed to connect to workitemstore") if (workItemStoreService <> null) then let workItems = workItemStoreService.Query( "SELECT [System.Id], [System.Title] FROM WorkItems" ) if (workItems <> null && workItems.Count > 0) then let workItemSequence = seq { for i in 1 .. (workItems.Count - 1) do yield workItems.Item(i) } workItemSequence |> Seq.iter(fun item -> (printfn "[%d] %s" (item.Id) (item.Title))) printfn "press any key to exit" System.Console.ReadLine() |> ignore