使用CSOM从Sharepoint Online“ SharePoint新闻提要”中检索数据

时间:2018-11-08 18:08:58

标签: sharepoint sharepoint-online csom

我不熟悉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 :(得分:3)

如果不指定列,则不会从呼叫中找回它们。您应该指定要从呼叫中接收的列,这可以通过两种方式实现:

方法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));

Source

答案 1 :(得分:1)

我在使用强类型的“字段”时遇到问题,我找到了以下解决方案:

    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'尚未初始化...”之类的信息(很可能)。