В одной из предыдущих статей мы кратко описали, как работают элементы управления сеткой с удаленным сервером по протоколу OData. Большинство современных элементов управления сеткой позволяют удобно группировать данные в несколько столбцов.
Давайте подробнее рассмотрим, как формулируются запросы к REST-серверу в случае, когда грид автоматически группирует данные.
Удобство (зачем оно нужно) Элементы управления сеткой, позволяющие группировать записи в несколько столбцов, существенно упрощают жизнь как программисту, так и конечному пользователю.
Очень удобно иметь возможность сгруппировать, например, список задач, выделить задачи, требующие помощи, разделить их по приоритету и т. д.
Затем вы можете сгруппировать их по сотрудникам и просмотреть все задачи для выбранного сотрудника, также сгруппированные по статусу и приоритету.
Что особенно приятно для разработчиков, так это то, что для создания такого удобного интерфейса требуется всего несколько строк кода.
Как это сделать Мы подготовили примерный список задач databoom.space/samples_devexpress_grouping.html В этом примере мы использовали dxDataGrid компании.
Девэкспресс (эта сетка включена в набор компонентов DevExtreme Web)
Более подробную информацию можно найти в документации dxDataGrid: js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxDataGrid см.Чтобы включить группировку в сетке, достаточно указать свойство groupPanel: {видимый: правда} Затем сетка позволяет группировать данные, перетаскивая заголовки столбцов на панель группировки.примеры: js.devexpress.com/Demos/WidgetsGallery/#demo/datagridgridpagingandscrollingpager/generic/light/default простой пример работы сетки без группировки с сервером бум данных : databoom.space/samples_devexpress_grid.html Чтобы сетка работала бум данных Достаточно указать URL со списком данных для отображения в сетке, например, список людей: sample.databoom.space/api1/sampledb/collections/persons
Чтобы сетка при первом отображении группировала данные в некоторые столбцы, необходимо указать в описании столбцов: групповойиндекс: 0 (для первого столбца, по содержимому которого сгруппированы данные) индекс группы: 1 (для второго столбца и т. д.) Всего пара настроек, и пользователи скажут вам спасибо :) Как это работает Мы указали URL-адрес сетки, по которой она может получить список задач.
sample.databoom.space/api1/sampledb/collections Далее грид автоматически генерирует запрос к серверу, добавляя в URL различные условия запроса.
Первый запрос, который грид отправляет на сервер для отображения списка задач, сгруппированных по статусу и приоритету: https://samples.databoom.space/api1/sampledb/collections/tasks?$orderby=Task_Status,Task_Priority,id&$top=21&$inlinecount=allpages
- $orderby =Task_Status,Task_Priority – сортировка записей по статусу и приоритету
- $топ =31 – сетка просит ограничить результат и отправить 31 запись
- $inlinecount =allpages – сетка просит вернуть общее количество записей в коллекции
Далее идут несколько записей с повторяющимися значениями этих полей.
Далее идут несколько записей, приоритет которых изменился.
То есть в данном случае для получения отсортированных данных достаточно простого запроса.
Если мы прокрутим сетку вниз, чтобы просмотреть оставшиеся записи, сетка запросит у сервера следующие записи, например: https://samples.databoom.space/api1/sampledb/collections/tasks?$orderby=Task_Status,Task_Priority,id&$skip=29&$top=32&$inlinecount=allpages В этом случае был добавлен еще один параметр запроса:
- $пропустить =29 – пропустить указанное количество записей
Теперь попробуем свернуть группу записей со статусом «Завершено».
Грид отправляет на сервер 2 запроса:
- https://samples.databoom.space/api1/sampledb/collections/tasks?$top=1&$filter=(Task_Status eq 'Завершено')&$inlinecount=allpages
- https://samples.databoom.space/api1/sampledb/collections/tasks?$orderby=Task_Status,Task_Priority,id&$top=31&$filter=((Task_Status не 'Завершено'))&$inlinecount=allpages
- $фильтр =(Task_Status eq 'Завершено') — выбираем все записи со статусом «Завершено» (те, которые сворачиваем)
- $топ =1 – сетка запрашивает только одну запись
- $inlinecount =allpages – сетка просит вернуть общее количество записей с заданным статусом
- $orderby =Task_Status,Task_Priority – сортировка данных по указанным полям
- $фильтр =(Task_Status ne 'Завершено') – выбрать все записи со статусом, отличным от «Завершено» (те записи, которые идут после свернутых со статусом «Завершено»)
- $топ =31 – сетка запрашивает 31 запись
- $inlinecount =allpages – сетка просит вернуть общее количество записей с заданным статусом
- $фильтр =(Task_Status не «Завершено») и (Task_Status не «Отложено»)
Примечания (как это может работать) В случае большого количества групп запросы, фильтрующие все свернутые группы, с большим количеством условий неравенства ($filter=.
и .
и .
и .
и .
) становятся слишком большими.
и недостаточно эффективно.
Можно просто получить список групп, а затем запросить записи по равенству полей (все записи, принадлежащие определенной группе) с просьбой отсортировать по этим полям.
Такой запрос, при наличии необходимых индексов, быстро извлекает небольшое количество записей внутри одной группы и затем это небольшое количество сортирует. Но чтобы работать таким образом, необходимо было бы иметь возможность выполнять запросы на агрегацию данных стандартизированным способом.
Возможность выполнять запросы на агрегацию данных появилась в стандарте OData версии 4.0. , а производители систем управления сетями планируют реализовать поддержку этих функций в новых версиях своих продуктов.
Теги: #odata #json #JavaScript #restful #rest #rest apiful api #devexpress #devexpress #devexpress #devextreme #разработка веб-сайтов #JavaScript #программирование
-
Обзор Программы Ppc Coach
19 Oct, 24 -
Инструмент Для Сравнения Css-Фреймворков
19 Oct, 24 -
Пол Грэм: Супер Ангелы
19 Oct, 24 -
Спутниковый Мониторинг. Часть 1
19 Oct, 24 -
Готовимся К Эффекту Хабра
19 Oct, 24 -
Борьба С Производительностью Tastypie Api
19 Oct, 24