NavigationTerm.GetWebRelativeFriendlyUrl() renvoie la valeur en utilisant SSOM, mais renvoie NULL en utilisant CSOM
-
29-09-2020 - |
Question
J'utilise la navigation par métadonnées gérées et j'essaie d'y accéder à l'aide de CSOM.Le problème que j'ai est que je ne parviens pas à obtenir les URL conviviales pour les termes.
Si j'exécute ce code à l'aide du modèle d'objet côté serveur, l'appel à NavigationTerm.GetWebRelativeFriendlyUrl() renvoie l'URL Web relative-friendly comme prévu.
using (SPSite site = new SPSite("http://sp2013"))
{
SPWeb web = site.RootWeb;
NavigationTermSet navigationTermSet = TaxonomyNavigation.GetTermSetForWeb(web, "GlobalNavigationTaxonomyProvider", true);
foreach (NavigationTerm term in navigationTermSet.Terms)
{
Console.WriteLine(term.TaxonomyName + " - " + term.GetWebRelativeFriendlyUrl());
foreach (NavigationTerm childTerm in term.Terms)
{
Console.WriteLine(" -- " + childTerm.TaxonomyName + " - " + childTerm.GetWebRelativeFriendlyUrl());
}
}
}
Si j'exécute ce code à l'aide du modèle objet du site client, l'appel à NavigationTerm.GetWebRelativeFriendlyUrl() renvoie NULL.
using (ClientContext clientContext = new ClientContext("http://sp2013"))
{
NavigationTermSet navigationTermSet = TaxonomyNavigation.GetTermSetForWeb(clientContext, clientContext.Web, "GlobalNavigationTaxonomyProvider", true);
clientContext.Load(navigationTermSet, x => x.Terms);
clientContext.ExecuteQuery();
foreach (NavigationTerm term in navigationTermSet.Terms)
{
clientContext.Load(term, x => x.Terms);
clientContext.ExecuteQuery();
Console.WriteLine(term.TaxonomyName + " - " + term.GetWebRelativeFriendlyUrl().Value);
foreach (NavigationTerm childTerm in term.Terms)
{
clientContext.Load(childTerm, x => x.Terms);
clientContext.ExecuteQuery();
Console.WriteLine(" --- " + childTerm.TaxonomyName + " - " + childTerm.GetWebRelativeFriendlyUrl().Value);
}
}
}
Avez-vous une idée de ce qui ne va pas avec le code CSOM ou de la façon dont je peux obtenir les URL conviviales pour les termes ?
La solution
Assurez-vous de lancer cet appel GetWebRelativeFriendlyUrl
comme ci-dessous :
var friendlyUrl = term.GetWebRelativeFriendlyUrl();
Avant votre appel au :
clientContext.ExecuteQuery();
Utilisez ensuite le friendlyUrl
dans votre sortie :
Console.WriteLine(" --- " + childTerm.TaxonomyName + " - " + friendlyUrl);
Petite remarque complémentaire :La méthode GetWebRelativeFriendlyUrl
renvoie un type ClientResult<T>
.Pour que la variable soit renseignée, vous devez appeler ctx.ExecuteQuery()
après la déclaration.(où ctx est le ClientContext établi.)