Фильтрация данных по дате создания, одна из самых частых задач при работе со списками и библиотеками документов в Microsoft SharePoint․ Будь то получение недавно добавленных элементов, поиск записей за определенный период или выгрузка архивных данных, разработчику или администратору необходимо уметь правильно строить запросы․
Основным инструментом для программной фильтрации в SharePoint является CAML (Collaborative Application Markup Language)․ В этой статье мы подробно разберем, как конструировать CAML-запросы для поля Created (Дата создания), рассмотрим примеры от простых фильтров до сложных диапазонов, а также затронем использование PowerShell и сторонних библиотек․
Основы CAML-запросов для дат
CAML-запрос представляет собой XML-структуру, которая передается в свойство Query объекта SPQuery (в серверной объектной модели) или CamlQuery (в клиентской объектной модели CSOM)․ Для фильтрации по дате создания используется внутреннее имя поля Created․
Важно помнить несколько ключевых правил работы с датами в CAML:
- Тип данных: В теге <Value> необходимо указывать Type=»DateTime»․
- Формат даты: SharePoint ожидает дату в формате ISO 8601 (например, 2023-10-05T00:00:00Z)․
- Включение времени: Если вам нужно учитывать время, а не только дату, необходимо добавить атрибут IncludeTimeValue=»TRUE» в тег <Value>․
Примеры CAML-запросов по дате создания
Ниже приведены различные сценарии фильтрации элементов списка по дате создания с примерами XML-кода․
Элементы, созданные после определенной даты
Допустим, нам нужно получить все элементы, которые были созданы после 1 января 2023 года․ Для этого используется оператор Gt (Greater Than)․
<Where>
<Gt>
<FieldRef Name="Created" />
<Value Type="DateTime">2023-01-01T00:00:00Z</Value>
</Gt>
</Where> Элементы, созданные за последние N дней
Часто требуется получить записи, созданные, например, за последние 10 дней․ Вместо того чтобы вычислять дату в коде и передавать её в запрос, можно использовать встроенный элемент OffsetDays․
<Where>
<Geq>
<FieldRef Name="Created" />
<Value Type="DateTime">
<Today OffsetDays="-10" />
</Value>
</Geq>
</Where> Здесь Geq означает «больше или равно», а <Today OffsetDays=»-10″ /> автоматически вычисляет дату ровно на 10 дней раньше текущей․
Фильтрация между двумя датами (диапазон)
Если необходимо выбрать элементы, созданные в определенном временном промежутке (например, с 1 сентября 2019 года по 5 октября 2019 года), потребуется объединить два условия с помощью логического оператора And․
<Where>
<And>
<Geq>
<FieldRef Name="Created" />
<Value Type="DateTime">2019-09-01T00:00:00Z</Value>
</Geq>
<Leq>
<FieldRef Name="Created" />
<Value Type="DateTime">2019-10-05T00:00:00Z</Value>
</Leq>
</And>
</Where> Этот запрос вернет все элементы, где Created >= 2019-09-01 и одновременно Created <= 2019-10-05․
Элементы, созданные сегодня
Для фильтрации по текущему дню можно использовать ключевое слово Today․ Это динамическое значение, которое SharePoint автоматически заменяет на текущую дату․
<Where>
<Eq>
<FieldRef Name="Created" />
<Value Type="DateTime">
<Today />
</Value>
</Eq>
</Where> Использование динамических ключевых слов в представлениях SharePoint
Если вы не пишете код, а настраиваете фильтрацию стандартными средствами SharePoint (через интерфейс создания представлений), вы также можете использовать динамические значения․ Служба поддержки Майкрософт выделяет два ключевых слова:
- Сегодня ([Today]), фильтрует элементы по текущей дате․
- Я ([Me]) — фильтрует элементы по текущему пользователю (например, «Создано = Я»)․
В интерфейсе настройки представления вы можете указать условие: «Дата создания» равно «[Today]»․ SharePoint сам подставит нужное значение при отрисовке страницы․
Продвинутые методы: Camlex․NET и PowerShell
Написание CAML-запросов с помощью Camlex․NET
Написание сырого XML может быть утомительным и подверженным ошибкам․ Для разработчиков ․NET, использующих C#, существует отличная библиотека Camlex․NET․ Она позволяет писать CAML-запросы с использованием лямбда-выражений, что делает код гораздо более читаемым и поддерживаемым․
Пример фильтрации по дате создания с использованием Camlex․NET:
string caml = Camlex․Query
․Where(x => (DateTime)x["Created"] > new DateTime(2023, 1, 1))
․ToString; А пример запроса между двумя датами выглядит так:
string caml = Camlex․Query
․Where(x => (DateTime)x["Created"] >= new DateTime(2019, 9, 1)
&& (DateTime)x["Created"] <= new DateTime(2019, 10, 5))
․ToString; Использование CAML в PowerShell
Администраторы часто используют PowerShell (PnP PowerShell или SharePoint Online Management Shell) для выгрузки данных․ CAML-запросы применяются там точно так же․ Пример скрипта для получения элементов, созданных за последние 30 дней:
$camlQuery = "<View><Query>
<Where>
<Geq>
<FieldRef Name='Created' />
<Value Type='DateTime'><Today OffsetDays='-30' /></Value>
</Geq>
</Where>
</Query></View>"
$items = Get-PnPListItem -List "МойСписок" -Query $camlQuery Фильтрация по дате создания в SharePoint требует понимания структуры CAML-запросов и правильного использования формата дат․ Независимо от того, создаете ли вы простое представление через веб-интерфейс, пишете скрипт на PowerShell или разрабатываете сложное приложение на C#, принципы остаются неизменными․ Использование операторов Gt, Lt, Geq, Leq в сочетании с элементами <Today> и OffsetDays позволяет гибко и точно извлекать нужные данные, а библиотеки вроде Camlex․NET значительно упрощают жизнь разработчикам․