Passa ai contenuti principali

TFS 2010 Object Model: recuperare le informazioni delle project collections

In questo post vorrei mostrare come sia possibile recuperare  le informazioni delle project collection contenute nel nostro Team Foundation Server utilizzando l’Object Model messoci a disposizione dall’SDK.

Nel precedente post della serie abbiamo visto come sia possibile eseguire la connessione al server TFS, quindi diamo per assodato il fatto di essere in grado di accedere al server.

Per recuperare le informazioni delle project collections possiamo utilizzare la proprietà CatalogNode della classe TfsConfigurationServer ed eseguire una query per ricavare i nodi di tipo Collection:

  1. Dim tfsInstance = TfsConfigurationServerFactory.GetConfigurationServer(New Uri("http://server:8080/tfs"))
  2. Dim collections = tfsInstance.CatalogNode.QueryChildren({CatalogResourceTypes.ProjectCollection},
  3.                                                         False, CatalogQueryOptions.None)

La variabile collections conterrà una collezione a sola lettura di CatalogNode nei quali sono contenuti i dati da noi ricercati.

In particolare CatalogNode ha una proprietà Resource di tipo CatalogResource.

Le più importanti proprietà della classe CatalogeResource sono:

  • Description :  descrizione della collection (in generale della risorsa). Si tratta della descrizione che abbiamo inserito in fase di creazione della collezione;
  • DisplayName : nome della collectio. E’ il nome che abbiamo inserito nel wizard di creazione della collezione;
  • Identifier : si tratta di un Guid che identifica univocamente la risorsa a livello di catalog;
  • Properties : è un oggetto che implementa IDictionary(Of String,String) in cui sono contenute delle proprietà del nodo. In particolare in questo dictionary troviamo la proprietà InstanceId utile quando vogliamo recuperare il riferimento ai servizi esposti dalla collezione;
  • ResourceType : contiene il tipo della risorsa. Nel caso in questione si tratta di TeamprojectCollection.

La proprietà CatalogNode di una TfsConnection, permette di ricavare tutte le informazioni relative ai nodi apparteneti alla connessione. Nel caso della TfsConfigurationServer si tratta di tuti gli oggetti contenuti nel server tra cui collection, progetti e via discorrendo.

Possiamo recuperare le informazioni contenute nella CatalogeNode anche avendo a disposizione l’istanza della Project Collection (cioè un’istannza della classe TfsTeamProjectCollection).

Prima di vedere come recuperare le informazioni di cui sopra vediamo come è possibile ottenere l’istanza della TFSTeamProjectCollection.

Se abbiamo a disposizione un’istanza della TfsConfigurationServer (vedi il post precedente), possiamo utilizzare il metodo GetTeamProjectCollection.

Il metodo in questione prevede, come argomento, l’instance identifier della collezione che si vuole recuperare. Si tratta di un Guid che è recuperabile all’interno della proprietà Properties dell’istanza CatalogeResource della collection con la chiave “InstanceId”:

  1. Dim tfs = TfsConfigurationServerFactory.GetConfigurationServer(New Uri("http://server:8080/tfs"),
  2.                                                                New UICredentialsProvider())
  3. Dim collections = tfs.CatalogNode.QueryChildren({CatalogResourceTypes.ProjectCollection},
  4.                                                              False,
  5.                                                              CatalogQueryOptions.None)
  6. Dim collInstanceId = (From n In collections
  7.                      Where n.Resource.DisplayName = "nome collection"
  8.                      Select n.Resource.Properties("InstanceId")).FirstOrDefault()

E’ evidente che se non abbiamo l’instance identifier e dobbiamo recuperarlo con il precedente pezzo di codice, abbiamo anche tutte le informazioni culla collection senza dover utilizzare l’istanza di TfsTeamProjectCollection ottenuta con il metodo GetTeamProjectCollection.

Supponiamo, per un attimo, di avere l’instace id senza dover accedere ai nodi della CatalogeNode dell’istanza di TfsConfigurationServer. In questo caso, per ottenere l’istanza di TfsTeamProjectCollection è sufficiente:

  1. Dim tfs = TfsConfigurationServerFactory.GetConfigurationServer(New Uri("http://server:8080/tfs"),
  2.                                                                 New UICredentialsProvider())
  3. Dim tfsColl = tfs.GetTeamProjectCollection(New Guid(collInstanceId))

dove InstanceId è la stringa che identifica l’instance Id della collezione.

Il metodo GetTeamProjectCollection si comporta in maniera analoga a quanto visto per la TfsConfigurationServerFactory nel precedente post:

  • se l’istanza di TfsConfigurationServer su cui è richiamato è stata generata tramite la TfsConfigurationServerFactory, allora l’istanza restituita dal metodo sarà sempre la stessa;
  • se l’istanza di TfsConfigurationServer su cui è richiamato è stata istanziata utilizzando il costruttore, allora l’istanza restituita dal metodo sarà diversa per ogni chiamata.

