我正在尝试从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会导致已经声明的异常或者没有影响“items”的结果集(例如,所有项目都已返回)。
您可以提供任何帮助。
答案 0 :(得分:2)
我遇到了类似的问题,我试图查询列表并返回多选项查找“haystack”中包含“needle”值的所有项目:
<Where>
<Contains><FieldRef Name='Environments' /><Value Type='Lookup'>DV</Value></Contains>
</Where>
最初我将value元素的Type属性设置为“Text”(如果没有指定Type也是默认值),并且得到“Exception occurred。(HRESULT异常:0x80020009(DISP_E_EXCEPTION))”错误。< / p>
然后我添加了正确的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将取决于您是否要比较查找的键或值。
答案 1 :(得分:0)
试试这个:
<FieldRef Name="UniqueId" LookupId="TRUE"/><Value Type="Lookup">
而不是
<FieldRef Name='UniqueId'/><Value Type='Lookup'>
是的,caml区分大小写