执行CAML查询sharepoint 2007时出现异常

时间:2012-01-23 11:42:05

标签: sharepoint sharepoint-2010 sharepoint-2007

文档库中列的名称是: 列名=>关键词(子流程,方法,服务模型等) 列类型=>多行文字

我们在caml查询中使用上面的列名,如下所示

query.Query = "<Where><Eq><FieldRef Name='Keywords(Sub-Processes,Methodology,Servicing Model, etc)'/><Value Type='Text'>Merchant Services,Merchant Set Up</Value></Eq></Where>";

但是当我们运行代码时,我们得到了异常:

  

Microsoft.SharePoint.SPException:一个或多个字段类型不是   安装得当。转到列表设置页面以删除它们   字段。

这是否是异常,因为如果是的话,列名中使用了特殊字符,那么我该如何纠正呢。

我们无法更改列名,因为它是必需的。

3 个答案:

答案 0 :(得分:2)

内部名称和显示名称彼此完全不同。在某些情况下它们可以是相同的但不是全部。在两个带有空格的单词之间通常有一个转义序列。

在运行时检索内部名称而不是硬编码通常是一种很好的做法。

以下是如何操作:

var internalName=list.Fields.GetFieldByInternalName(column.ColumnName).Title;

答案 1 :(得分:1)

我可以肯定地告诉你(鉴于特殊字符),这不是该字段的内部名称。它可能是显示名称,但它不是内部名称。

错误是因为没有任何字段具有您提供的内部名称。

就个人而言,当我想找到字段的内部名称时,我会转到列表的列表设置并编辑列。这样做时,会有一个带有'field ='的查询参数,后跟内部名称。还有其他可以找到的地方,以及可用于获取此类信息的其他sharepoint工具(另一张海报提到了SharePoint Manager)。

答案 2 :(得分:0)

我使用了“Keywords_x0020_ x002f _x0020_Folksnomy”,这对我有用。 我获取了Document库的所有列并将其绑定到GridView,在GridView中我找到了这个名称。

显示列名称=&gt;关键词(子过程,方法,服务模型等)

错误的是=&gt;      Keywords_x0020_(子过程,_x0020_Methodology,_x0020_Servicing_x0020_Model,_x0020_etc)

新发现的正确名称=&gt; Keywords_x0020_ x002f _x0020_Folksnomy