Штрих-код взаимодействия с сайтом - PullRequest
1 голос
/ 20 октября 2010

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

+----------------------------------------------------------------------+
| Task List                                   || || |||| || || ||| (a) |
|                                                                      |
| Task One                                    ||| || |||||| || ||| (b) |
| Task Two                                    ||| || || | | || ||| (c) |
| Task Three                                  | |||||| || ||| |||| (d) |
|                                                                      |
|                                             ||||| |||| || || ||| (e) |
+----------------------------------------------------------------------+

Штрих-коды представлены ||||| | ||| || (x) в конце каждой строки.Печать страницы должна быть прямой, используя сервлет со штрих-кодом в качестве барбекю.Я хотел бы иметь общий способ перехватывать эти штрих-коды и делать вещи в JQuery.Например:

  • штрих-код (a) может быть goto:/tasklist/123:
  • , штрих-коды (b), (c) и (d) могут быть add:31222:, add:31223 иadd:31224:
  • штрих-код (e) может быть submit::

При сканировании штрих-кода (a) я бы пошел на эту страницу.При сканировании штрих-кодов (b), (c), (d) я бы заполнял ввод текста на странице.При сканировании штрих-кода (е) я бы отправил форму.Я имею в виду наличие какой-либо формы JQuery-слушателя, доступной на каждой странице, на которой я могу зарегистрировать действия на основе первой команды штрих-кода.Я знаю, что могу программировать устройство штрих-кода, чтобы включить в него некоторую логику, но хотел бы избежать этого, чтобы любой штрих-код работал, и мне не приходилось заниматься программированием.

У меня естьдаже думал, что каждый штрих-код может начинаться с какого-то волшебного жетона, чтобы различать обычный ввод и ввод штрих-кода.Возможно что-то вроде $**$:goto:/tasklist/123:.Тогда возникает вопрос: как мне выполнить jQuery для перехвата этого набора команд и как правильно зарегистрировать обработчики для различных создаваемых мной действий (например, $**$:add:31222:)?

1 Ответ

3 голосов
/ 27 ноября 2010

Я сделал подобное приложение, поэтому вот мои два цента.

USB-сканер в основном работает как клавиатура USB.Большинство отправит ключ ввода в качестве символа завершения, но это можно настроить на большинстве устройств.Я полагался на символ завершения для вождения действий в моем пользовательском интерфейсе.(По умолчанию Enter отправит выбранную в данный момент форму.)

Другая проблема заключается в том, что если это мобильное приложение, вы действительно хотите максимально избегать обращений к серверу.Я решил это с помощью тонны прикладной логики в пользовательском интерфейсе, однако вся бизнес-логика все еще была на сервере, поэтому для того, чтобы действия имели эффект, пользователю необходимо было подключиться и иметь возможность POST к серверу.

Итак, в суть вашей проблемы.Рассмотрим что-то вроде этого:

var state = 'WAITING'; # super simple state

function add(data) {
    # courier checks an item, 'data' contains the data from the scanner
}

function input_handler(input) {
    if (state == 'WAITING') {
        if (input == 'DONE' || input == 'EXIT') {
            state = 'DONE';
            # abort, whatnot
        } else {
            state = 'SCAN';
            input_handler(input); # recurse, with new state
        }
    } else {
        add(input);
    }
}

Это в основном конечный автомат, закодированный вручную.Когда курьер проверяет штрих-код «Я хочу начать сканирование для этого заказа», вы входите в режим, в котором каждый ввод поступает в ваш обработчик сканирования.Когда он сканирует штрих-код «Я закончил», вы проверяете результат и т. Д. Это можно улучшить, если использовать реальный конечный автомат.

Штрих-коды должны быть максимально простыми.Такие команды, как 'SCAN', 'EXIT', 'NOTHING_MORE_TO_SCAN' хороши, потому что они являются общими, и вашему приложению не нужно анализировать штрих-код на предмет значения.

Другая причина, по которой они просты, заключается в том, что вы столкнется с ситуацией, когда этикетка повреждена и ее невозможно отсканировать.Затем пользователь должен иметь возможность вручную вводить данные, не тратя дополнительное время на поиск специальных символов и т. Д.

...