De todos es conocido las importantes mejoras de SharePoint 2010 a nivel de metadatos. Aquí os paso en post de ENCAMINA, donde además de ver una solución práctica aplicando metadatos, tenemos un recopilatorio de enlaces muy buenos sobre el tema:
http://www.soluciones-sharepoint.com/2010/12/sharepoint-2010-para-la-gestion-del.html
También sabréis, que existe un formato .CSV para poder importar el árbol de metadatos al almacén de SharePoint. Sin embargo, no existe una opción OOTB para poder exportar el almacén.
Si queréis exportar vuestro almacén, tenéis algunas herramientas para facilitaros la vida, aunque dependiendo de cómo de complejo sea ese almacén, es posible que necesitéis algo más. Os dejo algunos enlaces que os pueden ser de utilidad:
- Post con código para crear un CSV con el formato de la utilidad de importación. El problema de este código, es que no tiene en cuenta el idioma de los términos, ni los sinónimos de cada término:
- Exporting taxonomies from a Microsoft SharePoint 2010 Term Store
- Utilidad en codeplex, pero con la misma limitación que el código anterior.
- Herramienta en Codeplex para importar/exportar Taxonomías
- Solución de VS con código para importar archivos XML al almacén de términos de SharePoint. El problema de esta herramienta, es que tienes que generar a mano el XML con el formato definido en la solución. Por el formato del XML, parece que sí aceptaría Términos en varios idiomas, así como sus sinónimos, pero escribiendo a mano el XML.
- SharePoint 2010 Taxonomy Import Utility
Con los enlaces anteriores, si tenéis un almacén de términos en un solo idioma, y sin sinónimos, lo tenéis fácil. Si tenéis un almacén más complejo, o bien creáis el fichero XML del último enlace, o podéis acudir a herramientas de terceros. Yo no he probado ninguna, pero os paso una de ellas que tiene buena pinta:
http://www.layer2.de/en/products/Pages/Taxonomy-Manager-SharePoint-2010.aspx
Si lo que queremos es sacar un listado de los términos de un grupo concreto, y hacerlo en el lenguaje del usuario, podemos usar el siguiente código. Yo he utilizado un proyecto de tipo Visual WebPart, donde tenemos una etiqueta que muestra el LCID del idioma en el que se muestra el Site, además de una caja de texto y un botón. Si metemos el nombre del conjunto de términos que queremos listar, y pulsamos el botón, vemos los términos de ese almacén, tal y como se aprecia en la imagen.
Os pongo el código de todo:
1 |
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">void</span> Page_Load(<span style="color: #0000ff">object</span> sender, EventArgs e)<br />{<br /> lblTermSetList.Text = String.Empty;<br /> <span style="color: #0000ff">using</span> (SPSite currentSite = SPContext.Current.Site)<br /> { <br /> SPWeb web = currentSite.OpenWeb();<br /><br /> lblInfo.Text = String.Format(<span style="color: #006080">"LCID: {0}"</span>, web.Language); <br /> }<br />} |
1 |
<span style="color: #0000ff">protected</span> <span style="color: #0000ff">void</span> Button1_Click(<span style="color: #0000ff">object</span> sender, EventArgs e)<br />{<br /> <span style="color: #0000ff">using</span> (SPSite currentSite = SPContext.Current.Site)<br /> {<br /> SPWeb web = currentSite.OpenWeb();<br /><br /> ListTermSetTaxonomy(txtTermSetName.Text, (<span style="color: #0000ff">int</span>)web.Language, currentSite);<br /> }<br />} |
1 |
<span style="color: #0000ff">private</span> <span style="color: #0000ff">void</span> ListTermSetTaxonomy(<span style="color: #0000ff">string</span> termSetName, <span style="color: #0000ff">int</span> lcid, SPSite currentSite)<br />{<br /> <span style="color: #0000ff">using</span> (currentSite)<br /> {<br /> SPTaxonomy.TaxonomySession session = <span style="color: #0000ff">new</span> SPTaxonomy.TaxonomySession(currentSite);<br /><br /> SPTaxonomy.TermStore termStore = session.DefaultSiteCollectionTermStore;<br /> SPTaxonomy.Group group = termStore.Groups[<span style="color: #006080">"Marvel web site"</span>];<br /><br /> <span style="color: #0000ff">try</span><br /> {<br /> SPTaxonomy.TermSet termSet = group.TermSets[termSetName];<br /><br /> <span style="color: #0000ff">foreach</span> (SPTaxonomy.Term term <span style="color: #0000ff">in</span> termSet.Terms)<br /> { <br /> <span style="color: #0000ff">foreach</span> (SPTaxonomy.Label label <span style="color: #0000ff">in</span> term.GetAllLabels(lcid))<br /> {<br /> <span style="color: #0000ff">string</span> msg = String.Format(<span style="color: #006080">" {0} - ln: {1} - df: {2}"</span>, label.Value, label.Language, label.IsDefaultForLanguage);<br /> lblTermSetList.Text += msg;<br /> }<br /><br /> lblTermSetList.Text += <span style="color: #006080">"<br>"</span>;<br /> }<br /> }<br /> <span style="color: #0000ff">catch</span> (Exception ex)<br /> {<br /> lblTermSetList.Text = <span style="color: #006080">"Argument TermSetName incorrect!! ->"</span> + ex.ToString();<br /> } <br /> }<br />} |
En este código, además de tener en cuenta el idioma del site, listamos también los sinónimos (Labels según la nomenclatura de la Taxonomía) de cada término, teniendo en cuenta si es la Lable por defecto, o no (la Label por defecto, coincide con el nombre del término).
En este código no he entrado a recorrer posibles sub-términos de un término, ya que no lo he necesitado, pero tanto si os hace falta, como si queréis implementar un exportador del almacén de términos, espero que este post os pueda ser de ayuda
Hasta pronto!!
Deja un comentario