我有一个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>
答案 0 :(得分:0)
这是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>