Не удалось получить DisplayName функции с помощью CSOM

Я пытаюсь получить имена всех функций, доступных в семействе веб-сайтов, с помощью CSOM. Ниже код отлично работает, чтобы получить список всех функций, но я не могу получить свойство DisplayName.

            ClientContext clientContext = new ClientContext(URL);
            Web oWebsite = clientContext.Web;
            clientContext.Load(oWebsite, website => website.MasterUrl, website => website.CustomMasterUrl, website => website.Features);
            clientContext.ExecuteQuery();
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Authenticated!");
            Console.ForegroundColor = defaultForeground;

            var webFeatures = clientContext.Web.Features;
            clientContext.Load(webFeatures, fcol => fcol.Include( f => f.DefinitionId));
            clientContext.ExecuteQuery();
            foreach (var f in webFeatures)
            {
                Console.WriteLine(f.DefinitionId);
            }

Вот сообщение, в котором объясняется как получить DisplayName, но у меня это не работает.

Я обновил SDK для SP2013, но не могу найти это свойство. Не могли бы вы сообщить мне, возможно ли это вообще?


person Ishan    schedule 11.12.2015    source источник
comment
Я тоже сталкиваюсь с той же проблемой. Любое разрешение @Ishan?   -  person Karthik    schedule 13.07.2016
comment
@Karthik доступен только для v16   -  person Ishan    schedule 08.08.2016


Ответы (2)


Feature.DisplayName property недоступен, поскольку вы не запрашиваете его с сервера, замените строку:

clientContext.Load(webFeatures, fcol => fcol.Include(f => f.DefinitionId));

с:

clientContext.Load(webFeatures, fcol => fcol.Include(f => f.DisplayName,f => f.DefinitionId));

Выражение fcol.Include(f => f.DisplayName,f => f.DefinitionId) создает запрос для получения функций с включенными свойствами Feature.DefinitionId и Feature.DisplayName.

Пример

using (var ctx = new ClientContext(url))
{
    var webFeatures = ctx.Web.Features;
    ctx.Load(webFeatures, fcol => fcol.Include(f => f.DisplayName,f => f.DefinitionId));
    ctx.ExecuteQuery();
}

Обновить

person Vadim Gremyachev    schedule 15.12.2015
comment
Спасибо Вадим. Я уже пробовал это, пропустил, чтобы включить его в свой вопрос. В тот момент, когда я включаю f => f.DisplayName, отображается ошибка. - person Ishan; 15.12.2015
comment
Сообщение об ошибке: Cannot convert lambda expression to type 'System.Linq.Expressions.Expression<System.Func<Microsoft.SharePoint.Client.FeatureCollection,object>>[]' because it is not a delegate type - person Ishan; 15.12.2015
comment
@Ishan, кажется, вы ссылаетесь на библиотеку CSOM v14 в своем проекте (более подробную информацию см. В разделе обновлений). Поскольку вопрос отмечен тегом SharePoint 2013, убедитесь, что указана ссылка на библиотеку CSOM v15. - person Vadim Gremyachev; 15.12.2015
comment
Сначала я тоже чувствовал то же самое, поэтому я снова загрузил CSOM v15, он запросил вариант восстановления, что означало, что на моей машине уже была установлена ​​​​библиотека v15. - person Ishan; 15.12.2015
comment
Я использую v16 и подключаюсь к sp2016. Получение ошибки для включения ключевого слова. не могли бы вы сообщить мне, какое пространство имен мне нужно включить, чтобы исправить ошибку. СООБЩЕНИЕ ОБ ОШИБКЕ: 'FeatureCollection' не содержит определения для 'Include', и не может быть найден метод расширения 'Include', принимающий первый аргумент типа 'FeatureCollection' (вам не хватает директивы using или ссылки на сборку?) - person Ravi Khambhati; 31.08.2017

У меня похожая ситуация, похоже это просто невозможно для SP 2013 CSOM (v15), потому что даже в последней (на данный момент) библиотеке Microsoft.SharePoint.CLient.dll 15.0.5127.1000 (от 4.2019 CU) этого свойства нет. несмотря на то, что в документация упомянула, что она есть.

person user2866534    schedule 02.12.2019