2015-03-03 121 views
0

我有了这个代码,这需要标题的一部分来执行列表的内容的查询和过滤器部分:CAML查询包含不起作用

<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循环运行时,它显示的列表不仅符合筛选条件的行的所有内容。

我在做什么错?

回答

0

这很可能与SP.CamlQuery.viewXml property的格式不正确的值有关。由于此属性需要定义列表视图XML架构,该元素必须是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> 
+0

我按照你的建议附上它,但现在查询不返回任何数据。我正在做一个像查询吗?我想要选择标题名称如P000的所有项目。我甚至尝试过使用'%P000%',但无法使用 – ADPX 2015-03-03 18:00:56

+1

抱歉,我的错误。查询过滤器是错误的,我需要一个trim()。你的解决方案工作正常。谢谢! – ADPX 2015-03-03 18:12:15