Makale Özeti

Bu yazıda, Work Item Query Language (WIQL) kullanarak Team Foundation Server (TFS) 'de bulunan Work Item'ları nasıl sorgulayabileceğimizi inceleyeceğiz.

Makale

Work Item Query Language (WIQL)

 

Work Item Store’da tutulan Work Item’ları kendi kodumuzdan sorgulamak için kullanabileceğimiz Work Item Query Language (WIQL); açılımından da anlayabileceğimiz gibi Team Foundation Server (TFS) üzerinde yaratılmış projelerdeki Work Item’ları sorgulayabilmemizi sağlayan bir sorgulama dilidir. Bu sorgulama dili SQL’e çok benzemektedir. Bu nedenle, işimiz, bir SQL sorgusu yazmak ve onu çalıştırmak kadar kolaydır.

 

TFS içerisindeki Work Item’lara erişmek ve onlarla çalışmak için TFS Object Model’i referans olarak kodumuza eklememiz yeterlidir. Aşağıdaki adımları izleyelim:

 

  1. Bir Console projesi yaratın, ve adına WIQLSample1 adını verelim.
  2. Solution Explorer’dan referans olarak;
    - Microsoft.TeamFoundation.WorkItemTracking.Client ve
    - Microsoft.TeamFoundation.Client referanslarını ekleyin.
  3. Kodumuza aşağıdaki kodları ekleyelim;
    - using Microsoft.TeamFoundation.WorkItemTracking.Client;
    - using Microsoft.TeamFoundation.Client; satırlarını ekleyelim.

01: using System;

02: using Microsoft.TeamFoundation.WorkItemTracking.Client;

03: using Microsoft.TeamFoundation.Client;

04:

05: namespace WIQLSample1 {

06:     class Program {

07:         static void Main(string[] args) {

08:         }

09:     }

10: }

 

