2015-11-03 90 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(); 
相關問題