Разработка и исполнение приложений в рамках платформы Эра ведется в рамках подсистемы, которая называется Продуктовый слой.
Назначение продуктового слоя
Продуктовый слой позволяет разрабатывать (конфигурировать) информационные системы и обеспечивает их жизненный цикл – создание, исполнение, модификацию, экспорт-импорт.
Продуктовый слой находится над слоями инфраструктуры, данных и коммуникаций. Благодаря продуктовому слою коммуникационная платформа становится информационнокоммуникационной. При этом предусмотрен и обратный доступ «снизу вверх» – например, из сценариев IVR можно обращаться (получать, добавлять, изменять, удалять) к любым объектам информационной системы (продуктового слоя). Спектр применений продуктового слоя достаточно широк: карточки звонка, системы обработки заявок, справочники клиентов, CRM, ERP, PM, отраслевые решения и т.д.
Подробнее про архитектуру системы можно прочитать в соответствующей статье
Концепция продуктового слоя
Базовая идея: в основе информационной системы лежит объектная модель. Объектная модель состоит из классов, каждый из которых обладает набором свойств. Как только мы описали объектную модель, платформа создает типовую информационную систему для работы с этой моделью. Информационная система включает в себя таблицы в базах данных, обеспечение обработки этих данных (включая реалтайм подписки), HTTP/WS API для доступа к данным, пользовательские приложения, сервисы для автоматической обработки данных и т.д.
Пример объектной модели ветеринарной клиники:
- Клиент (Фамилия, Имя, Отчество, Телефон)
- Животное (Тип, Кличка, Хозяин)
- Доктор (Фамилия, Специальность)
- Посещение (Время, Животное, Доктор, Статус)
После того, как эта объектная модель вводится в платформу, можно создать приложение «Администратор ветклиники», состоящее из четырех табличных инструментов «Клиенты», «Животные», «Доктора», «Посещения».
Вокруг объектной модели также строится дальнейшая инфраструктура, отвечающая за взаимодействие с объектами:
- Редакторы и контролы для работы пользовательского интерфейса
- Сервисы и обработчики для операций над данными
- Роли для ограничения доступа
- Константы для перевода
- Другие вспомогательные объекты
В рамках платформы Эра все вышеперечисленные объекты хранятся, разрабатываются и исполняются в рамках пакетов (package).
Каждый пакет должен реализовывать некий блок фунцкиональности для определенной области применения.
Примеры базовых пакетов:
- callcenter - пакет, реализующий функциональность контакт-центра
- wfm - пакет, реализующий процессы управления персоналом контакт-центра
- helpdesk - пакет, реализующий функциональность портала поддержки
Получить доступ к пакетам системы можно через приложение Builder. Данное приложение является основным для разработчика в рамках платформы Эра. Если приложение Builder в системе отсутствует, необходимо провести установку продуктового слоя, описанную в данной статье.
Структура пакета и основные понятия
Объектная модель состоит из классов (classes). Каждый класс обладает набором свойств (properties) и действий (actions). Классы могут наследоваться друг от друга. Каждое свойство имеет тип данных.
Существует три вида типов данных: базовый (строка, число, время и т.д), перечисление (enumeration – заданный набор вариантов) и класс (ссылка на любой класс объектной модели для построения связей между объектами).
Перечисление (Enumeration) позволяет описать возможные значения свойства, указав для каждого из них заголовок и цвет (для отображения в таблицах и диаграммах).
Редакторы (Editors) предназначены для отображения и редактирования значений свойств в соответствии с типами данных (строки, числа, дата-время, выпадающие списки, ссылки на другие объекты и т.д.).
Приложение (Application) предназначено для работы пользователей с информационной системой. Приложение состоит из меню (toolbox) и текущего элемента управления (control). Переключение между элементами управления осуществляется через меню либо переходами по гиперссылкам. Пользователю доступен набор приложений в соответствии с назначенными ролями (roles).
Элемент управления (Control) – это основной компонент приложения. Работа пользователя с приложением заключается в переключении между элементами управления и выполнением с их помощью операций над объектами (просмотр, добавление, изменение, удаление, действия). Элементы управления создаются автоматически (для каждого класса – таблица и карточка) и вручную (диаграммы, комбинированные элементы, нестандартные карточки и т.д.).
Роли (Roles) - иерархический справочник ролей, которые могут быть использованя для ограничения доступа к приложениям и данным объектов.
Публичная ссылка (Public link) позволяет предоставить доступ к приложению с автоматической авторизацией в системе при помощи указанных логина и пароля (т.е. с заданным набором ролей). Используется для предоставления доступа к некоторым данных для пользователей вне платформы Эра.
Сервисы (Services) – это программные модули, предназначенные для выполнения операций над объектами в автоматическом режиме (без участия пользователей). Сервисы могут выполняться на сервере либо в пользовательских приложениях. Как правило, сервисы выполняют операции при получении событий добавления, изменения и удаления объектов либо по таймеру.
Обработчики событий (Handlers) - это программные модыли, предназначенные для обработки событий вызываемых операциями над объектами (создание, изменение, удаление). Результаты исполнения обработчиков могут влиять на исполнение операции.
Сервисы (services), обработчики событий (handlers) и действия (action) служат для реализации сложной логики работы приложений, а также для интеграции с внутренними и внешними сервисами.
Подмены (Shifts) - настройки, позволяющие подменять один объект, другим. Таким образом, можно вносить изменения в интерфейс, логику или структуру данных, заданных в других пакетах. Для замещения доступны классы (classes), рекдаторы (editors) и элементы управления (controls).
Фиксчи (Fixtures) - константные данные, хранящиеся в пакете, которые могут быть автоматически добавлены, обновлены или удалены при активации и деактивации пакета. В рамках таких данных может быть реализована установка некоторых настроек по-умолчанию, демо-данные для объектов, статические данные для анализа и т.д.
Константы (Consts) - опциональный набор констант, предназначенный для локализации приложений на различные языки.
Пакеты (packages) позволяют объединять все перечисленные выше сущности продуктового слоя в группы по области применения. Пакеты можно экспортировать и импортировать для быстрого переноса информационных систем между экземплярами платформы. Импортированные пакеты можно активировать для их использования, или деактивировать, если реализуемая ими функциональность не трубуется.
Таким образом, пакет (package) включает в себя следующие сущности:
- Enums
- Classes
- Editors
- Controls
- Roles
- Applications
- PublicLinks
- Services
- Handlers
- Shifts
- Fixtures
- Consts
Все сущности продуктового слоя имеют имена (name) и полные имена (fullName). Полные имена генерируются автоматически и содержат имя пакета, имя сущности и в некоторых случаях имя папки.
Например, класс ArchiveConnection, расположенный в папке connections пакета callcenter имеет полное имя callcenter/connections/ArchiveConnection. Ссылки сущностей продуктового слоя друг на друга содержат полные имена, а не идентификаторы. Идентификаторы (id) сущностей являются хеш-функцией от полных имен.
Следовательно, одноименные классы, созданные на разных экземплярах платформы, будут иметь идентичные идентификаторы. В процессе активации пакета происходит его проверка на отсутствие ошибок (например, битых ссылок) и автоматическая генерация следующих сущностей:
- controls: таблица и карточка для каждого класса
- editors: статический выпадающий список (select) для каждого перечисления и динамический выпадающий список (lookup) для каждого класса
- классы сервиса dms слоя обработки данных (а следовательно, таблицы в базах данных и разделы API)
- код классов и интерфейсов на языке TypeScript для исполнения на клиенте (в приложениях) и сервере (сервисах)
- откомпилированный (преобразованный и упакованный из TypeScript в JavaScript) код классов, интерфейсов и сервисов
- веб-приложения
Соглашения по именам
В целях единообразия, технической красоты и удобства сопровождения, выработаны следующие соглашения по именам сущностей продуктового слоя (строго латиница):
- packages: lowercase (tickets, callcenter, builder, my_package)
- classes: uppercase (Ticket, CurrentConnection, ArchiveConnection)
- classes multiName: uppercase (Tickets, CurrentConnections, ArchiveConnections)
- class folders: lowercase with slash (connections, acd/core, tickets/catalogs)
- properties: camelcase (name, responsibleUser, phoneNumber)
- linked properties: camelcase with understroke (user_id, editor_name, class_fullName)
- actions: camelcase (drop, makeCall, transferTo)
- action parameters: camelcase (number, line, responsibleUser)
- enumerations: uppercase (State, TicketState, CallResult)
- enumeration items: lowercase (opened, finished, not_ready)
- roles: lowercase (admin, supervisor, sales_boss)
- applications: lowercase (manager, reports, my_application)
- services: uppercase *Service (TicketsService, ShowCardService, ACDService)