Работа с сервером

Загрузка данных

Report Manager ожидает бэкенд сервер для загрузки данных. Передайте ссылку на сервер через параметр url:

webix.ui({
    view: "reports",
    url:"https://docs.webix.com/reports-backend/"
});

Report Manager загружает и сохраняет данные, используя следующие URL:

  • modules (e.g. http://localhost:3200/api/modules) - получение и сохранение модулей (отчётов);
  • queries (e.g. http://localhost:3200/api/queries) - получение и сохранение отчётов;
  • objects (e.g. http://localhost:3200/api/objects) - получение источников данных;
  • fields (e.g. http://localhost:3200/api/fields/{field_name}/options, http://localhost:3200/api/fields/{field_name}/suggest) - работа с полями.

Вы можете скачать готовый бэкенд для Report Manager.

Если у вас нет бэкенд сервера, вы можете кастомизировать методы сервиса Backend и предоставлять клиентские данные в виде промиса.

Сервис Backend

Сервис Backend это серверная модель, у которой есть методы для запросов на сервер. Они вызываются сервисом Local при необходимости загрузки или сохранения данных.

Ниже вы найдёте полный список методов.

Как кастомизировать модель Backend

Чтобы менять запросы, получать и обрабатывать ответные данные вы можете:

  • создать свой бэкенд сервис и наследовать его от сервиса по умолчанию;
  • определять и переопределять методы;
  • использовать произвольный бэкенд сервис через свойство override.
class MyBackend extends reports.services.Backend {
    // новые методы 
}
 
webix.ui({
    view: "reports",
    url:"https://docs.webix.com/reports-backend/",
    override: new Map([[reports.services.Backend, MyBackend]]),
});

Как изменить запрос на сервер

Вы можете отправлять AJAX запросы на ваш сервер с помощью необходимых URL, напр.:

Сохраняем модуль

class MyBackend extends reports.services.Backend {
  saveModule(id, data) {
    return webix.ajax("//localhost:3200/modules", {id, data})
      .then(res => res.json());
  }
}

Обработка клиентских данных

Возвращаем промис с отчётами

class MyBackend extends reports.services.Backend {
    getModules() {
      return webix.promise.resolve(modules);
    }
  }

Related sample:  Report Manager: Local Data

Смотрите требуемый формат входящих данных.

Методы сервиса Backend

В этой секции вы найдёте детальное описание следующих методов:

getModules()

Вызывается при инициализации виджета.

Returns: промис с массивом модулей (отчётов).

Request:

GET http://localhost:3000/api/modules

Response:

Сервер возвращает массив объектов модулей.

[
  {
    id: 22,
    name: "Company per region",
    text: "{
      "desc":"Created on 10/28/2020",
      "data":"companies",
      "joins":[...],
      "query":"",
      "columns":[{"id":"companies.region_id","name":"Region",...],
      "group":{"by":[{"id":"companies.region_id"}],"columns":[...]},
      "meta":{"freeze":1},"sort":null}",
    updated: "2020-10-29T12:38:14Z"
  },
  // другие модули
]

addModule(data)

Добавляет новый модуль.

Parameters:

  • data (object) - данные модуля.

Returns: промис с объектом ID модуля.

Request:

POST http://localhost:3000/api/modules
Form data
name: New report
text: {/* настройки отчёта */}

Response:

Сервер возвращает объект с ID модуля.

{"id":193}

updateModule(id, data)

Обновляет указанный модуль.

Parameters:

  • id (number) - ID модуля
  • data (object) - данные модуля.

Returns: промис с объектом ID модуля.

Request:

PUT http://localhost:3000/api/modules/193
Form data
name: Updated report
text: {/* настройки отчёта */}

Response:

Сервер возвращает объект ID модуля.

{"id":193}

deleteModule(id)

Удаляет указанный модуль.

Parameters:

  • id (number) - ID модуля.

Returns: промис с объектом ID модуля.

Request:

DELETE http://localhost:3000/api/modules/193

Response:

Сервер возвращает объект ID модуля.

{"id":193}

getQueries()

Вызывается, когда пользователь переходит во вкладку запросов фильтрации.

Returns: промис с массивом запросов дял фильтрации.

Request:

GET http://localhost:3000/api/queries

Response:

Сервер возвращает массив с объектами запросов.

[
  {
      "id":20,
      "text":"{...query config}",
      "name":"My Filter"
  },
  {
      "id":29,
      "text":"{...query config}",
      "name":"Copy of My Filter"
  },
  // другие запросы
]

addQuery(data)

Добавляет новый запрос.

Parameters:

  • data (object) - данные запроса.

Returns: промис с объектом ID запроса.

POST http://localhost:3000/api/queries
Form data
name: My query
text: {/* настройки запроса */}

Response:

Сервер возвращает объект с ID запроса.

{"id":14}

updateQuery(id, data)

Обновляет указанный запрос.

Parameters:

  • id (number) - ID запроса
  • data (object) - данные запроса.

Returns: промис с объектом ID запроса.

Request:

PUT http://localhost:3000/api/queries/14
Form data
name: Updated query
text: {/* настройки запроса */}

Response:

Сервер возвращает объект ID запроса.

{"id":14}

deleteQuery(id)

Удаляет указанный запрос.

Parameters:

  • id (number) - ID запроса.

Returns: промис с объектом ID запроса.

Request:

DELETE http://localhost:3000/api/queries/id

Response:

Сервер возвращает объект ID запроса.

{"id":14}

getModels()

Вызывается, когда пользователь открывает настройки отчёта.

Returns: промис с хэшем источников данных.

Request:

GET http://localhost:3000/api/objects

Response:

Сервер возвращает объект с источниками данных для отчётов.

{
  companies: {id: "companies", name: "Companies",}
  persons: {id: "persons", name: "Persons",},
  products: {id: "products", name: "Products",},
  sales: {id: "sales", name: "Sales",}
}

getData(config)

Загружает данные отчёта. Метод вызывается, когда пользователь выбирает какой-либо отчёт.

Parameters:

  • config (object) - объект с настройками отчёта.

Returns: промис с массивом данных отчёта.

Request:

POST http://localhost:3000/api/objects/api/objects/sales/data
Form data
query: 
columns: ["companies.name","sum.products.price",...]
joins: [{"sid":"sales","tid":"products",...]
limit: 
group: ["companies.name","year.sales.when"]

Response:

Сервер возвращает данные отчёта.

[
  {
    "companies.name":"Beatty Group",
    "sum.products.price":"199884",
    "year.sales.when":"1900"
  },
  {
    "companies.name":"Beatty Group",
    "sum.products.price":"133256",
    "year.sales.when":"1901"
  },
  // другие объекты
]

getOptions(field)

Вызывается, когда пользователь выбирает источник данных.

Parameters:

  • field (array) - массив столбцов, для которых запрашиваются опции.

Returns: промис с массивом объектов опций.

Request:

GET http://localhost:3000/api/fields/persons.company_id/options

Response:

Сервер возвращает массив объектов опций.

[
  {"id":"1","value":"South"},
  {"id":"2","value":"North"},
  // другие опции
]

getFieldData(field)

Вызывается, когда пользователь выбирает поле запроса.

Parameters:

  • field (string) - ID поля.

Returns: промис с массивом опций поля.

Request:

GET http://localhost:3000/api/fields/persons.phone/suggest

Response:

Сервер возвращает массив опций поля.

["1042288384","1053082574",...]
Наверх