我不熟悉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;
}
}
答案 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));
答案 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'尚未初始化...”之类的信息(很可能)。