NavigationTerm.GetWebRelativeFriendlyUrl() возвращает значение, используя SSOM, но возвращает NULL, используя CSOM.
-
29-09-2020 - |
Вопрос
Я использую управляемую навигацию по метаданным и пытаюсь получить к ней доступ с помощью CSOM.Проблема, с которой я столкнулся, заключается в том, что я не могу получить понятные URL-адреса для терминов.
Если я запускаю этот код с использованием объектной модели на стороне сервера, вызов NavigationTerm.GetWebRelativeFriendlyUrl() возвращает относительный веб-удобный URL-адрес, как и ожидалось.
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());
}
}
}
Если я запускаю этот код с использованием объектной модели клиентского сайта, вызов NavigationTerm.GetWebRelativeFriendlyUrl() возвращает 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);
}
}
}
Есть идеи, что не так с кодом CSOM или как получить понятные URL-адреса для условий?
Решение
Убедитесь, что вы выполнили этот звонок GetWebRelativeFriendlyUrl
например, ниже:
var friendlyUrl = term.GetWebRelativeFriendlyUrl();
Перед вашим звонком:
clientContext.ExecuteQuery();
Затем используйте friendlyUrl
в вашем выводе:
Console.WriteLine(" --- " + childTerm.TaxonomyName + " - " + friendlyUrl);
Небольшое примечание:Метод GetWebRelativeFriendlyUrl
возвращает тип ClientResult<T>
.Чтобы переменная была заполнена, вам нужно вызвать ctx.ExecuteQuery()
после декларации.(где ctx — установленный ClientContext.)