并非所有Sharepoint列表项都会返回,并且不能识别所有列

时间:2015-11-03 16:08:21

标签: c# sharepoint caml

我使用以下代码从我公司的Sharepoint下载列表到我的程序。列表名称是“Resurser”。

var context = new ClientContext(@"MY_SHAREPOINT_SERVER_URL");
var passWord = new SecureString();
foreach (char c in "MY_PASSWORD".ToCharArray()) passWord.AppendChar(c);
SharePointOnlineCredentials _myCredentials = new SharePointOnlineCredentials("MY_USERNAME", passWord);
context.Credentials = _myCredentials;
List list = context.Web.Lists.GetByTitle("Resurser");
CamlQuery query = new CamlQuery();  
query.ViewXml = "<View/>";  
ListItemCollection items = list.GetItems(query);  
context.Load(list);  
context.Load(items);  
context.ExecuteQuery();
foreach (ListItem item in items)
{
    Console.WriteLine(item.FieldValues["Title"]);
}
Console.ReadKey();

我可以清楚地看到,我只从列表中收到77个项目,而列表中有更多项目。

我怎么能:

  1. 下载整个列表;
  2. 读取Sharepoint上显示的列表项,因为对于每个项目,我收到的数量FieldValues与我在Sharepoint上看到的列表看起来不太相似。在上面的代码中,item.FieldValues["Title"]返回列表第一列的值(“Namn”)。但我似乎找不到我要找的所有专栏。
  3. 以下是Sharepoint列表的快照: enter image description here

    这是我将其输出为“key:value”时的一个项目的图片。 enter image description here

    那么是否有更简单的方法来遍历Sharepoint列表并下载所有行?

1 个答案:

答案 0 :(得分:0)

如果我理解了您的问题,那么您没有获得列表中所有可用字段的值,对吧?在这种情况下,您可以考虑显式使用ClientRuntimeContext.Load<T> method指定要检索的字段值。以下示例演示了如何检索所有列表字段的值:

var list = ctx.Web.Lists.GetByTitle("Contacts");
ctx.Load(list, l => l.Fields);
ctx.ExecuteQuery();
//get all available fields in list
var fieldNames = list.Fields
                 .Where(f => f.FieldTypeKind != FieldType.Computed && f.FieldTypeKind != FieldType.File && f.FieldTypeKind != FieldType.Recurrence && f.FieldTypeKind != FieldType.CrossProjectLink && f.FieldTypeKind != FieldType.AllDayEvent)
                 .Select(f => f.InternalName).ToList();
 //construct expression to retrieve all field values   
 var includes = fieldNames.Select(name => (Expression<Func<ListItemCollection, object>>) (icol => icol.Include(i => i[name])));

 var items = list.GetItems(CamlQuery.CreateAllItemsQuery());
 ctx.Load(items, includes.ToArray());
 ctx.ExecuteQuery();