2011-03-10 2 views
6

J'écris un webpart pour SharePoint 2010 qui récupère la dernière page d'un certain type (personnalisé), en fonction de la date de publication. Il prend uniquement en compte les pages marquées avec un terme spécifié. Je voudrais qu'il soit aussi capable de le faire avec des pages qui sont marquées avec des termes qui sont les enfants des termes sélectionnés.Comment obtient-on tous les termes enfants d'un terme SharePoint en C#?

Si j'ai un arbre à long terme comme ceci:

  • Angleterre
    • Kent
      • Dover
      • Canterbury
    • Surrey
      • Cr oydon
      • Crawley

puis en sélectionnant Kent, je veux que mon webpart pour afficher la dernière page contenant Kent, Dover ou Canterbury.

Est-ce possible en C#?

Merci pour votre temps.

Répondre

4

La fonction que vous recherchez est Term.GetTerms

Vous aurez besoin d'obtenir un TaxonomyValue de votre champ

Ensuite, vous devez obtenir la session Taxonomy en cours, puis utiliser la session Taxonomy pour obtenir le terme utilisé dans le champ. À partir de ce terme, vous pouvez utiliser le champ Parent pour obtenir le terme parent. Voici un code approximatif pour vous montrer les objets utilisés.

  TaxonomyFieldValue v = null; // Notsurehowtodothisbit(); 
     TaxonomySession session = new TaxonomySession(site); 
     if (session.TermStores != null && session.TermStores.Count > 0) 
     { 

      TermStore termStore = session.TermStores[0]; 
      Term t = termStore.GetTerm(v.TermGuid); 
      Term parentTerm = t.Parent; 
      TermCollection childTerms = t.GetTerms(); 
     } 

Une fois que vous avez l'arbre, vous pourrez peut-être utiliser une requête CAML pour générer une requête SPList.GetList qui ramène tout marqué de cette façon.

Je ne l'ai pas fait une expérience à cet égard ... Mais Bart-Jan Hoeijmakers a

private SPListItemCollection GetItemsByTerm(Term term, SPList list) 
    { 
     // init some vars SPListItemCollection items = null;  
     SPSite site = SPContext.Current.Site;  // set up the TaxonomySession  
     TaxonomySession session = new TaxonomySession(site); 
     // get the default termstore TermStore termStore = session.TermStores[0]; 
     // If no wssid is found, the term is not used yet in the sitecollection, so no items exist using the term 
     int[] wssIds = TaxonomyField.GetWssIdsOfTerm(SPContext.Current.Site, termStore.Id, term.TermSet.Id, term.Id, false, 1); 
     if (wssIds.Length > 0) 
     { 
      // a TaxonomyField is a lookupfield. Constructing the SPQuery  
      SPQuery query = new SPQuery(); 
      query.Query = String.Format("<Where><Eq><FieldRef Name='MyTaxonomyField' LookupId='TRUE' /><Value Type='Lookup'>{0}</Value></Eq></Where>", wssIds[0]); 
      items = list.GetItems(query); 
     } 
     return items; 
    } 
+0

getTerms est la clé de la réponse. CAML est idéal pour une liste ou une partie Web de requête de contenu.Voir ma réponse mise à jour pour savoir comment obtenir votre guide de termes initial et une méthode pour utiliser la recherche dans toutes les listes et bibliothèques. –

2

La réponse partielle de Nat en utilisant la méthode GetTerms pour le parent est excellente. Le code pour interroger une liste semble bon aussi.

Pour obtenir l'ID du terme parent, vous pouvez utiliser TermStore.GetTerms par rapport au titre.

Pour rechercher dans toutes les listes et bibliothèques de la collection de sites, vous pouvez utiliser la méthode FullTextSQLQuery de l'API de recherche en spécifiant les guids dans la clause where avec la propriété owstaxIdMyTaxonomyField comme colonne.

Il est un excellent exemple d'obtenir ids par titre et la recherche d'un magasin à long terme par id à Using taxonomy fields in SharePoint 2010: Part III

Questions connexes