NavigationTerm.GetWebRelativeFriendlyUrl() возвращает значение, используя SSOM, но возвращает NULL, используя CSOM.

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/109881

Вопрос

Я использую управляемую навигацию по метаданным и пытаюсь получить к ней доступ с помощью 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.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top