Caml Query Простые идентификаторы - PullRequest
0 голосов
/ 15 ноября 2018

Мой код для клиента sharepoint 2013 с JS не работает :(

здесь фрагмент:

    var query ='<view><query><where><in><fieldRef Name="Id"><values>';

    for (var i in items) {
        query += '<value Type="Counter">' + items[i].id + '</value>';
     }
    query += "</values></fieldref></in></where></query></view>";

мой вопрос, что здесь не так;) Я не знаю, потому что когдаЯ задаю запрос, затем стану всеми элементами из списка, а не только с этими идентификаторами.

thx Andi;)

1 Ответ

0 голосов
/ 20 ноября 2018

В случаях, когда запрос CAML искажен, SharePoint, как правило, предоставляет вам представление списка по умолчанию вместо того, чтобы уважать ваш запрос. Похоже, это то, что здесь происходит. Если вы можете очистить свой запрос CAML, чтобы соответствовать ожиданиям SharePoint, он должен работать так, как вы хотите.

Во-первых, CAML чувствителен к регистру. Каждое имя тега в вашем CAML должно начинаться с заглавной буквы. Кроме того, встроенное поле идентификатора запрашивается со всеми заглавными буквами "ID" вместо "Id".

Следует также отметить, что элемент FieldRef должен быть самозакрывающимся тегом (<FieldRef /> вместо <FieldRef></FieldRef>).

Наконец, учтите, что если в вашем диапазоне более 500 значений, операция <Where><In> завершится неудачей, как указано в в этом ответе . Если вы не ожидаете, что ваш запрос будет содержать диапазон 500 значений, вы можете игнорировать это ограничение.

После обновления вашего кода для учета вышеуказанного, он, вероятно, будет выглядеть примерно так:

var query = '<View><Query><Where>';
if(items.length < 500){
    query += '<In><FieldRef Name="ID" /><Values>';
    for (var i in items) {
        query += '<Value Type="Counter">' + items[i].id + '</Value>';
     }
    query += '</Values></In>';
}else{
    var orCounter = 0;
    for(var i = 0, len = items.length; i < len; i++){
        if(i % 500 == 0){
            if(orCounter > 0){
                query += '</Values></In>'
            }
            if(i+501 < items.length){
               query += '<Or>';
               orCounter++;
            }
            query += '<In><FieldRef Name="ID" /><Values>';
        }
        query += '<Value Type="Counter">' + items[i].id + '</Value>';
    }
    query += '</Values></In>';
    for(var j = 0; j < orCounter; j++){
        query+="</Or>";
    }
}
query += '</Where></Query></View>';

Однако нам нужно посмотреть, как текст query используется, чтобы определить, есть ли другие проблемы, которые могут повлиять на поведение запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...