2.3.1. Экшены

Экшены нужны для задания поведения программы на определённые действия пользователя. Программа поддерживает следующие экшены:

  • DEEPLINK - переход между окнами.

  • PRINT_DIALOG - открывает диалог для печати.

  • PRINT_DIALOG_TO_HOME - открывает диалог для печати, но при закрытии возвращается к главному экрану.

  • PRINT_DIALOG_WITH_CONFIRM_PREDICTION - открывает диалог для печати, при этом, когда происходит печать, посылается запрос на дообучение системы для распознавания товаров.

  • PRINT_DIALOG_TO_HOME_WITH_CONFIRM_PREDICTION - открывает диалог для печати, но при закрытии возвращается к главному экрану, при этом, когда происходит печать, посылается запрос на дообучение системы для распознования товаров.

  • CLOSE_PRINT_DIALOG - закрывает диалог печати.

  • GO_HOME - возврат к главному окну.

  • GO_BACK - возврат к предыдущему окну.

  • GO_MAIN - возврат к окну, помеченному как «MAIN».

  • GO_TO_SERVICE - запускает окно настроек.

  • QUERY - принимает запрос с данными.

  • SHOW_ERROR - показывает диалоговое окно с ошибкой.

Поддерживается несколько обработчиков действий пользователя:

  • action - обычное нажатие.

  • action_long - долгое нажатие.

  • accept_action - специальный обработчик нажатия на дочерний элемент "PinPadAccept" для контейнера "PinPadContainerRelativeLayout" (ПИН-ПАД).

  • action_startInput - специальный обработчик для клавиатур, действие выполняется при начале ввода.

2.3.1.1. Переход между окнами

Action: DEEPLINK

Действие предназначено для перехода между окнами приложения. Чтобы выполнить переход, нужно добавить action с "type": "DEEPLINK" и "data": "app://mertech.ru/scales/<МАКЕТ_С_ПАРАМЕТРАМИ>".

Параметр "?main=true" задаёт следующему окну якорь «Main», обозначающий, что при вызове экшена "GO_MAIN" из дочерних окон приложение вернётся назад к помеченному.

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

Перед первым параметром обязательно должен стоять "?", а все следующие параметры должны разделяться символом "&".

Для добавления дополнительных параметров, значение которых должно подставляться динамически, лучше создавать ссылки по шаблону, используя конструкцию @{fn:format('param1 value = %s, param2 value = $s', @{param1},  @{param2},...)}.

В места, обозначенные символами "%s" будут подставлены последовательно значения параметров, указанных далее через запятую. "@{fn:format('app://mertech.ru/scales/products?order_by=name&q=%s&category=%s', @{search},  @{category})}" В результате будет получена ссылка, похожая на следующую: "app://mertech.ru/scales/products?order_by=name&q=клубника&category=1".

Использование:

"action": {
    "@": {
    "type": "DEEPLINK",
    "data": "app://mertech.ru/scales/keyboard_qwerty?main=true&userparam='value'"
    }
},

Пример использования:

В примере добавляется текстовое поле с текстом «Клавиатура QWERTY». После обычного нажатия разметка из файла "keyboard_qwerty.json" разворачивается в отдельном окне и помечается как "main".

{
    "type": "TextView",
    "layout_width": "305dp",
    "layout_height": "57dp",
    "gravity": "center",
    "textSize": "20sp",
    "textColor": "#000000",
    "layout_alignParentLeft": "true",
    "layout_alignParentBottom": "true",
    "layout_marginLeft": "48dp",
    "layout_marginBottom": "50dp",
    "text": "Клавиатура QWERTY",
    "action": {
        "@": {
        "type": "DEEPLINK",
        "data": "app://mertech.ru/scales/keyboard_qwerty?main=true"
        }
    },
    "font_family": "geometria_bold",
    "background": {
        "type": "shape",
        "shape": "rectangle",
        "children": [
            {
                "type": "corners",
                "radius": "6dp"
            },
            {
                "type": "stroke",
                "color": "#5AB031",
                "width": "2dp"
            }
        ]
    }
}

2.3.1.2. Диалог печати этикетки

Action:

  • PRINT_DIALOG - открывает диалог для печати.

  • PRINT_DIALOG_TO_HOME - открывает диалог для печати, но при закрытии возвращается к главному экрану.

  • PRINT_DIALOG_WITH_CONFIRM_PREDICTION - открывает диалог для печати, при этом, когда происходит печать, посылается запрос на дообучение системы для распознования товаров.

  • PRINT_DIALOG_TO_HOME_WITH_CONFIRM_PREDICTION - открывает диалог для печати, но при закрытии возвращается к главному экрану, при этом, когда происходит печать, посылается запрос на дообучение системы для распознования товаров.

Использование:

"action": {
    "@": {
        "type": "PRINT_DIALOG_WITH_CONFIRM_PREDICTION",
        "data": "@{item.id}"
    }
},

или

"accept_action": "PRINT_DIALOG_TO_HOME_WITH_CONFIRM_PREDICTION",

Подсказка

"accept_action" используется в контролах, поддерживающих «подтверждение».

Примечание

Пример с "accept_action" рассмотрен в документации к элементу управления "PinPadContainerRelativeLayout".

2.3.1.3. Переход к настройкам

Срабатывание экшена открывает всплывающее окно для ввода пароля администратора. После ввода корректного пароля открывается приложение с настройками.

Action: GO_TO_SERVICE

Использование:

{
    "action_long": {
        "@": {
        "type": "GO_TO_SERVICE"
        }
    }
}

Пример использования:

Примечание

В примере реализован переход к настройкам при долгом нажатии на логотип.

