SharePoint 2010 Развернуть повторения CAML Query, превышающий порог представления списка

Пытаясь получить элементы событий из списка, я запускаю 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>

Кто-нибудь может объяснить, почему это может происходить? Это потому, что при расширении рецидивов SP фактически выполняет отдельный запрос, в результате которого превышается LVT? Любые предложения по реструктуризации запроса были бы хорошими, но мне нужно посмотреть на все случаи повторения событий (не только на основные элементы).

1 ответ

Решение

В случае, если кому-то интересно, мне удалось поиграться с Query и выяснить, как избежать превышения порога. Я просто изменил порядок элементов запроса, чтобы мои проиндексированные поля были перечислены первыми, а узел 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>
Другие вопросы по тегам