2015-11-03 107 views
0

我正在使用以下代码从我公司的Sharepoint下载列表到我的程序。列表名称是“Resurser”。并非所有Sharepoint列表项都被返回,并且并非所有列都可被识别

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上,因为对于每个项目,我收到的号码不像我在Sharepoint上看到的列表的多少个FieldValues。在上面的代码item.FieldValues["Title"]返回列表的第一列(“Namn”)的值。但我似乎并没有找到我正在寻找的所有专栏。

这里是清单的SharePoint上的快照: enter image description here

这里是项目之一的照片时,我将它输出作为“键:值”。 enter image description here

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

回答

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(); 
相关问题