我有一个CAML
查询,该查询从SharePoint
列表中检索数据。它通过1个输入,但在2个或更多时失败。
错误:
Microsoft.SharePoint.SPException:一种或多种字段类型未正确安装。转到列表设置页面以删除这些字段。---> System.Runtime.InteropServices.COMException:一种或多种字段类型未正确安装。转到列表设置页面以删除这些字段。
经过研究,可能的原因可能是由于SharePoint列不匹配InternalName
。但是,查询设法对1个输入执行,但不对2个或更多输入执行。
根据以下查询示例,FAIL
案例格式是否错误?
1.通过:
<Where>
<And>
<Eq>
<FieldRef Name="Header1Ref"/><Value Type="Text">H1</Value>
</Eq>
<Neq>
<FieldRef Name ="ContentType"/><Value Type="Text">Document</Value>
</Neq>
</And>
</Where>
2.失败:
<Where>
<And>
<Eq>
<And>
<Or>
<Eq>
<FieldRef Name="Header1Ref"/><Value Type="Text">H1</Value>
</Eq>
<Eq>
<FieldRef Name="Header1Ref"/><Value Type="Text">H2</Value>
</Eq>
</Or>
<Neq>
<FieldRef Name ="ContentType"/><Value Type="Text">Document</Value>
</Neq>
</And>
</Eq>
</And>
</Where>
3.失败:
<Where>
<And>
<Eq>
<And>
<Or>
<FieldRef Name="Header1Ref"/><Value Type="Text">H1</Value>
<FieldRef Name="Header1Ref"/><Value Type="Text">H2</Value>
</Or>
<Neq>
<FieldRef Name ="ContentType"/><Value Type="Text">Document</Value>
</Neq>
</And>
</Eq>
<Neq>
<FieldRef Name ="ContentType"/><Value Type="Text">Document</Value>
</Neq>
</And>
</Where>
这是CAML查询的问题,我将代码修改如下,以供您参考。
string siteUrl = "http://sp2013";
string listTitle = "DL";
string viewName="Test";
using (SPSite site = new SPSite(siteUrl))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists[listTitle];
SPView view=list.Views[viewName];
string orQuery = "<Or><Eq><FieldRef Name=\"Header1Ref\"/><Value Type=\"Text\">H1</Value></Eq><Eq><FieldRef Name=\"Header1Ref\"/><Value Type=\"Text\">H2</Value></Eq></Or>";
string subQuery = String.Format("<Neq><FieldRef Name =\"ContentType\"/><Value Type=\"Text\">{0}</Value></Neq>", "Document");
string queryText = String.Format("<Where><And>{0}{1}</And></Where>", orQuery, subQuery);
var query = new SPQuery(view)
{
Query = queryText,
ViewAttributes = "Scope=\"RecursiveAll\"",
ViewFields = @"<FieldRef Name='RecordTitle'/>",
};
SPListItemCollection items = list.GetItems(query);
foreach (SPListItem item in items)
{
Console.WriteLine(item["RecordTitle"]);
}
Console.ReadKey();
}
}
CAML查询如下。
<Where>
<And>
<Or>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H1</Value></Eq>
<Eq><FieldRef Name="Header1Ref"/><Value Type="Text">H2</Value></Eq>
</Or>
<Neq>
<FieldRef Name="ContentType"/><Value Type="Text">Document</Value>
</Neq>
</And>
</Where>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句