SharePoint 2010 Expand повторяет запросы CAML, превышающие пороговое значение для представления списка

Пытаясь получить элементы событий из списка, я отправляю запрос CAML, который возвращает только небольшое количество элементов (около 17). Когда я устанавливаю пороговое значение представления списка на 10000, все работает нормально, но когда я устанавливаю LVT на 5000, я получаю ошибку «Превышено пороговое значение представления списка, установленное администратором». Мой запрос CAML довольно прост:

<Where>
<And>
    <DateRangesOverlap>
        <FieldRef Name="EventDate" />
        <FieldRef Name="EndDate" />
        <FieldRef Name="RecurrenceID" />
        <Value Type="DateTime">
            <Now />
        </Value>
    </DateRangesOverlap>
    <And>
        <BeginsWith>
            <FieldRef Name="Place" />
            <Value Type="Text">Boston</Value>
        </BeginsWith>
        <Or>
            <Eq>
                <FieldRef Name="Status" />
                <Value Type="Text">Status1</Value>
            </Eq>
            <Eq>
                <FieldRef Name="Status" />
                <Value Type="Text">Status2</Value>
            </Eq>
        </Or>
    </And>
</And>

Can anyone explain why this may be happening? Is is because when expanding recurrences SP actually runs a separate query that result in the LVT being exceeded? Any suggestions to restructure the query would be great, but I do need to look at all occurrences of recurring events (not just the master items).


person Alex Ziskind    schedule 30.11.2012    source источник
comment
Сколько событий в списке? Я не думаю, что дело в том, сколько элементов возвращает запрос, а в том, сколько событий содержит список.   -  person Mathieu    schedule 01.12.2012
comment
В списке более 5000 наименований. Причина ограничения запросов CAML заключается в том, что они не выбирают больше, чем количество элементов LVT. Ваш ответ предполагает, что если какой-либо список содержит больше, чем LVT элементов, то все запросы CAML завершатся ошибкой, что не так. Пожалуйста, попробуйте еще раз.   -  person Alex Ziskind    schedule 01.12.2012


Ответы (1)


В случае, если кому-то интересно, мне удалось поиграть с запросом и узнать, как избежать достижения порогового значения. Я просто изменил порядок элементов запроса так, чтобы мои индексированные поля были перечислены первыми, а узел DateRangesOverlap - последним. Вот результат, который работает:

    <Where>
<And>
    <BeginsWith>
        <FieldRef Name="Place" />
        <Value Type="Text">Boston</Value>
    </BeginsWith>
    <And>
        <Or>
            <Eq>
                <FieldRef Name="Status" />
                <Value Type="Text">Status1</Value>
            </Eq>
            <Eq>
                <FieldRef Name="Status" />
                <Value Type="Text">Status2</Value>
            </Eq>
        </Or>
        <DateRangesOverlap>
            <FieldRef Name="EventDate" />
            <FieldRef Name="EndDate" />
            <FieldRef Name="RecurrenceID" />
            <Value Type="DateTime">
                <Now />
            </Value>
        </DateRangesOverlap>
    </And>
</And>
</Where>
person Alex Ziskind    schedule 05.12.2012