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

MVP Reconnect …… ovvero quando entri nella “famigghia” resti sempre nella “famigghia”!!!

Ma di che “famigghia” stiamo parlando!!!!

Fermi tutti, non si tratta di robe strane o sette segrete o affari malavitosi….stiamo parlando della grande famiglia dei Microsoft MVP.

Per chi non sapesse cosa sono i Microsoft MVP, vi consiglio di fare un giro sul sito ufficiale del programma (link), ma, volendolo spiegare in pochisime parole, si tratta di un riconoscimento che Microsoft da a persone che si distinguono per il loro impegno, aiutando gli altri ad ottenere il massimo grazie alle tecnologie Microsoft. Si tratta di persone, non dipendenti Microsoft, che mettono la loro passione, il loro tempo, la loro buona volontà per la divulgazione e la condivisione della conoscenza. Non necessariamente (come qualcuno erroneamente sostiene, evidentemente non conoscendo le basi del programma) si tratta di professionisti nel termine letterale del termine ma si tratta comunque di un gruppo di persone che sacrifica un pò del suo tempo (e, a volte, vi assicuro neanche pò!!!) per la sua passione.

Pe…

Nuova versione del Band SDK

E’ di ieri l’annuncio del rilascio della nuova versione dell’SDK per il Microsoft Band.
Si tratta della versione 1.3.10417 (la precedente e, prima della serie, era la 1.3.10219 preview).
Maggiori informazioni, download dell’SDK per le tre piattaforme Windows Phone, iOS e Android all’indirizzo http://developer.microsoftband.com/.
Allo stesso indirizzo potrete trovare anche la documentazione.
Nei mesi scorsi mi sono gia’ occupato della precedente versione e questi sono i post che ne parlano:
Microsoft Band SDK Preview - First LookMicrosoft Band SDK Preview - ”Hello Band”Microsoft Band SDK Preview - Accesso ai sensoriMicrosoft Band SDK Preview - TileMicrosoft Band SDK Preview - NotificheMicrosoft Band SDK Preview - Personalizzazione
Gli argomenti trattati e il codice proposto dovrebbe, ad una prima lettura delle nuove funzionalita’ inserite, essere ancora valido e funzionante ma nei prossimi giorni prendero’ in esame tutti gli argomenti dei precedenti post e vedremo cosa cambia e cosa e’ …

Template di progetto per sviluppare applicazioni WPF con Intel® RealSense™

E’ disponibile, nella gallery di Visual Studio, la prima versione del mio template di progetto per applicazioni WPF scritte in C# che permette di realizzare applicazioni con l’SDK di Intel® RealSense™.Il template si può scaricare direttamente all’interno Visual Studio utilizzando il tool “Extensions and Updates”oppure all’indirizzo https://visualstudiogallery.msdn.microsoft.com/1c36ecfd-8c00-4aee-b20c-a1726ab6424dIl template esegue le seguenti operazioni per voi:Aggiunge la reference all’assembly libpxcclr.cs.dll (nelle due distinte versioni per x86 e x64);Aggiunge lo script di post build per copiare la libreria libpxccpp2c.dll dalla cartella dell’SDK alla cartella bin del vostro progetto.Una volta creato il progetto dovete rimuovere la configurazione di compilazione AnyCPU (che non ha più senso) dalla vostra solution e sarete pronti per sviluppare con Intel® RealSense™.Ovviamente dovete installare l’SDK che potete scaricare all’indirizzo https://software.intel.com/en-us/intel-realsen…