Экшены """""" Экшены нужны для задания поведения программы на определённые действия пользователя. Программа поддерживает следующие экшены: * **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** - специальный обработчик для клавиатур, действие выполняется при начале ввода. Переход между окнами ^^^^^^^^^^^^^^^^^^^^ 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"``. Использование: .. code-block:: json "action": { "@": { "type": "DEEPLINK", "data": "app://mertech.ru/scales/keyboard_qwerty?main=true&userparam='value'" } }, Пример использования: В примере добавляется текстовое поле с текстом "Клавиатура QWERTY". После обычного нажатия разметка из файла ``"keyboard_qwerty.json"`` разворачивается в отдельном окне и помечается как ``"main"``. .. code-block:: json { "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" } ] } } Диалог печати этикетки ^^^^^^^^^^^^^^^^^^^^^^ Action: * **PRINT_DIALOG** - открывает диалог для печати. * **PRINT_DIALOG_TO_HOME** - открывает диалог для печати, но при закрытии возвращается к главному экрану. * **PRINT_DIALOG_WITH_CONFIRM_PREDICTION** - открывает диалог для печати, при этом, когда происходит печать, посылается запрос на дообучение системы для распознования товаров. * **PRINT_DIALOG_TO_HOME_WITH_CONFIRM_PREDICTION** - открывает диалог для печати, но при закрытии возвращается к главному экрану, при этом, когда происходит печать, посылается запрос на дообучение системы для распознования товаров. Использование: .. code-block:: json "action": { "@": { "type": "PRINT_DIALOG_WITH_CONFIRM_PREDICTION", "data": "@{item.id}" } }, или .. code-block:: json "accept_action": "PRINT_DIALOG_TO_HOME_WITH_CONFIRM_PREDICTION", .. hint:: ``"accept_action"`` используется в контролах, поддерживающих "подтверждение". .. note:: Пример с ``"accept_action"`` рассмотрен в документации к элементу управления ``"PinPadContainerRelativeLayout"``. Переход к настройкам ^^^^^^^^^^^^^^^^^^^^ Срабатывание экшена открывает всплывающее окно для ввода пароля администратора. После ввода корректного пароля открывается приложение с настройками. Action: **GO_TO_SERVICE** Использование: .. code-block:: json { "action_long": { "@": { "type": "GO_TO_SERVICE" } } } Пример использования: .. note:: В примере реализован переход к настройкам при долгом нажатии на логотип. .. code-block:: json { "type": "AppCompatImageView", "layout_width": "400dp", "layout_height": "100dp", "action_long": { "@": { "type": "GO_TO_SERVICE" } }, "layout_alignParentLeft": "true", "layout_alignParentTop": "true", "jpg": "$scenario/images/logo" } Возврат к предыдущим окнам ^^^^^^^^^^^^^^^^^^^^^^^^^^ Actions: * **GO_HOME** - возврат к главному окну. * **GO_BACK** - возврат к предыдущему окну. * **GO_MAIN** - возврат к окну, помеченному как "MAIN" или к главному экрану, если метка "MAIN" не найдена. Использование: .. code-block:: json "action": { "@": { "type": "GO_HOME" } }, Пример: .. note:: В примере реализована кнопка из оформленного текстового поля с надписью "Меню". Нажатие на кнопку открывает главное окно приложения. .. code-block:: json { "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" } ] } } Поддерживаемые запросы ^^^^^^^^^^^^^^^^^^^^^^ 1. Запрос ``"app://mertech.ru/scales/products/predict"`` - предназначен для получения списка распознанных товаров. * Входной параметр ``"limit"`` является ограничением количества выводимых товаров. 2. Запрос ``"app://mertech.ru/scales/products/favorites"`` - предназначен для получения списка популярных товаров. * Выходные параметры: **getFavourites**. * ``"productRateRepository"`` * ``"limit_products"`` * ``"category"`` 3. Запрос ``"app://mertech.ru/scales/products/plu"`` - выводит список plu товаров. 4. Запрос ``"app://mertech.ru/scales/products"`` - выводит список товаров. 5. Запрос ``"app://mertech.ru/scales/weight"`` - выводит текущий вес, отображаемый на весах. 6. Запрос ``"app://mertech.ru/scales/print"`` - предназначен для печати этикетки выбранного товара. * Для выбора товара можно передать параметр **plu**, или **code**, или **id**. 7. Запрос ``"app://mertech.ru/scales/categories"`` - выводит список категорий. 8. Запрос ``"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"`` 9. Запрос ``"app://mertech.ru/scales/weighing/product/set-field"`` - установка одного из значений выбранного товара в режиме взвешивания. * Входные параметры: ``"field"`` - имя параметра, ``"value"`` - значение параметра, ``"weight"``, ``"tare"``. 10. Запрос ``"app://mertech.ru/scales/weighing/product/current"`` - предназначен для получения или установки выбранного товара по plu, коду или идентификатору. * Входные параметры: ``"plu"``, ``"code"`` или ``"id"``. 11. Запрос ``"app://mertech.ru/scales/weighing/product/clearCurrent"`` - сброс выбранного товара. 12. Запрос ``"app://mertech.ru/scales/weighing/product/saveCurrent"`` - сохранение измененных значений выбранного товара. 13. Запрос ``"app://mertech.ru/scales/weighing/product/print"`` - печать выбранного товара. * Входные параметры: ``"weight"``, ``"tare"``, а также ``"plu"``, ``"code"`` или ``"id"``. 14. Запрос ``"app://mertech.ru/scales/set-tare"`` - устанавливает тару. * Входные параметры: ``"tare"``. * Выходные параметры: "true" или "false". 15. Запрос ``"app://mertech.ru/scales/set-zero"`` - устанавливает ноль. * Выходные параметры: функция **setZero**. 16. Запрос ``"app://mertech.ru/scales/weighing/set-tare"`` - устанавливает тару через режим взвешивания и помечает выбранный товар как "товар изменен". * Входные параметры: ``"tare"``. * Выходные параметры: ``"true"`` или ``"false"``. 17. Запрос ``"app://mertech.ru/scales/weighing/set-zero"`` - устанавливает 0 через режим взвешивания и помечает выбранный товар как "товар изменен". * Выходные параметры: функция **setZero** возвращает ``"true"`` или ``"false"``. 18. Запрос ``"app://mertech.ru/scales/weighing/set-packer"`` - уставнавливает фасовщика. * Входные параметры: ``"id"``. * Выходные параметры: ``"true"`` или ``"false"``. 19. Запрос ``"app://mertech.ru/scales/weighing/get-packers"`` - получение списка фасовщиков. * Выходные параметры: возвращаемый класс **ContainerPackersApi**, содержащий список **PackerDto**. * ``"id"`` * ``""name"`` * ``"selected"`` 20. Запрос ``"app://mertech.ru/scales/weighing/get-selected-packer"`` - получение выбранного фасовщика. * Выходные параметры: возвращаемая функция **getSelected**, содержащая параметры класс **PackerDto**. * ``"id"`` * ``"name"`` * ``"selected"``