2011-03-10 15 views
6

Estoy escribiendo un sitio web para SharePoint 2010 que recupera la última página de cierto tipo (personalizado), de acuerdo con la fecha de publicación. Solo tiene en cuenta las páginas etiquetadas con un término específico. Me gustaría que también sea capaz de hacerlo con páginas marcadas con términos que son hijos de los términos seleccionados.¿Cómo se obtienen todos los términos hijos de un término de SharePoint en C#?

Si tengo un árbol término de este modo:

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

continuación, mediante la selección de Kent, quiero mi parte web para mostrar la última página de etiquetado con Kent, Dover, o Canterbury.

¿Es esto posible en C#?

Gracias por su tiempo.

Respuesta

4

la función que está buscando es Term.GetTerms

Usted tendrá que obtener una TaxonomyValue desde su campo

Luego debe obtener la TaxonomySession actual, luego use la TaxonomySession para obtener el Término utilizado en el campo. A partir de ese término, puede usar el campo Padre para obtener el Término principal. Aquí hay un código aproximado para mostrarle los objetos utilizados.

  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(); 
     } 

Una vez que tenga el árbol, que puede ser capaz de utilizar una consulta CAML para generar una consulta SPList.GetList que trae cualquier cosa etiquetada de esa manera.

no he hecho un experimento en este sentido ... Pero Bart-Jan Hoeijmakers tiene

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 es clave para la respuesta. CAML es ideal para una lista o un Webpart de consulta de contenido.Vea mi respuesta actualizada para saber cómo obtener su guía de término inicial y un método para usar la búsqueda en todas las listas y bibliotecas. –

2

La respuesta parcial de Nat usando el método GetTerms para el padre es excelente. El código para consultar una lista también se ve bien.

Para obtener la identificación para el término principal, puede usar TermStore.GetTerms con el título.

Para buscar en todas las listas y bibliotecas de la colección de sitios, puede utilizar el método FullTextSQLQuery de la API de búsqueda especificando las guiones en la cláusula where con owstaxIdMyTaxonomyField como columna.

No es un gran ejemplo de conseguir de identificación por título y la búsqueda de un almacén de términos mediante la identificación en Using taxonomy fields in SharePoint 2010: Part III

Cuestiones relacionadas