この記事はTFS Advent Calendarの2日目です。
サイトはこちら:http://atnd.org/events/22819
APIを利用して、TFSへ作業項目を登録することができます。
プロジェクト一式はこちらです
Main
TfsClientを使う側です。サーバーURI、認証情報、登録するコレクション、プロジェクト名を指定します。
using System; using System.Net; using TfsAdventCalendar; namespace AddWorkItem { class Program { static void Main( string[] args ) { try { Uri uri = new Uri( "http://win7-vm:8080/tfs/" ); NetworkCredential credential = new NetworkCredential( "hoge", "foo" ); string collenctionName = "win7-vm\\DefaultCollection"; string projectName = "TFS_API_SAMPLE"; TfsClient tfs = new TfsClient( uri, credential, collenctionName, projectName ); tfs.AddWorkItem(); Console.WriteLine( "Success" ); } catch ( Exception ex ) { Console.WriteLine( "Error : " + ex.Message ); } } } }
TfsClient
TFSにアクセスするクラスです。サンプルのため、項目などは直に書いています。
using System; using System.Collections.ObjectModel; using System.Net; using Microsoft.TeamFoundation.Client; using Microsoft.TeamFoundation.Framework.Client; using Microsoft.TeamFoundation.Framework.Common; using Microsoft.TeamFoundation.WorkItemTracking.Client; namespace TfsAdventCalendar { public class TfsClient { TfsConfigurationServer configurationServer; WorkItemStore workItemStore; Project teamProject; public TfsClient( Uri tfsUri, NetworkCredential credential, string collenctionName, string projectName ) { configurationServer = new TfsConfigurationServer( tfsUri, credential ); GetTfsProject( collenctionName, projectName ); } // TFSの情報を取得する void GetTfsProject( string collenctionName, string projectName ) { // TFS内の、コレクションのリストを取得する ReadOnlyCollection<CatalogNode> collectionNodes = configurationServer.CatalogNode.QueryChildren( new[] { CatalogResourceTypes.ProjectCollection }, false, CatalogQueryOptions.None ); // コレクションのリストから、必要なコレクションを取得する foreach ( CatalogNode collectionNode in collectionNodes ) { Guid collectionId = new Guid( collectionNode.Resource.Properties["InstanceId"] ); TfsTeamProjectCollection teamProjectCollection = configurationServer.GetTeamProjectCollection( collectionId ); Console.WriteLine( "Collection: " + teamProjectCollection.Name ); // 登録するチームコレクションでフィルタする if ( teamProjectCollection.Name != collenctionName ) { continue; } // コレクション内の、チームプロジェクトのリストを取得する ReadOnlyCollection<CatalogNode> projectNodes = collectionNode.QueryChildren( new[] { CatalogResourceTypes.TeamProject }, false, CatalogQueryOptions.None ); // チームプロジェクトのリストから、必要なプロジェクトを取得する foreach ( CatalogNode projectNode in projectNodes ) { Console.WriteLine( " Team Project: " + projectNode.Resource.DisplayName ); // 登録するプロジェクトでフィルタする if ( projectNode.Resource.DisplayName != projectName ) { continue; } // チームプロジェクトを取得する WorkItemStore workItemStore = teamProjectCollection.GetService<WorkItemStore>(); teamProject = workItemStore.Projects[projectNode.Resource.DisplayName]; return; } } throw new Exception( "プロジェクトがありません" ); } public void AddWorkItem() { WorkItem newItem = new WorkItem( teamProject.WorkItemTypes["タスク"] ); newItem.Title = "作業項目の概要です"; newItem.Description = "作業項目の詳細です"; newItem.Save(); } } }