CAML 查询包含不起作用

Posted

技术标签:

【中文标题】CAML 查询包含不起作用【英文标题】:CAML query contains does not work 【发布时间】:2015-03-03 14:17:51 【问题描述】:

我有这段代码,它需要标题的一部分来执行查询和过滤列表的部分内容:

<script type="text/javascript">

var items_lista; 

    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', Initialize);

    function Initialize() 

        var PDP_Link_Filter = $("title").text().split("-")[1].split(".")[0];  

        PDP_Link_Filter = "Link_" + PDP_Link_Filter + "_"; 

        var contexto = SP.ClientContext.get_current();
        var web = contexto.get_web();
        var listas = web.get_lists();
        var parametros = listas.getByTitle('Parametrizacion_WF');

        var query = new SP.CamlQuery();

        query.set_viewXml("<Query><Where><Contains><FieldRef Name='Title'/>" + 
                          "<Value Type='Text'>" + PDP_Link_Filter + "</Value></Contains></Where></Query>");

        console.log(query);

        items_lista = parametros.getItems(query);
        contexto.load(items_lista);
        contexto.executeQueryAsync(Function.createDelegate(this, this.onRequestSucceeded), Function.createDelegate(this, this.onRequestFailed));

     //Initialize 

    function onRequestSucceeded() 
    
        console.log(items_lista); 
        for(i = 0; i < items_lista.get_count(); i++) 
        
            console.log(items_lista.get_item(i).get_item('Title'));
               
    
    function onRequestFailed()  console.log('Error'); 

</script>

它生成的查询过滤器(通过console.log()获得):

<Query><Where><Contains><FieldRef Name='Title'/><Value Type='Text'>P000</Value></Contains></Where></Query>

但是当 for 循环运行时,它会显示列表的所有内容,而不仅仅是匹配过滤器的行。

我做错了什么?

【问题讨论】:

【参考方案1】:

这很可能与 SP.CamlQuery.viewXml property 的格式错误有关。由于此属性需要定义列表视图的 XML 模式,因此 root 元素必须是 View 元素,例如:

var ctx = SP.ClientContext.get_current();
var list = ctx.get_web().get_lists().getByTitle(listTitle);
var items = list.getItems('<View Scope="RecursiveAll"><Query></Query></View>');

在您的情况下,用View 元素括起来查询:

<View>
   <Query>...</Query>
</View>

【讨论】:

我按照你的建议附上了它,但现在查询没有返回任何数据。我在做正确的类似查询吗?我想选择所有标题名称为 P000 的项目。我什至尝试过使用 '%P000%' 但也不起作用 对不起,我的错误。查询过滤器错误,我需要一个 trim()。使用您的解决方案可以正常工作。谢谢!

以上是关于CAML 查询包含不起作用的主要内容,如果未能解决你的问题,请参考以下文章

移动设备的媒体查询不起作用

加入前包含不起作用实体框架6

PL/SQL 语句的 SQL 查询不起作用

为啥这个简单的“INSERT INTO”查询不起作用

正则表达式在 Sed 中不起作用

基于 ROW_Number 的 SQL 查询不起作用