Использование классов для управления базами данных

В сложных корпоративных ИТ-средах SberMobile часто требуется управлять и использовать данные, хранящиеся во внешних базах данных. В этом руководстве показано, как подключиться к внешней базе данных SQL и построить кастомный UI для поиска, фильтрации, создания, редактирования и удаления записей с помощью Классов.

В этом руководстве мы будем использовать классы для управления таблицей во внешней базе данных MySQL, в которой хранятся данные RFID-карт. Текущая база данных карт может быть использована для авторизации пользователей с помощью различных устройств контроля доступа с поддержкой RFID. Авторизация также может быть выполнена через SberMobile, но эта возможность выходит за рамки видимости данного руководства.

Подключение к внешней базе данных

SberMobile предлагает несколько способов подключения для использования внешней Базы Данных. Устройство базы данных SQL может подключаться к различным типам баз данных (не только SQL) для чтения и записи данных путем отправки запросов непосредственно к удаленной базе данных.

Такой вариант позволяет очень детально контролировать элементы базы данных, однако в SberMobile есть интуитивно понятная система управления базой данных с помощью классов.

На нашей тестовой машине запущена внешняя база данных со следующими параметрами:

  • MySQL версии 5.7.

  • Работает на localhost и прослушивает порт 3306.

  • Пользователь root имеет право на удаленное подключение.

  • База данных называется testing

Из Контекстного меню сервера открываем опцию Настроить Сервер:

Переходим на вкладку База данных (1) и присваиваем соответствующие значения для нашей внешней базы данных (2), наконец, подтверждаем, что соединение было установлено (3). При необходимости мы перезапускаем наш сервер SberMobile.

Создание класса

Класс будет служить нам интуитивно понятным способом взаимодействия с удаленной базой данных. Каждый экземпляр класса существует в виде таблицы в реляционной базе данных или узла в графовой базе данных. В нашем примере мы используем реляционную базу данных (MySQL), поэтому мы ожидаем найти экземпляры наших классов в виде таблиц, когда будем исследовать нашу базу данных с помощью других инструментов базы данных.

В дереве системы откроем контекстное меню Классы и выберем Создать

Текущий диалог открывает диалог свойств класса, в котором мы можем дать имя нашему новому классу. Мы будем управлять списком пользователей, поэтому назовем наш класс users и дадим описание Список пользователей и нажмем OK для сохранения.

После сохранения мы видим, что наш класс пользователей создан. Откроем контекстное меню и выберем Настроить.

Из меню конфигурации мы переходим на вкладку Поля (1), где мы опишем элементы данных, которые мы будем хранить в наших классах. Поскольку мы используем реляционную базу данных, эти поля соответствуют столбцам нашей таблицы Пользователи. Мы видим, что уже создано несколько строк (2) - это поля по умолчанию, которые SberMobile будет использовать для управления нашей таблицей. Если удалить или отредактировать эти поля по умолчанию, это приведет к непредсказуемым результатам.

Добавим строку (3), чтобы создать три новых столбца: id, name и active, которые мы будем использовать для хранения данных. Устанавливаем соответствующие типы: Строка, Целочисленныйи Булевскийи даем описания для каждого поля (3).

Просмотрев тестовую базу данных стороннего программного обеспечения, мы видим, что таблица users уже создана:

mysql> use testing;
Database changed
mysql> desc users;
+---------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| CREATION_TIME | timestamp | YES | | NULL | |
| UPDATE_TIME | timestamp | YES | | NULL | |
| AUTHOR | varchar(100) | YES | | NULL | |
| INSTANCE_ID | bigint(20) | NO | PRI | NULL | |
| ACTIVE | bit(1) | NO | | NULL | |
| ID | int(11) | NO | | NULL | |
| NAME | varchar(100) | NO | | NULL | |
+---------------+--------------+------+-----+---------+-------+

Чтобы сделать данные из этой таблицы доступными, нужно добавить хотя бы одно представление. Снова открыв конфигурации класса, перейдите на вкладку Представления (1) и добавьте Строку (2). Мы добавим две строки, которые обозначим как all_users и active_users и дадим описательный текст (3).

Мы создаем два представления, одно из которых будет показывать все записи в базе данных, а другое - только активные записи. Мы видим, что в каждом представлении автоматически отображаются все колонки, поэтому откроем подменю Колонки (4), чтобы удалить колонку ACTIVE, а затем из подменю Фильтр (5) добавим фильтр, который будет показывать только те строки, где значение колонки ACTIVE равно TRUE.

Редактирование того, какие колонки будут показаны в представлениях

В подменю Колонки мы установим видимость колонок по умолчанию, а также нашей пользовательской колонки ACTIVE на "Скрыть" (1), сохраним наши действия (2), а затем вернемся в меню Просмотров (3).

Фильтрация того, какие строки показаны в заданном представлении

В подменю " Фильтр" мы добавим строку (1), выберем столбец ACTIVE и целевое значение TRUE (2). Как указано выше, сохраняем (3) и возвращаемся в меню представлений (4).

Возврат на вкладку Представления показывает, что наш фильтр виден в столбце Фильтр .

Визуализация поиска данных и управление пользовательским интерфейсом

Чтобы взаимодействовать с нашим классом, мы создадим интерфейс Инструментальной панели, показывающий, как взаимодействовать с классом. Наша цель - изучить простой способ взаимодействия с Классами с помощью инструментальной панели. Дальнейшие уроки будут посвящены использованию классов и разработке сложных пользовательских интерфейсов.

Наша Инструментальная панель будет состоять из двух компонентов, оба из которых относятся к типу "Классовая таблица". Сначала мы выберем Палитру компонентов (1) и перетащим два компонента "Классовая таблица данных" в ячейки сетки (2).

Конечно, на практике пользовательский интерфейс может быть более подробным, в зависимости от конкретного случая использования.

Подключение компонентов к классу

Здесь мы подключим Классовые таблицы данных к Классу списка пользователей, что позволит нам взаимодействовать с данными, которыми управляет класс.

Мы выбираем редактор свойств (1) для одной таблицы данных, а затем открываем свойство Список экземпляров класса (2).

Из диалога Список экземпляров класса мы открываем диалог Контекст хранилища.

Текущий диалог открывает диалог Выбрать Контекст , из которого мы выбираем контекст нашего списка пользователей класса и нажимаем OK для сохранения.

Возврат к списку экземпляров класса позволяет нам выбрать представление для нашей таблицы. В данном случае мы выберем представление Активные пользователи, что означает, что результаты, отображаемые в этой таблице, будут отфильтрованы, чтобы включать только те записи, для которых значение ACTIVEравно Истина.

Мы повторим описанные выше шаги для второго компонента Классовой таблицы, только выберем представление Все пользователи и в меню свойств установим значение Только чтение на Ложь и Включить выбор строк на Истина.