使用CSOM从Sharepoint列表中获取所有项目,包括查找值



我想从Sharepoint列表中检索所有项目,包括查找字段的ID和值。查找列表与查询列表位于同一网站/url上。目前我得到了一个";属性或字段尚未初始化";错误

如何将查找字段正确加载到客户端上下文中,以便可以访问该属性?

在搜索和尝试了不同的东西但没有成功之后,例如获得了列表中的所有相关字段。GetRelatedFields((,并通过迭代相关字段集合中的列表ID来加载所有列表中的所有字段,我需要帮助。

我再也看不到森林了。感谢任何提示。提前谢谢。

更新

发生了两件事。首先,我也忘记了将列表对象加载到上下文中。其次,我试图请求一个配置错误的属性/列。

Sharepoint Online上的列表是从另一个Sharepoint网站复制的,该网站包括用于查找的列表的自动复制。

这种重复似乎损坏了查找列。我不得不手动删除查找列并将其读取到请求的列表中。

现在,它起作用了!:(

using System;
using System.Collections.Generic;
using System.Linq;
using SP = Microsoft.SharePoint.Client;
namespace Theroka {
class Sharepoint {
private private SP.ClientContext context;
// credential handling, authorization, context creation, etc. ....

public void getItems() {
SP.List list = this.context.Web.Lists.GetByTitle("NameOfList");
this.context.Load(list); // UPDATE: I've forgot to load the list too
this.context.Load(list.Fields, c => c.Where(e => e.Hidden != true));
this.context.ExecuteQuery();
ListItemCollectionPosition position = null;
do {
CamlQuery query = CamlQuery.CreateAllItemsQuery(5000);
query.ListItemCollectionPosition = position;
SP.ListItemCollection items = list.GetItems(query);
this.context.Load(items);
this.context.ExecuteQuery();
position = items.ListItemCollectionPosition;
foreach(SP.ListItem item in items) {
// this works now
SP.FieldLookupValue lv = (item["LookupFieldName"] as SP.FieldLookupValue);
Console.WriteLine("{0}t{1}t{2}", item.Id, item["Title"], lv.LookupValue.ToString());
}
} while (position != null);
}
}
}

问候,

theroka

您可以尝试将列表项的所有字段作为文本加载到上下文中,然后只显示它们,我认为这是最简单的方法,但可能不是最有效的方法。在这种情况下,查找列也应该以文本值(而不是id(的形式可见。

以文本形式包含字段值您需要将其与加载项一起加载到上下文中。所以以你的例子来说,它应该是类似的东西

this.context.Load(items, items => items.Include(item => item.FieldValuesAsText));

之后,您应该能够获得查找列的值,如:

item.FieldValuesAsText["LookupFieldName"]

我希望这对有任何帮助

最新更新