ABGrid Engine

ABGrid Engine

Сложное — просто

Enterprise-возможности без enterprise-боли

Профессиональный грид-компонент

Вы делаете конфигурацию — остальное ABGrid Engine

Код
                
function onActionClick (action, row, column, grid) {
  grid.msg("Действие : " + action,"Информация: Обработчик действий");
}
const cfgDemo = {
  readOnly:true,
  // ===== ЗАГРУЗКА ТАБЛИЦЫ =====
  autoLoad: true,
  data: {
    dataKey: 'gridP',
    url: '/api/demo/simple'
  },
  // ===== SCHEMA =====
  schema: {
    fields: {
      id: {type: 'int', ui: {label: 'id', grid: {visible: false}}},
      categoryId: {type: 'int', ui: {label: 'categoryId', grid: {visible: false}}},
      category: {type: 'string', ui: {label: 'Категория', grid: {visible: true, width: '20%'}}},
      name: {type: 'string', ui: {label: 'Наименование', grid: {visible: true, width: '60%'}}},
      price: {type: 'number', ui: {label: 'Цена', grid: {visible: true, width: '15%'}}},
      actions: { type: 'text',
        ui: { label: 'Действия',
              grid: { visible: true, width: '20%', colType: 'actions',
                      actions: {
                         edit: { classes: 'fa fa-pencil',
                                 'aria-label': 'Редактирование', hint: 'Редактирование' },
                         trash: { classes: 'fa fa-trash-can',
                                  'aria-label': 'Удалить', hint: 'Удалить' }
                      }
              }
        }
      }
    }
  },
  // ===== VIEW =====
  view: {
    height:230,
    checkbox: false,
      tableTitle: {
        enabled: true,
        caption:'Продукция',
        hint: 'Продукция нашего магазина',
        toggle: true
      },
    pager: {
      enabled: true,
        rpp: [3, 5, 10]
    }
  }
};
const gridDemo = new ABGrid("#demogrid", cfgDemo);
gridDemo.onActionClick(onActionClick);
                
            

Сравнение ABGrid Engine с другими Data Grid

ABGrid Engine не пытается быть лучшим Grid для любой задачи. Он создавался прежде всего для административных панелей, внутренних информационных систем и CRUD-heavy приложений, где таблица, формы, связанные данные и серверное взаимодействие образуют единый рабочий процесс. Ниже — практическое сравнение с популярными решениями.

