iikoFront API SDK

Введение

Для того чтобы создать плагин, можно использовать любой язык программирования из .Net-семейства, на выходе должна быть сборка под .Net 4.7.2, которую iikoFront загрузит при запуске. Для загрузки каждого плагина iikoFront создаёт отдельный процесс-контейнер и загружает плагин в него, это позволяет избежать конфликтов зависимостей и обеспечивает надёжность системы (сбой в одном из плагинов не обрушит всё остальное). Каждый плагин устанавливается в отдельную подпапку папки Plugins, по умолчанию расположенной в C:\Program Files\iiko\iikoRMS\Front.Net. Сборка плагина должна содержать класс, имеющий публичный конструктор по умолчанию (без параметров) и реализующий интерфейс IFrontPlugin. Взаимодействие между процессами плагина и приложения iikoFront осуществляется через IPC-канал, передача объектов происходит либо по ссылке (такие объекты должны наследоваться от MarshalByRefObject), либо по значению (классы данных, они должны быть сериализуемыми).

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

Взаимодействие с API начинается со статического класса PluginContext, в котором собраны все функции и сервисы:

Основные контракты

Структуры данных

Данные собраны в пространстве имён Resto.Front.Api.Data и сгруппированы по направлениям:

В основном объекты данных доступны только для чтения — для них публикуется интерфейс с get-only свойствами, так что плагин не может создавать новые экземпляры таких объектов или изменять значения полей существующих. Многие объекты, например, IProduct, ITable или IUser, нельзя редактировать в принципе, это справочники, задаваемые через приложение iikoOffice. Некоторые типы объектов можно редактировать опосредованно путём применения к ним тех или иных действий. Наконец, существует специальная категория объектов, расположенных в пространстве имён Resto.Front.Api.Data.DataTransferObjects, которые могут быть созданы и отредактированы на стороне плагина.

Сервис операций

Практически все действия выполняются через IOperationService. Входящие в состав этого интерфейса методы можно разделить на группы:

При работе с IOperationService инициатива на стороне плагина.

Сервис уведомлений

INotificationService позволяет подписаться на интересующие события. Уведомления об изменении данных реализованы с использованием библиотеки Reactive Extensions (Rx), события публикуются в виде IObservable<T>-последовательностей, где T — аргумент события (изменившийся объект). Rx позволяет работать с потоком событий так же удобно, как LINQ с IEnumerable<T>. Для знакомства с возможностями реактивного программирования есть хороший ресурс Introduction to Rx. Здесь же можно подписаться на такие операции как открытие или закрытие кассовой смены, печать сервисного или кассового чека и так далее. Помимо непосредственно уведомления о выполняющейся операции, могут быть доступны дополнительные возможности, например, при закрытии кассовой смены можно распечатать дополнительный отчёт, при печати чека добавить в него маркетинговую информацию, при переходе на экран оплаты добавить в заказ подарочное блюдо и платёж с бонусного счёта, а выполнение некоторых операций можно и вовсе отменить, сгенерировав исключение OperationCanceledException.

При работе с INotificationService инициатором действий является iikoFront, а плагин является наблюдателем.

Примеры

Помимо прочего в состав SDK входит несколько примеров плагинов в исходных кодах. Имеет смысл ознакомиться с ними, прежде чем приступать к разработке собственного плагина.

SamplePlugin

Данный пример демонстрирует различные сценарии использования API:

CustomerScreenPlugin

Этот пример представляет собой готовую реализацию экрана покупателя для терминалов с двумя мониторами, где на основном мониторе, обращённом к кассиру, развёрнуто приложение iikoFront, а на дополнительном мониторе находящемся со стороны покупателя, демонстрируются логотип предприятия и рекламные видеоролики, в упрощённом виде отображается состав текущего заказа.

Resto.Front.Api.SampleScalePlugin

Пример плагина, реализующего интеграцию с весами. Показывает, как с помощью плагина можно подключить и использовать весы, которые не поддерживаются штатно.

Resto.Front.Api.SampleCashRegisterPlugin

Демонстрирует работу с произвольным фискальным регистратором.

Контакты