Sıra geldi, WorkItemStore ile çalışırken kullanacağımız nesnelerimizi yaratmaya;

 

  1. Bunun için ilk olarak, WorkItemStore altında yer alan tüm Work Item’ları döndürecek metodumuzu GetAllWorkItems adıyla yaratalım.
  2. Metodumuzu oluşturan bloklar arasında, Team Foundation Server (TFS) sunucumuza erişmek için kullanacağımız tfsServer nesnemizi yaratalım:
    System.Net.NetworkCredential netCredential =
         new System.Net.NetworkCredential(“uid”, “pwd”);

    TeamFoundationServer tfsServer = new TeamFoundationServer(
    http://tfsmaster:8080);
  3. Sorgumuz için kullanacağımız WorkItemStore türündeki nesnemizi yaratalım:
    WorkItemStore wiStore = (WorkItemStore)tfsServer.GetService(typeof(WorkItemStore));
  4. Sorgumuzu yazalım:
    string tfsQuery = “SELECT [System.Id] FROM WorkItems”;
  5. Sorgumuzu çalıştırmak için WorkItemStore sınıfının Query metodunu kullanalım ve WorkItemCollection tipindeki listesini döndürelim:
    return wiStore.Query(tfsQuery);

Kodumuzun çıktısı aşağıdaki gibidir:

 

01: using System;

02: using System.Collections.Generic;

03: using Microsoft.TeamFoundation.WorkItemTracking.Client;

04: using Microsoft.TeamFoundation.Client;

05:

06: namespace WIQLSample1 {

07:     class Program {

08:         static void Main(string[] args) {

09:             

10:         }

11:

12:         static public WorkItemCollection GetAllWorkItems() {

13:             System.Net.NetworkCredential netCredential = new System.Net.NetworkCredential("uid", "pwd");

14:             TeamFoundationServer tfsServer = new TeamFoundationServer("http://tfsmaster:8080", netCredential);

15:             WorkItemStore wiStore = (WorkItemStore)tfsServer.GetService(typeof(WorkItemStore));

16:             string tfsQuery = "SELECT [System.Id] FROM WorkItems";

17:             return wiStore.Query(tfsQuery);

18:         }

19:     }

20: }

 

Yazdığımız metodu Main metodu içerisinden çağırmak için Main metodumuzun blokları arasında aşağıdaki kodları ekleyelim:

 

  1. Metodumuzun hatasız olarak çalışması sonucunda WorkItemCollection türünde bir nesne elde ederiz. Aynı türde bir nesne yaratarak Work Item koleksiyonumuzu alalım:
    WorkItemCollection wiCollection = this.GetAllWorkItems();
  2. Koleksiyonumuz içerindeki elemanları ekrana yazdırabilmek için foreach döngümüzü kodumuza ekleyelim:
    foreach (WorkItem wi in wiCollection) {
      Console.WriteLine(“{0} – {1}”, wi.Id, wi.Title);
    }

İlk örneğimizin son hali aşağıdaki gibidir:

01: using System;

02: using System.Collections.Generic;

03: using Microsoft.TeamFoundation.WorkItemTracking.Client;

04: using Microsoft.TeamFoundation.Client;

05:

06: namespace WIQLSample1 {

07:     class Program {

08:         static void Main(string[] args) {

09:             WorkItemCollection wiCollection = GetAllWorkItems();

10:             foreach (WorkItem wi in wiCollection) {

11:                 Console.WriteLine("{0} - {1}", wi.Id, wi.Title);

12:             }

13:         }

14:

15:         static public WorkItemCollection GetAllWorkItems() {

16:             System.Net.NetworkCredential netCredential = new System.Net.NetworkCredential("uid", "pwd");

17:             TeamFoundationServer tfsServer = new TeamFoundationServer("http://tfsmaster:8080", netCredential);

18:             WorkItemStore wiStore = (WorkItemStore)tfsServer.GetService(typeof(WorkItemStore));

19:             string tfsQuery = "SELECT [System.Id] FROM WorkItems";

20:             return wiStore.Query(tfsQuery);

21:         }

22:     }

23: }

 

Kodumuzu çalıştırdığımda aldığım sonuç aşağıdaki gibi oldu:



Şekil – I : Work Item Listesi

Buraya kadar olan kısımda, TFS nesne modeli kullanan ve Team Foundation Server (TFS) içerisindeki tüm Work Item listesini döndüren basit bir örneği inceledik.

 

Şimdi örneğimizi biraz daha geliştirerek sorgumuza yeni bir kıstas ekleyelim.

 

Aşağıdaki örneğimizde, sadece “TaskWork Item Type özelliğine sahip olan Work Item’ları listeleyeceğiz.

 

Bunun için sadece, sorgu cümlemizde değişiklik yapmamız yeterli olacaktır.

 

19: string tfsQuery = "SELECT [System.Id] FROM WorkItems";

 

19. satırda yer alan sorgu cümlesini aşağıdaki gibi değiştirelim:

19: string tfsQuery = "SELECT [System.Id] FROM WorkItems WHERE [System.WorkItemType] = 'Task'";

 

Kodumuzun son haline bir kez daha göz atalım :

01: using System;

02: using System.Collections.Generic;

03: using Microsoft.TeamFoundation.WorkItemTracking.Client;

04: using Microsoft.TeamFoundation.Client;

05:

06: namespace WIQLSample1 {

07:     class Program {

08:         static void Main(string[] args) {

09:             WorkItemCollection wiCollection = GetAllWorkItems();

10:             foreach (WorkItem wi in wiCollection) {

11:                 Console.WriteLine("{0:00} - {1}", wi.Id, wi.Title);

12:             }

13:         }

14:

15:         static public WorkItemCollection GetAllWorkItems() {

16:             System.Net.NetworkCredential netCredential = new System.Net.NetworkCredential("uid", "pwd");

17:             TeamFoundationServer tfsServer = new TeamFoundationServer("http://tfsmaster:8080", netCredential);

18:             WorkItemStore wiStore = (WorkItemStore)tfsServer.GetService(typeof(WorkItemStore));

19:             string tfsQuery = "SELECT [System.Id] FROM WorkItems WHERE [System.WorkItemType] = 'Task'";

20:             return wiStore.Query(tfsQuery);

21:         }

22:     }

23: }

 

Team Foundation Server (TFS) sunucusunda tipi Task olan Work Item listesini elde etmiş oluruz.

 

Bir başka yazıda buluşmak dileğiyle.

   

Mutlu KURTBAŞ
MCPD : Enterprise Application Developer