Встроено — штатная возможность Платно — требуется коммерческая редакция или модуль Требует кода — реализуемо через API/свою интеграцию Ограниченно — возможность есть, но сценарий отличается или имеет ограничения Нет — не поддерживается или не является задачей продукта
Возможность ABGrid Engine AG Grid Tabulator Handsontable MUI X Data Grid DataTables
Работа с данными
Vanilla JavaScriptВстроеноВстроеноВстроеноВстроеноНет, ReactVanilla JavaScript: Нет (2.x требует jQuery; 3.x beta — без jQuery)
React / VueАдаптеры React и VueВстроеноИнтеграцияВстроеноReactИнтеграция
Server-side paginationВстроеноEnterpriseВстроеноВстроеноВстроеноВстроено
Server-side sortingВстроеноEnterpriseВстроеноВстроеноВстроеноВстроено
Server-side filteringВстроеноEnterpriseВстроеноВстроеноВстроеноВстроено
МультисортировкаВстроеноВстроеноВстроеноВстроено*ProВстроено
Настраиваемое число строк на страницеВстроеноВстроеноВстроеноВстроеноВстроеноВстроено
Progressive / infinite loading при прокруткеНет, планируетсяEnterpriseВстроеноОграниченноProScroller
Row virtualization / Virtual DOMНетВстроеноВстроеноВстроеноВстроеноScroller
Итоги по текущей страницеВстроеноВстроено / настройкаВстроеноВстроеноPremiumТребует кода
Глобальные / server-side итогиВстроеноEnterpriseОграниченноТребует кодаPremiumТребует кода
sum / avg / min / max / countВстроеноEnterpriseВстроеноВстроеноPremiumТребует кода
Фильтрация, представление и выбор строк
Custom filter из произвольного UIВстроено — setFilter(object/function)Filter Model / custom componentsВстроено / custom filtersFilters API / кодFilter Model / custom operatorsSearch API / код
Автоматическая передача filter в server requestВстроено — единый filter в payloadServer-Side Row Model, EnterpriseRemote filteringDataProvider / server filteringServer filtering / Data SourceServer-side processing
Виртуальные / UI-only поля, отсутствующие в server rowВстроено — role: "grid"Value getter / cell rendererFormatter / настройкаCustom renderer / настройкаValue getter / renderCellcolumns.render / настройка
Множественный выбор строкВстроеноВстроеноВстроеноВстроеноPro / Premium*Select extension
Одиночный выбор строкиВстроеноВстроеноВстроено — selectableRows: 1Встроено / настройкаВстроеноSelect: single
Декларативная Actions columnВстроено — colType: "actions"Cell rendererFormatter / кодCustom rendererВстроено — type: "actions"columns.render / код
Централизованный Actions handler с row/contextВстроено — onActionClickRenderer callback / paramsCell callback / componentRenderer / hooksActions cell / paramsEvent handler / код
Связанные и иерархические данные
Master–DetailВстроеноEnterpriseТребует кодаТребует кодаProChild rows / код
Неограниченная иерархия Master–DetailВстроеноТребует настройки/кодаТребует кодаТребует кодаТребует кодаТребует кода
Автоматическая загрузка и очистка Master–Detail цепочкиВстроеноТребует кодаТребует кодаТребует кодаТребует кодаТребует кода
SubgridВстроеноDetail Grid, EnterpriseТребует кодаТребует кодаDetail panel, ProChild rows
Subgrid на любом уровне Master–DetailВстроеноКомпозиция / кодТребует кодаТребует кодаТребует кодаТребует кода
Одновременные Master–Detail + SubgridВстроеноКомпозиция / кодТребует кодаТребует кодаТребует кодаТребует кода
TreeGridВстроеноEnterpriseВстроеноNested RowsProНет
Lazy server loading TreeGridВстроеноEnterpriseТребует интеграцииТребует интеграцииProНет
Tree-aware CRUD / createChildВстроеноТребует кодаТребует кодаТребует кодаТребует кодаНет
DetailsPanels, связанные с текущей строкойВстроеноТребует кодаТребует кодаТребует кодаDetail panelТребует кода
Автоматическое заполнение / очистка DetailsPanelsВстроеноТребует кодаТребует кодаТребует кодаТребует кодаТребует кода
CRUD и формы
CRUDВстроеноAPI / transactionsAPIDataProviderВстроеноEditor, платно
Отдельная встроенная CRUD-формаEditFormТребует кодаТребует кодаНет, spreadsheet UXТребует кодаEditor, платно
Форма генерируется из schema GridВстроеноТребует кодаТребует кодаНетТребует кодаНастройка Editor
Режимы create / edit / createChildВстроеноТребует кодаТребует кодаТребует кодаТребует кодаEditor / код
Валидация формыВстроеноРедакторы / кодВстроеноВстроеноВстроеноEditor
required / readOnly / visible по режиму формыВстроеноТребует кодаТребует кодаТребует кодаТребует кодаНастройка / код
Autocomplete editorВстроеноТребует редактора/кодаВстроеноВстроеноТребует компонента/кодаEditor
Password editor + confirmOfВстроеноТребует кодаТребует кодаТребует кодаТребует кодаEditor / код
File upload из EditFormВстроеноТребует кодаТребует кодаТребует кодаТребует кодаEditor / настройка
Multipart CRUD transportВстроеноТребует кодаТребует кодаТребует кодаТребует кодаНастройка
Server-confirmed обновление строки без reload GridВстроеноAPI / transactionsAPIRefetch после mutationВстроеноEditor
Canonical row от сервера после updateВстроеноAPIAPI / интеграцияDataProviderВстроеноEditor
Интеграция с приложением
HTTP layer внутри GridВстроеноDatasourceAjaxDataProviderData SourceAjax
Request / response / error interceptorsВстроеноЧерез приложениеHooksHooks / приложениеЧерез приложениеCallbacks / Ajax
Server-driven permissions / policyВстроеноТребует кодаТребует кодаТребует кодаТребует кодаТребует кода
Toolbar permissions / requiresSelectionВстроеноТребует настройки/кодаТребует кодаТребует кодаТребует кодаТребует кода
Встроенная 401 redirect policyВстроеноЧерез приложениеЧерез приложениеЧерез приложениеЧерез приложениеЧерез приложение
Диалоги и уведомления из APIВстроено — msg / confirm / confirmEx / toastЧерез приложение / custom UIОграниченно — alert(), без confirm / toastВстроено — Dialog + NotificationЧерез MUI Dialog / SnackbarЧерез приложение
Plugin / module architectureВстроеноModulesModulesPluginsPackagesExtensions
Глобальный readOnly для CRUD-интерфейсаВстроено — блокирует create / update / deleteНастройка editing / application logicНастройка editing / кодreadOnly для Grid / cellsНастройка editing / кодView по умолчанию; с Editor — настройка
Режим View с внешним управлениемExternal Controller — Grid эмитит intents, решения принимает приложениеEvents / API / application stateEvents / callbacks / приложениеHooks / API / приложениеControlled models / React stateEvents / API / приложение
Специализированные возможности и позиционирование
Spreadsheet UXНетОграниченноSpreadsheet modeСильная сторонаPremiumНет
ФормулыНетОграниченно / кодНетВстроеноPremiumНет
PivotНет; иерархическая детализация — SubgridEnterpriseНетТребует решения/кодаPremiumНет
Встроенные ChartsНетEnterpriseНетНетPremiumРасширения / интеграция
Очень большие client-side datasetsНе является цельюСильная сторонаСильная сторонаVirtualizationVirtualizationScroller / server-side
Основной сценарийCRUD / business UIUniversal / EnterpriseGeneral-purpose GridSpreadsheetReact / Material UIHTML / data tables
История / зрелость продуктаАрхитектурный подход развивается с 2013 года; публичный продукт новыйЗрелый продукт / большая экосистемаЗрелый продукт / развитая экосистемаЗрелый продукт / большая экосистемаЗрелый продукт / экосистема MUIЗрелый продукт / большая экосистема

