Получить данные из Sharepoint Online «Лента новостей SharePoint» с помощью CSOM - PullRequest
0 голосов
/ 08 ноября 2018

Я не знаком с Sharepoint и мне нужно получить данные из него для использования в приложении, использующем CSOM.

Я могу подключаться и получать данные для списков на сайте. У меня проблема в том, что большая часть нужных мне данных обернута в то, что мне сказали, в «Ленте новостей SharePoint».

Ниже приведено то, что у меня есть, но оно не работает. Кажется, список listItemCollection заполнен (17 элементов), но я не вижу никаких свойств, которые позволили бы мне получить данные.

Как получить данные со страниц в SitePages?

public class VacancyService : IVacancyService
{
    private readonly ISiteCredentialService _siteCredentialService;

    private const string SharePointSiteUrl = "https://[my].sharepoint.com/vacancies/";

    public VacancyService(ISiteCredentialService siteCredentialService)
    {
        _siteCredentialService = siteCredentialService;
    }

    public List<VacancyDto> GetData()
    {
        List<VacancyDto> result = new List<VacancyDto>();

        using (var context = new ClientContext(SharePointSiteUrl))
        {
            context.Credentials = _siteCredentialService.GetSharepointOnlineCredentials();

            // Assume the web has a list named "Vacancys". 
            var listTitle = "Site Pages";

            List list = context.Web.Lists.GetByTitle(listTitle);
            context.Load(list);

            CamlQuery cQuery = new CamlQuery();
            ListItemCollection listItemCollection = list.GetItems(cQuery);

            context.Load(listItemCollection, items => items.Include(item => item));

            context.ExecuteQuery();

            foreach (ListItem listItem in listItemCollection)
            {
                string itemTitle = listItem.GetFieldValueString("Title");

                VacancyDto dto = new VacancyDto()
                {
                    Title = itemTitle
                };

                result.Add(dto);
            }

        }

        return result;
    }
}

Ответы [ 2 ]

0 голосов
/ 25 января 2019

У меня были проблемы со строго типизированными "полями", и я нашел следующее решение:

    var list = context.Web.Lists.GetByTitle("Site Pages");
    var items = list.GetItems(CamlQuery.CreateAllItemsQuery());
    context.Load(items, icol => icol.Include(i => i["DisplayName"], i => i["Id"], 
                                   i => i["ID"], i => i.ContentType, i => i["Editor"]));
    context.ExecuteQuery();

Таким образом, вы можете указывать имена полей в двойных кавычках. Также полезно посмотреть в QuickWatch (items => Results View => [0]), чтобы увидеть, какие поля VisualStudio пытается заполнить. При добавлении любых полей, которые отображаются красным цветом, а значение говорит что-то вроде «Свойство или поле 'FileSystemObjectType' не было инициализировано ...» получит эти значения для вас (скорее всего).

0 голосов
/ 12 ноября 2018

Если вы не укажете столбцы, вы не получите их обратно после звонка. Вы должны указать столбцы, которые вы хотите получить от вызова, это может быть достигнуто двумя способами:

Метод 1 (Просмотр XML):

camlQuery.ViewXml = "<View><Query><Where><Geq><FieldRef Name='ID'/>" +
            "<Value Type='Number'>10</Value></Geq></Where></Query><RowLimit>100</RowLimit></View>";

Метод 2 (включает метод):

context.Load(collListItem, items => items.Include(item => item.Id,
                item => item.DisplayName,
                item => item.HasUniqueRoleAssignments));

Источник

...