iikoFront API SDK

Диалог ввода строк и штрихкодов

Диалог ввода строк и штрихкодов

Плагины могут запрашивать данные (строки, штрихкоды, карты) у пользователя с помощью диалоговых окон. Здесь мы будем рассматривать диалог IViewManager.ShowExtendedKeyboardDialog, но есть и другие диалоги, о которых можно прочитать в статье Диалоговые окна.

Как это выглядит в iikoFront?

Диалог ввода строк можно показать везде, где доступен IViewManager. В плагине Resto.Front.Api.SamplePlugin в классе ButtonsTester есть пример его показа по клику на кнопку SamplePlugin: Show extended keyboard view:

extendedKeyboardDialog

Далее в статье будем использовать именно этот подход — показ окна ввода строки при нажатии на кнопку.

Диалог поддерживает следующие типы ввода:

Диалог принимает на вход 8 параметров:

Ввод произвольной строки

На ввод произвольной строки оказыают влияние параметры initialText, isMultiline и capitalize. Например, запретим многострочный ввод, введённая строка будет начинаться с заглавной буквы:

PluginContext.Operations.AddButtonToPluginsMenu("SamplePlugin: String input example", x =>
{
    var inputResult = x.vm.ShowExtendedKeyboardDialog("String input example", isMultiline: false, capitalize: true);
});

При таких параметрах диалог будет реагировать только на ввод с клавиатуры. Сканирование штрихкода и прокатка карты не будут учитываться. Все слова будут вводиться с заглавной буквы. Это может быть полезно при вводе имени, фамилии и отчества.

Полученный результат необходимо привести к типу StringInputDialogResult. Дополним код:

PluginContext.Operations.AddButtonToPluginsMenu("SamplePlugin: String input example", x =>
{
    var inputResult = x.vm.ShowExtendedKeyboardDialog("String input example", isMultiline: false, capitalize: true);
    var strResult = inputResult as StringInputDialogResult;
    if (strResult == null)
        return; //Пользователь нажал "Отмена"
    var result = strResult.Result; //Введённый пользователем текст
});

Ввод скрытой строки

Можно скрыть введённую строку с помощью параметра isPassword:

PluginContext.Operations.AddButtonToPluginsMenu("SamplePlugin: Password input example", x =>
{
    var inputResult = x.vm.ShowExtendedKeyboardDialog("Password input example", isPassword: true);
    var strResult = inputResult as StringInputDialogResult;
    if (strResult == null)
        return; //Пользователь нажал "Отмена"
    var result = strResult.Result; //Введённый пользователем скрытый текст
});

Как было написано выше, параметры isMultiline и capitalize не будут учитываться. Однако, остается возможность передать true в параметры enableCardSlider и enableBarcode, что позволит прокатывать карту и сканировать штрих-код.

Считывание карт

Можно отследить считывание карты с помощью параметра enableCardSlider. Результат необходимо привести к типу CardInputDialogResult:

PluginContext.Operations.AddButtonToPluginsMenu("SamplePlugin: Card input example", x =>
{
    var inputResult = x.vm.ShowExtendedKeyboardDialog("Card input example", enableCardSlider: true);
    var cardResult = inputResult as CardInputDialogResult;
    if (cardResult == null)
        return; //Пользователь нажал "Отмена", либо был другой тип ввода
    var result = cardResult.FullCardTrack; //Полная информация о карте
});

Запретить ввод через клавиатуру при этом нельзя.

Сканирование штрихкода

Можно отследить сканирование штрихкода с помощью параметра enableBarcode. При этом сканирование сервисных штрихкодов не будет учитываться. Результат необходимо привести к типу BarcodeInputDialogResult:

PluginContext.Operations.AddButtonToPluginsMenu("SamplePlugin: Barcode input example", x =>
{
    var inputResult = x.vm.ShowExtendedKeyboardDialog("Barcode input example", enableBarcode: true);
    var barcodeResult = inputResult as BarcodeInputDialogResult;
    if (barcodeResult == null)
        return; //Пользователь нажал "Отмена", либо был другой тип ввода
    var result = barcodeResult.Barcode; //Считанный штрихкод
});

Смешанный ввод

Пусть наш диалог будет работать и с вводом текста, и с штрихкодами, и с картами. Тогда нужно правильно обработать результат ввода. В SamplePlugin есть пример такого подхода. Модифицируем наш код для поддержки всех типов ввода:

PluginContext.Operations.AddButtonToPluginsMenu("SamplePlugin: Mixed input example", x =>
{
    var inputResult = x.vm.ShowExtendedKeyboardDialog("Mixed input example", enableCardSlider: true, enableBarcode: true);
    switch (inputResult)
    {
        case StringInputDialogResult stringInputDialogResult:
            var strResult = stringInputDialogResult.Result; //Введённый пользователем текст
            return;
        case CardInputDialogResult cardInputDialogResult:
            var cardResult = cardInputDialogResult.FullCardTrack; //Полная информация о карте
            return;
        case BarcodeInputDialogResult barcodeInputDialogResult:
            var barcodeResult = barcodeInputDialogResult.Barcode; //Считанный штрихкод
            return;
        default:
            return; //Пользователь нажал "Отмена"
    }
});