我正在开发一个Silverlight应用程序,该应用程序要求允许用户对文档库中的文档进行全文搜索,我正在使用search.asmx Web服务。此外,允许用户通过某些元数据约束进行搜索。例如,每个文档的列表条目中都有一个“语言”字段。我通过在文档库上运行递归Caml查询来完成此任务。
不幸的是,我遇到了一个问题:search.asmx文件返回的文档的标题是实际文档的标题,其中客户端对象模型返回的文档的标题是内容存储在SharePoint列表中的“标题”字段。有没有办法让客户端对象模型返回文档的真实标题,或从sharepoint企业搜索Web服务中获取所有返回文档“标题”字段的值?我已经搜索过,但还是找不到办法。
谢谢。
search.asmx网络服务查询包示例:
<QueryPacket>
<Query>
<Context>
<QueryText type='MSSQLFT'>
SELECT Name, Title, Path, Description, Write, Rank, Size FROM SCOPE() WHERE FREETEXT('something') AND CONTAINS(Path,'http://localhost/Lists/DocLibrary')
</QueryText>
</Context>
</Query>
</QueryPacket>
客户端对象模型CamlQuery示例:
<View Scope="Recursive">
<Query>
<Where>
<Eq>
<FieldRef Name="Language" />
<Value Type="Text">English</Value>
</Eq>
</Where>
</Query>
</View>
答案 0 :(得分:0)
我认为最简单的方法是让客户端对象模型返回真正的“标题”字段。
我认为您的问题来自于SharePoint中的列有许多名称。一些用于UI(显示名称),一些是内部(内部名称)。当您执行SPQuery时,如果要确保获得正确的SPQuery,则必须使用列的内部名称(内部名称是唯一的,显示名称不是)。 search.asmx Web服务将使用一个值,但SPQuery将使用另一个值。
“标题”列,正如您所发现的,“标题”是SharePoint列表中“标题”列的内部名称。如果您想获得另一个字段,则需要找到其内部名称。
我建议您下载并使用SharePoint Manager。它是客户端对象模型的直观表示。在这种情况下,您可以导航到文档库,指向要在SPQuery中获取的字段,并查看其“内部名称”值。如果你的FieldRef使用那个值你的SPQuery,我很确定你会得到你期望的结果。