Due altri modi per recuperare l’istanza della TfsTeamProjectCollection sono:

  • utilizzare il costruttore della classe TfsTeamProjectCollection:
  1. Dim tfsColl = New TfsTeamProjectCollection(New Uri("http://server:8080/tfs/nomecollection"),
  2.                                            New UICredentialsProvider())
  • utilizzare la classe factory TfsTeamProjectCollectionFatctory:
  1. Dim tfsColl = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(New Uri("http://server:8080/tfs/nomecollection"),
  2.                                                                         New UICredentialsProvider())

Osserviamo che, l’url della collection è ottenuto concatenando il nome della colection all’url del server.

Se utilizziamo la factory, otterremo sempre la stessa istanza della TfsTeamProjectCollection, mentre il costruttore ci consente di avere ogni volta un’istanza differente.

Nel momento in cui abbiamo a disposizione l’istanza per accedere alla componente server della project collection, le informazioni della stessa sono recuperabili accedendo direttamente alla proprietà CatalogNode ed in particolare alla proprietà Resource:

  1. Dim collName = tfsColl.CatalogNode.Resource.DisplayName
  2. Dim collDescription = tfsColl.CatalogNode.Resource.Description
  3. Dim collInstanceId = tfsColl.CatalogNode.Resource.Properties("InstancreId")

Un ulteriore modo per recuperare le informazioni relative alle collection presenti nel nostro server è quello di richiedere, all’istanza di TfsConfigurationServer, il servizio ITeamProjectCollectionService tramite l’istruzione:

  1. Dim tfs = TfsConfigurationServerFactory.GetConfigurationServer(New Uri("http://rma-mbnb01-dev:8080/tfs"),
  2.                                                                         New UICredentialsProvider())
  3.  
  4. Dim temProSrv = CType(tfs.GetService(Of ITeamProjectCollectionService)(), ITeamProjectCollectionService)

e, quindi, richiamare il metodo GetCollections:

  1. Dim collections = temProSrv.GetCollections()

Il risultato di questo è una IList(Of TeamProjectCollection). La TeamProjectCollection è una classe presente nel namespace Microsoft.TeamFoundation.Framework.Client e contiene delle informazioni relative alla project collection e poco di più.

 

Commenti

Post popolari in questo blog

VB.NET for Dummies: Gli Eventi

Vorrei iniziare con questo post una serie dedicata ad aspetti di VB.NET di base che possono essere utile a coloro che si avvicinano al mondo .NET e che, in genere, non vengono trattati a livello base. La serie di post non ha la pretesa di essere assolutamente esaustivi sugli argomenti che tratterò In questo primo post parleremo degli eventi. Cosa sono e a cosa servono Un evento è la “notifica” dell’accadimento di qualcosa. Quando, ad esempio, premiamo un bottone della finestra di un’applicazione, dietro le quinte, il bottone stesso “notifica” al mondo circostante che qualcuno, in quell’istante, lo ha premuto. Sta, poi, al mondo circostante preoccuparsi di “intercettare” l’evento stesso per gestirlo (tramite un gestore di evento). Attenzione a non confondere la pressione del tasto con la “notifica” della pressione del tasto: l’evento è la “notifica” dell’accadimento, non l’accadimento stesso. Ma a cosa serve tutto ciò? Utilizzare gli eventi è un modo per disaccoppiare ...

VB.NET: SplashScreen con effetto fade-in

In questo post vorrei proporvi un modo per realizzare una splash screen per le nostre applicazioni Windows Form che appare progressivamente con un effetto fade. Supponiamo di avere il nostro progetto VB.NET in una soluzione Visual Studio 2008 in cui abbiamo il sorgente della nostra applicazione Windows Form. Inseriamo una splash screen utilizzando il menù Progetto->Aggiungi Nuovo Elemento e selezionando il tipo di elemento “Schermata Iniziale” A questo punto Visual Studio creerà, automaticamente, la schermata iniziale che possiamo personalizzare graficamente come vogliamo. Per poter fare in modo che questa finestra appaia nel momento in cui avviamo l’applicazione, è necessario aprire le proprietà del progetto e impostare la maschera di avvio: In questo modo, all’avvio dell’applicazione, la schermata appare immediatamente e scompare un attimo prima della visualizzazione della finestra dell’applicazione. Possiamo far apparire la schermata iniziale con un ef...

Alla scoperta del Kinect: presentazioni e convenevoli

Oggi è arrivato un Kinect nuovo nuovo su cui cominciare a fare sperimentazione ed ho, quindi, deciso di condividere tutto ciò che scopro, le cavolate che faccio e i segreti che scopro con chi mi segue. I post che cercherò di scrivere con frequenza sono post di un neofita che si avvicina all’”Aggeggio” e che quindi sono diretti a chi nulla dell’argomento. Gli esperti troveranno noiosi e banali questi post, ma non si può aver tutto dalla vita. Per cominciare, scartato l’”Aggeggio” ho cominciato a preparare l’ambiente di sviluppo: 1) Visual Studio 2010 Ultimate (che uso normalmente ma che non è necessario in quanto si può sviluppare tranquillamente con la express edition); 2) Kinect SDK, scaricabile all’indirizzo http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx 3) DirectX Software Development Kit scaricabile all’indirizzo http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=6812 A questo punto vi basta connettere il Kinect al...