Archivo de la etiqueta: Term

Obtener la jerarquía de la Taxonmia en SPS 2010

Una de las opciones en SharePoint 2010 para la etiquetación de contenido es el uso del Servicio de Metadatos que implementa la plataforma. Una de las mejoras formas de conocer el modelo de objeto de taxonomia (TermStore, Group, TermSet y Term) es la realización de un pequeño ejemplo, donde se pinta en un control treeview jerarquicamente todos los objetos definidos.

En el siguiente ejemplo se muestra, he incluido en un Visual WebPart un control treeview al que he llamado taxTree, el cual pinta la taxonomia definida en el Servicio de Metadatos de SharePoint. En cuanto a las imagenes usadas, se reutilizan las propias de SharePoint almacenadas en /_layouts/images/:

private TreeNode StoreNode;
private TreeNode GroupNode;
private TreeNode SetNode;
private TreeNode TermNode;
private String ImageFolder;

protected void Page_Load(object sender, EventArgs e)
{
  taxTree.Nodes.Clear();
  GetTaxonomyStructure();
}

private void GetTaxonomyStructure()
{
  ImageFolder = "/_layouts/images/";
  taxTree.ShowLines = true;
  TaxonomySession session = new TaxonomySession(SPContext.Current.Site);
  foreach (TermStore store in session.TermStores)
  {
	StoreNode = new TreeNode(store.Name, store.Id.ToString(), ImageFolder + "EMMRoot.png");
	taxTree.Nodes.Add(StoreNode);
	foreach (Group group in store.Groups)
	{
	  GroupNode = new TreeNode(group.Name, group.Id.ToString(), ImageFolder + "EMMGroup.png");
	  StoreNode.ChildNodes.Add(GroupNode);
	  foreach (TermSet set in group.TermSets)
	  {
		SetNode = new TreeNode(set.Name, set.Id.ToString(), ImageFolder + "EMMTermSet.png");
		GroupNode.ChildNodes.Add(SetNode);
		foreach (Term node in set.Terms)
		{
		  TermNode = new TreeNode(node.Name, node.Id.ToString(), ImageFolder + "EMMTerm.png");
		  SetNode.ChildNodes.Add(TermNode);
		  GetChildTerms(TermNode, node);
		}
	  }
	}
  }
}

private void GetChildTerms(TreeNode actNode, Term term)
{
  foreach (Term subTerm in term.Terms)
  {
	TreeNode subNode = new TreeNode(subTerm.Name, subTerm.Id.ToString(), ImageFolder + "EMMTerm.png");
	actNode.ChildNodes.Add(subNode);
	GetChildTerms(subNode, subTerm);
  }
}