Usar el código para fijar términos a los conjuntos de términos de navegación en SharePoint
Aprenda a utilizar el código para fijar términos a los conjuntos de términos de navegación.
En la creación de taxonomía, el anclaje es la capacidad de adjuntar un término a un objetivo. SharePoint presenta el anclaje de términos. Un término anclado es simplemente un término que se vuelve a usar, excepto si es de solo lectura y no se puede cambiar en la ubicación donde se usa.
En la navegación administrada de SharePoint, la API permite anclar términos nuevos o existentes a un objeto NavigationTermSet . En Microsoft SharePoint Server 2010, los usuarios podían usar de nuevo los términos (y todos los términos anidados bajo los términos reutilizados) en otras ubicaciones de la jerarquía de términos. Después de reutilizar esos términos, podían modificarse en cualquier ubicación y los cambios se reflejaban en cualquier lugar donde se usasen de nuevo.
Aspectos básicos del anclaje de términos
Para comprender el anclaje en SharePoint, es posible que desee obtener información sobre los metadatos administrados, los términos, los conjuntos de términos, la navegación administrada, el almacén de términos y otros conceptos y API relacionados. La tabla 1 describe los artículos que ofrecen más información sobre anclaje.
Tabla 1. Conceptos básicos del anclaje
Título del artículo | Descripción |
---|---|
Breve introducción a la administración de metadatos empresariales para los programadores de Microsoft SharePoint Server 2010 |
Escrito para SharePoint Server 2010, este artículo ofrece información general básica sobre el modelo de programación de metadatos empresariales administrados y sobre conceptos básicos como términos y conjuntos de términos. |
Navegación administrada en SharePoint |
Introducción a la característica de navegación administrada controlada por taxonomía en SharePoint. |
Usar código para completar tareas de anclaje
Puede usar código personalizado del servidor .NET, cliente .NET (CSOM), Silverlight o modelos de programación JavaScript para completar operaciones de anclaje en términos y conjuntos de términos. Los siguientes ejemplos de código .NET incluyen una prueba para anclar términos a conjuntos de términos de navegación, además de un método que puede usar para probar si un objeto Term está anclado a un objeto TermSet especificado. Después, la prueba crea objetos Term y ancla uno de ellos al objeto NavigationTermSet especificado.
Para anclar términos a conjuntos de términos de navegación
El ejemplo siguiente prueba el anclaje de términos a conjuntos de términos de navegación. Usa el objeto NavigationTermSet , que contiene métodos y propiedades que son útiles en escenarios de navegación administrados, como la creación de menús de navegación de sitios controlados por taxonomía.
El ejemplo primero comprueba si existe un objeto NavigationTermSet. Si no existe, entonces el código crea un NavigationTermSet. (Si ya existe, el código elimina el antiguo antes de crear el nuevo). Después, una vez que el código crea algunos objetos Term entre los que elegir, crea un archivo de página de publicación (.aspx) con fines de demostración, la establece como la página objetivo personalizada para términos anclados y luego ancla algunos elementos de navegación a la página.
public void TermPinningTest()
{
using (SPSite site = new SPSite(TestConfig.ServerUrl))
{
using (SPWeb web = site.OpenWeb())
{
TaxonomySession taxonomySession = new TaxonomySession(site, updateCache: true);
// Create the navigation term set.
NavigationTermSet menuNavTermSet = DemoUtilities.SetUpSampleNavTermSet(
this.TestContext, taxonomySession, web);
TermSet menuTaxTermSet = menuNavTermSet.GetTaxonomyTermSet();
TermStore termStore = menuTaxTermSet.TermStore;
Group group = menuTaxTermSet.Group;
// Does the tagging Taxonomy term set already exist?
TermSet taggingTaxTermSet = group.TermSets.FirstOrDefault(
ts => ts.Id == TestConfig.TaggingTermSetId);
if (taggingTaxTermSet != null)
{
Log("Deleting old tagging term set");
// If the tagging Taxonomy term set already exists, delete the old one.
taggingTaxTermSet.Delete();
termStore.CommitAll();
}
Log("Creating the tagging term set");
taggingTaxTermSet = group.CreateTermSet("Demo Tagging TermSet", TestConfig.TaggingTermSetId);
int lcid = termStore.WorkingLanguage;
// Create some terms.
Term taggingProductsTaxTerm = taggingTaxTermSet.CreateTerm("Products", lcid);
taggingProductsTaxTerm.CreateTerm("Electronics", lcid);
taggingProductsTaxTerm.CreateTerm("Footwear", lcid);
taggingProductsTaxTerm.CreateTerm("Sports", lcid);
termStore.CommitAll();
/// Pinning the products subtree. Pins the "Products" Term object to the NavigationTermSet object.
Term menuProductsTaxTerm = menuTaxTermSet.ReuseTermWithPinning(taggingProductsTaxTerm);
termStore.CommitAll();
/// Creating the publishing page template DemoTargetPage.aspx");
PublishingWeb publishingWeb = PublishingWeb.GetPublishingWeb(web);
SPListItem pageListItem = null;
PublishingPage publishingPage;
try
{
pageListItem = web.GetListItem(web.Url + "/Pages/DemoTargetPage.aspx");
publishingPage = PublishingPage.GetPublishingPage(pageListItem);
}
catch (FileNotFoundException)
{
Log("Creating new target page");
publishingPage = publishingWeb.AddPublishingPage("DemoTargetPage.aspx", publishingWeb.DefaultPageLayout);
Log("Checking in target page draft");
publishingPage.CheckIn("TermPinningTest");
}
// Set a custom target page for the pinned terms and then set some navigation properties.
// Normally the navigation objects are obtained by way of an optimized function such as
// TaxonomyNavigation.GetTermSetForWeb() or TaxonomyNavigationContext.Current.NavigationTerm.
// The function guarantees that URLs will be resolved using a valid NavigationTerm.View.
// But because we are populating totally new data, the cache will probably not be updated
// yet, so instead we manually construct a view using GetAsResolvedByWeb().
NavigationTerm menuProductsNavTerm = NavigationTerm.GetAsResolvedByWeb(menuProductsTaxTerm,
web, StandardNavigationProviderNames.GlobalNavigationTaxonomyProvider);
menuProductsNavTerm.TargetUrl.Value = publishingPage.Uri.AbsolutePath;
menuProductsNavTerm.TargetUrlForChildTerms.Value = publishingPage.Uri.AbsolutePath;
termStore.CommitAll();
Log("TermPinningTest completed successfully");
}
}
}