Предисловие
- В наличии список SharePoint Foundation 2010/2013;
- Число элементов списка превышает пороговые значения (throttling);
- Индексированные поля в ассортименте;
- Представления реализованы так, чтобы число элементов не превышало порог и фильтруются по индексам;
- Все бы хорошо, но возможность использовать встроенные фильтры все равно блокируется, в добавок развертывание решений для фермы запрещено политиками организации или другими условиями.
Что же делать? Ниже под катом ряд полезных параметров адресной строки списков SharePoint, которые могут отчасти спасти ситуацию.
Варианты решения
На самом деле вариантов решения задачи несколько:
- Использовать службы поиска (если возможно) — не особо удобно т.к. отчасти будет нарушена привычная логика работы пользователей со списками;
- Использовать табличное представление Access — может быть затруднено, т.к. не всегда правильно выносить в представление все поля, что потребует данное представление, не всегда пользователям можно разрешать вносить табличные изменения в список;
- Экспортировать данные в Excel/Access — кусочно решает задачу поиска путем фильтрации, но по мере необходимости изменения данных — опять ловушка.
- Сделать клиентское решение, которое бы кусками подтягивало данные и «жонглировало бы» с ограничениями платформы — трудоемкость разработки может оказаться больше, чем возможно, да и сопутствует потерей уже сложившегося опыта работы пользователей со списками. Опять же, исходим из того, что на сервере мы сделать ничего не можем.
Данные варианты в контексте постановки не совсем уместны, можно и проще.
И тут подходим к сути данного поста. Перечислению возможностей фильтрации списков штатными средствами за счет параметров адресной строки.
Параметры адресной строки списков
1. Самое очевидное — View — открывает список с представлением, GUID которого передан в параметр.
Пример: /Lists/BigList/AllItems.aspx?View={50AEF4A1-28AD-4114-A074-C72A0FFCA785}
2. FilterField, FilterValue — пара параметров для указания атрибута (внутреннее имя фильтруемого поля) и его точного значения.
Количество пар данных параметров может быть неограниченным, главное, чтобы индекс FilterField совпадал с индексом FilterValue.
Индекс в данном случае — это номер. Например, FilterField1=...FilterValue1=...FilterField7777=...FilterValue7777=…
Если 2 и более разных FilterField примут одно и то же значение, то актуальным будет последний, а предыдущий проигнорируется.
Пример: /Lists/BigList/AllItems.aspx?View={50AEF4A1-28AD-4114-A074-C72A0FFCA785}&FilterField1=Status&FilterValue1=New&FilterField2=Author&FilterValue2=<ФИО инициатора>
3. SortField, SortDir — порядок сортировки. SortField=<Внутреннее имя поля>&SortDir=<Порядок сортировки, Desc/Asc>
Пока что довольно очевидно и легко найти на том же самом technet, но мы хотим большего. И большее частично есть.
4. Хотим фильтровать поля не только по жесткому совпадению.
FilterOp — переопределяет сравнение по-умолчанию (точного совпадения — Eq). Идет совместно с FilterField, FilterValue.
Может применять значения сравнения из CAML:
- Neq — не равно;
- Contains — содержит;
- BeginsWith — начинается с;
- Lt, Leq — меньше, меньше равно;
- Gt, Geq — больше, больше равно;
- и т.д.
Пример: /Lists/BigList/AllItems.aspx?View={50AEF4A1-28AD-4114-A074-C72A0FFCA785}&FilterField12=NumAccount&FilterValue12=087&FilterOp12=Contains
Ложка дегтя — если нужно отфильтровать по промежутку, например, период с 01.12.2013 по 16.12.2013, то это, увы, не удастся. Т.к. будет задействована фильтрация атрибута с максимальным индексом. Можно конечно тот же самый атрибут даты по 2-м атрибутам, но это уже эстетически совсем не красиво, хотя можно.
5. Хотим сравнивать значение атрибута с множественными вариантами.
FilterName, FilterMultiValue — нам на помощь: FilterName — принимает значение внутреннего наименования поля, FilterMultiValue — получает перечень значений, разделенных ";".
Пример: /Lists/BigList/AllItems.aspx?View={50AEF4A1-28AD-4114-A074-C72A0FFCA785}&FilterName=ID&FilterMultiValue=15460;15459;15458
Правда, фильтровать 2 различных атрибутов по множественным значениям уже опять же не получится. Надо совмещать динамический фильтр и фильтр внутри представления.
Надеюсь, информацию будет полезна. Т.к. о наличии некоторых из параметров с ходу узнать не просто.
Автор: AndrewKoltyakov