Caml构建器查询在代码中不起作用

时间:2014-05-31 02:12:36

标签: javascript sharepoint-2013 caml csom

我在这里遇到麻烦了!我有一个sharepoint网站,其中有一个照片库列表(PhotoGallery)。我需要查询此列表确实从指定的库(文件夹)中恢复图像。我开发了一个带有选择菜单的Web部件,该菜单可以加载此照片库中的所有画廊(文件夹)。然后,当我选择特定的图库(文件夹)时,模式会显示该图库(文件夹)中的图像。但我无法取回正确的结果。查询只返回列表中所有图库(文件夹)的列表。没有图像返回。但有趣的是,当我停止浏览器并使用文件夹值复制查询并将其粘贴到 Caml Query Helper 时,查询工作正常!我的疑问是:

var camlQ = new SP.CamlQuery();

camlQ.set_viewXml("<Where><And><Eq><FieldRef Name=\"ContentType\" /><Value Type=\"Text\">Image</Value></Eq><Contains><FieldRef Name=\"FileRef\" /><Value Type=\"Text\">" + VALUE_FROM_OPTION + "</Value></Contains></And></Where>");

var clientCtx = new SP.ClientContext.get_current();
this.results = clientCtx.get_web().get_lists().getByTitle("PHOTO_GALLERY_NAME").getItems(camlQ);

clientCtx.load(this.results);

clientCtx.executeQueryAsync(Function.createDelegate(this, function(sender, args){

    // SOME CODE

}), Function.createDelegate(this, function(sender, args){

    // SOME CODE

}));

1 个答案:

答案 0 :(得分:1)

您的CAML查询似乎是正确的,但SP.CamlQuery.set_view方法接受xml,其中根元素为View(还需要Query元素)。

因此,将Where块包装在Query元素中,然后将其包装在View元素中,例如:

var query=new SP.CamlQuery();
query.set_viewXml('<View Scope="RecursiveAll"><Query><Where><Eq><FieldRef Name="FSObjType" /><Value Type="Integer">1</Value></Eq></Where></Query></View>');