asp.net MVC - 使用 CAML 查询 SharePoint 2010 列表时,在 .NET C# MVC 3

本文关键字:MVC 列表 NET SharePoint net 使用 CAML asp 查询 2010 | 更新日期: 2023-09-27 17:56:36

我正在尝试从 SharePoint 2010 列表中获取单个项目。我正在使用.NET C# MVC 3框架。

我在以下代码块中从 ExecuteQuery() 方法收到运行时错误"ServerException,来自 HRESULT 的异常:0x80131904"。

 ClientContext spContext = new ClientContext(Settings.Default.SharePointSite + Settings.Default.SharePointWeb);
spContext.Credentials = new NetworkCredential("[REMOVED]", "[REMOVED]", "[REMOVED]");
var list = spContext.Web.Lists.GetByTitle("ExampleList");
var camlQuery = new CamlQuery();
camlQuery.ViewXml = "<View><Query><Where><Eq><FieldRef Name='UniqueId'/>" +
    "<Value Type='Lookup'>" + id.ToString() + "</Value></Eq></Where></Query></View>";
var items = list.GetItems(camlQuery);
spContext.Load(items);
spContext.ExecuteQuery();

如果传递空的 CAML 查询,则会填充列表的所有元素的"items",因此基本连接正常工作。将任何 CAML 引入 。ViewXML 已导致已声明的异常,或者未影响"项"的结果集(如,已返回所有项)。

感谢您提供的任何帮助。

asp.net MVC - 使用 CAML 查询 SharePoint 2010 列表时,在 .NET C# MVC 3

我遇到了类似的问题,我试图查询一个列表并返回多选查找"大海捞针"中包含"针"值的所有项目:

<Where>
  <Contains><FieldRef Name='Environments' /><Value Type='Lookup'>DV</Value></Contains>
</Where>

最初,我将 value 元素的 Type 属性设置为"文本"(如果未指定 Type,这也是默认值),并且得到"发生异常。(来自 HRESULT 的异常:0x80020009 (DISP_E_EXCEPTION))"错误。

然后我添加了正确的 Type 属性,并错误地将 LookupId 属性添加到 FieldRef 元素,这给了我零结果但没有错误。

事实证明,原因

很合理,我发现 http://sharepointmagazine.net/articles/writing-caml-queries-for-retrieving-list-items-from-a-sharepoint-list 上有描述。基本上,通过指定 Type='Lookup',您正在根据查找字段的显示值进行评估,但更进一步并在另一个元素上说 LookupId='TRUE' 意味着"评估外来项目 ID,而不是显示值"。

因此,如果使用 CAML 查询查找字段,则该值应始终为"Lookup"类型,但是否使用 LookupId 将取决于您是要比较查找的键还是值。

试试这个:

<FieldRef Name="UniqueId" LookupId="TRUE"/><Value Type="Lookup">

而不是

<FieldRef Name='UniqueId'/><Value Type='Lookup'>

是的,CAML 区分大小写