* У Handsontable мультисортировка доступна как отдельная возможность, однако новый server-side DataProvider имеет собственные ограничения на совместное использование с MultiColumnSorting. В MUI X одиночный выбор доступен в MIT Data Grid, а полноценный множественный выбор строк относится к Pro/Premium; checkbox selection имеет отдельные возможности конфигурации. Архитектурный подход ABGrid — декларативная конфигурация, при которой типовые операции берёт на себя движок, — развивается автором с 2013 года; ABGrid Engine как публичный продукт является современной реализацией этого подхода. Коммерческие редакции и состав функций конкурирующих продуктов могут меняться; перед выбором рекомендуется свериться с их актуальной документацией.

Когда стоит выбрать ABGrid Engine

ABGrid Engine имеет смысл выбирать, если вы разрабатываете административную панель, внутреннюю информационную систему или другое CRUD-heavy приложение и хотите описывать Grid, формы редактирования, связанные данные и серверное взаимодействие преимущественно конфигурацией.

Особенно хорошо ABGrid подходит для интерфейсов со сложными связями между данными: Master–Detail может образовывать иерархию без заданного движком ограничения глубины, каждый Grid в этой цепочке может одновременно иметь собственный Subgrid, а загрузкой, сменой master-записи и каскадной очисткой связанных Grid управляет сам движок.

Если требуется именно динамический Pivot-анализ с перестройкой измерений по строкам и колонкам, сложная аналитика или встроенные графики, разумнее рассмотреть AG Grid или MUI X. Для иерархического представления агрегированных данных с раскрытием исходной детализации ABGrid использует Subgrid. Для spreadsheet-интерфейсов и формул лучше подходит Handsontable. Если нужен универсальный Vanilla JavaScript Grid с Virtual DOM и progressive loading, стоит рассмотреть Tabulator.

ABGrid Engine не является лучшим Grid для любой задачи. Он создавался как инструмент для построения сложных CRUD-oriented бизнес-интерфейсов с минимумом прикладного кода вокруг Grid.