2015-03-03 3 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> 

Но когда цикл работает он показывает все содержимое списка не только строки, которые соответствуют фильтр.

Что я делаю неправильно?

ответ

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

+1

Извините, моя ошибка. Фильтр запросов был неправильным, мне нужна настройка trim(). С вашим решением работает отлично. Спасибо! – ADPX

Смежные вопросы