我是SharePoint的新手。我需要使用ClientContext从SP列表中加载一些字段值。我使用共享点客户端对象模型。

这是我的代码:

...
//Web spWeb
//CamlQuery camlQuery

List spList = spWeb.Lists.GetById(parameters.Config.List.ID);

ListItemCollection  itemsCollection = spList.GetItems(camlQuery);

ClientContext.Load(itemsCollection, items => items.ListItemCollectionPosition);

ClientContext.Load(itemsCollection, items => items.Include(item => item.HasUniqueRoleAssignments, item => item.EffectiveBasePermissions, item => item.Id, item => item.FileSystemObjectType));

foreach (Dk14PhysicalField field in parameters.FieldsToReturn)//all required fields come here
{
    ClientContext.Load(itemsCollection, items => items.Include(item => item[field.PhysicalName]));
}

try
{
    ClientContext.ExecuteQuery();
}
catch (Exception ex)
{
    //get exception here: Field or property "LinkTitle" does not exist.
}


CamlQuery xml在哪里:

<View Scope="RecursiveAll">
<ViewFields>
<FieldRef Name="LinkTitle"/>
<FieldRef Name="Summary_x0020_Business_x0020_Des"/>
<FieldRef Name="City"/>
<FieldRef Name="Title"/>
<FieldRef Name="LinkTitleNoMenu"/>
<FieldRef Name="Modified"/>
<FieldRef Name="Author"/>
</ViewFields>
<RowLimit>2147483647</RowLimit>
<Query>
<OrderBy Override="TRUE">
<FieldRef Name="ID"/>
</OrderBy>
<Where>
<Or>...some conditions here...</Or>
</Where>
</Query>
</View>


在我尝试加载计算字段LinkTitleLinkTitleNoMenu之前,这段代码可以正常工作
在这种情况下,我在ExecuteQuery上遇到了异常:'Field or property "LinkTitle" does not exist.'

从理论上讲,我可以得到这些计算字段。为此,我不必加载ListItemCollectionPosition并将仅计算字段包括到ClientContext中。如果我不执行这些技巧之一,执行将失败,并显示不同的错误。

你有什么想法?

最佳答案

似乎当您像这样添加ListItemCollectionPosition字段时

ClientContext.Load(itemsCollection,items => items.ListItemCollectionPosition);

它会在“请求”中自动设置SelectAllProperties = true的值,然后阻止Compute列返回。

然后,您最终收到消息“字段或属性“ XYZ”不存在”。

这仅在CSOM客户端组件的更高版本(即架构版本15.0.0.0和库版本16.0.0.0)上发生

经过多次尝试和错误,我发现通过在单个调用中将其添加为第二个参数不会发生这种情况。

例如,以这种方式请求ID和ListItemCollectionPosition不会设置SelectAllProperties = true。

ClientContext.Load(listitems,items => items.Include(item => item [“ ID”]),l => l.ListItemCollectionPosition);

我建议这是库中的错误,但这似乎可以解决。

07-24 09:38
查看更多