{
    "type": "AppCompatImageView",
    "layout_width": "400dp",
    "layout_height": "100dp",
    "action_long": {
        "@": {
        "type": "GO_TO_SERVICE"
        }
    },
    "layout_alignParentLeft": "true",
    "layout_alignParentTop": "true",
    "jpg": "$scenario/images/logo"
}

2.3.1.4. Возврат к предыдущим окнам

Actions:

  • GO_HOME - возврат к главному окну.

  • GO_BACK - возврат к предыдущему окну.

  • GO_MAIN - возврат к окну, помеченному как «MAIN» или к главному экрану, если метка «MAIN» не найдена.

Использование:

"action": {
    "@": {
    "type": "GO_HOME"
    }
},

Пример:

Примечание

В примере реализована кнопка из оформленного текстового поля с надписью «Меню». Нажатие на кнопку открывает главное окно приложения.

{
    "type": "TextView",
    "layout_width": "243dp",
    "layout_height": "74dp",
    "gravity": "center",
    "textSize": "23sp",
    "textColor": "#FFFFFF",
    "layout_align": "true",
    "layout_alignParentBottom": "true",
    "layout_alignParentLeft": "true",
    "layout_marginBottom": "30dp",
    "layout_marginLeft": "390dp",
    "text": "Меню",
    "action": {
        "@": {
        "type": "GO_HOME"
        }
    },
    "font_family": "geometria_bold",
    "background": {
        "type": "shape",
        "shape": "rectangle",
        "children": [
            {
                "type": "corners",
                "radius": "10dp"
            },
            {
                "type": "solid",
                "color": "#EC1C24"
            }
        ]
    }
}

2.3.1.5. Поддерживаемые запросы

  1. Запрос "app://mertech.ru/scales/products/predict" - предназначен для получения списка распознанных товаров.

  • Входной параметр "limit" является ограничением количества выводимых товаров.

  1. Запрос "app://mertech.ru/scales/products/favorites" - предназначен для получения списка популярных товаров.

  • Выходные параметры: getFavourites.

    • "productRateRepository"

    • "limit_products"

    • "category"

  1. Запрос "app://mertech.ru/scales/products/plu" - выводит список plu товаров.

  2. Запрос "app://mertech.ru/scales/products" - выводит список товаров.

  3. Запрос "app://mertech.ru/scales/weight" - выводит текущий вес, отображаемый на весах.

  4. Запрос "app://mertech.ru/scales/print" - предназначен для печати этикетки выбранного товара.

    • Для выбора товара можно передать параметр plu, или code, или id.

  5. Запрос "app://mertech.ru/scales/categories" - выводит список категорий.

  6. Запрос "app://mertech.ru/scales/purchase" - получение текущей информации о товаре для экрана печати этикетки.

  • Входные параметры: "plu", "code", "id", "weight".

  • Выходные параметры: переменные класса PurchaseApi.

    • "weight"

    • "price"

    • "discountPrice"

    • "cost"

    • "discountCost"

    • "product"

    • "intPartPrice"

    • "fractPartPrice"

    • "intPartCost"

    • "fractPartCost"

    • "intPartDiscountPrice"

    • "fractPartDiscountPrice"

    • "intPartDiscountCost"

    • "fractPartDiscountCost"

    • "intPartWeight"

    • "fractPartWeight"

    • "currencySign"

    • "currencyText"

    • "availabilityMinUnitOfCurrency"

  1. Запрос "app://mertech.ru/scales/weighing/product/set-field" - установка одного из значений выбранного товара в режиме взвешивания.

  • Входные параметры: "field" - имя параметра, "value" - значение параметра, "weight", "tare".

  1. Запрос "app://mertech.ru/scales/weighing/product/current" - предназначен для получения или установки выбранного товара по plu, коду или идентификатору.

  • Входные параметры: "plu", "code" или "id".

  1. Запрос "app://mertech.ru/scales/weighing/product/clearCurrent" - сброс выбранного товара.

  2. Запрос "app://mertech.ru/scales/weighing/product/saveCurrent" - сохранение измененных значений выбранного товара.

  3. Запрос "app://mertech.ru/scales/weighing/product/print" - печать выбранного товара.

  • Входные параметры: "weight", "tare", а также "plu", "code" или "id".

  1. Запрос "app://mertech.ru/scales/set-tare" - устанавливает тару.

  • Входные параметры: "tare".

  • Выходные параметры: «true» или «false».

  1. Запрос "app://mertech.ru/scales/set-zero" - устанавливает ноль.

  • Выходные параметры: функция setZero.

  1. Запрос "app://mertech.ru/scales/weighing/set-tare" - устанавливает тару через режим взвешивания и помечает выбранный товар как «товар изменен».

  • Входные параметры: "tare".

  • Выходные параметры: "true" или "false".

  1. Запрос "app://mertech.ru/scales/weighing/set-zero" - устанавливает 0 через режим взвешивания и помечает выбранный товар как «товар изменен».

  • Выходные параметры: функция setZero возвращает "true" или "false".

  1. Запрос "app://mertech.ru/scales/weighing/set-packer" - уставнавливает фасовщика.

  • Входные параметры: "id".

  • Выходные параметры: "true" или "false".

  1. Запрос "app://mertech.ru/scales/weighing/get-packers" - получение списка фасовщиков.

  • Выходные параметры: возвращаемый класс ContainerPackersApi, содержащий список PackerDto.

    • "id"

    • ""name"

    • "selected"

  1. Запрос "app://mertech.ru/scales/weighing/get-selected-packer" - получение выбранного фасовщика.

  • Выходные параметры: возвращаемая функция getSelected, содержащая параметры класс PackerDto.

    • "id"

    • "name"

    • "selected"