Задача [0269]: Сканирование через Synergy Agent

Формулировка проблемы: текущая возможность сканирования реализована через java-апплет, который на данный момент блокируется в большинстве популярных браузерах.

Используются: Проекты -> Детали проекта; Хранилище; Потоки работ -> Приложения, Прочие.

Решение: Реализовать возможность сканирования через пользовательский агент Synergy (только для ОС Windows).

Добавить в агент возможность обрабатывания post-запросов на URL "/scan" с параметром TYPE, имеющим следующие значения:

SCAN

запускает окно сканирования в пользовательском агенте Synergy;

STATE

запрашивает статус сканирования;

INFO

получает информацию о формате, в котором необходимо получить файлы, а также сами файлы;

и параметром url, имеющим значение URL, из которого был вызван агент в формате: "%адрес%/Synergy/". Например:

http://192.168.2.203:8389/scan?TYPE=SCAN&url=http://192.168.3.117:8080/Synergy/

На запросы с типами SCAN и STATE агент возвращает JSON с полем state, которое сообщает о статусе сканирования и имеет следующие варианты значений:

На запрос с типом INFO агент возвращает JSON со следующими полями:

Примеры запросов и ответов на них:

  1. Пример запроса

POST /scan HTTP/1.1
Host: localhost:8389
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

TYPE=INFO
url=http://192.168.3.117:8080/Synergy/
  1. Пример ответа агента на запрос типа STATE:

{
    "state": "SCANNING"
}
  1. Пример ответа агента на запрос типа INFO, в котором файл передается в pdf формате:

{
    "state": "SAVED",
    "name": "Документ",
    "mime": "application/pdf"
    "files":
    [
       "/var/tmp/synergy/ai/c71864b5-f9f9-4361-8c9b-eeab4d1eef4a/pdf.pdf"
    ]
}

Также в пользовательский агент необходимо добавить окно "Сканирование документа", реализация которого повторяет реализацию сканирования для апплета (но без кнопки "Показать стандартный диалог сканирования").



Основной поток событий:

  1. Отправить запрос пользовательскому агенту с типом SCAN в случае, если

    • выбран пункт меню "Сканировать" в деталях проекта при добавлении файла и в открывшемся диалоговом окне нажата кнопка "Сканировать";

    • выбран пункт меню "Сканировать" в потоках работ при добавлении файла в разделы приложения и прочие и в открывшемся диалоговом окне нажата кнопка "Сканировать";

    • выбран пункт меню "Сканировать документ" в хранилище при создании файла;

    • нажата кнопка "Сканировать" при регистрации документа в хранилище.

    Получить ответ со статусом SCANNING (возможно выполнение альтернативных потоков событий №1, №2).

  2. Откроется окно "Сканирование документа" в пользовательском агенте Synergy, в котором пользователь может сканировать документы.

    При этом система Synergy периодически (1 раз в 3 секунды) отправляет запрос пользовательскому агенту с типом STATE (возможно выполнение альтернативных потоков событий №3 и №4), ожидая завершения сканирования (смены статуса в получаемом ответе со SCANNING на SAVED).

  3. На запрос с типом STATE от системы пользовательский агент ответит JSON со статусом SAVED после того, как пользователь сохранит сканированные документы в необходимом формате в пользовательском агенте. При этом агент будет ожидать запроса со статусом INFO.

    Система отправляет запрос со статусом INFO, в ответ на который получает ссылки на файлы, которые необходимо сохранить. Файлы (или файл) добавляются в необходимую директорию в заданном формате. При этом пользователю выводится сообщение (на голубом фоне): Документы добавлены.

Правила именования файлов при сохранении сканированных документов:

При сохранении результатов сканирования необходимо для названий файлов проводить валидацию, т.е. проверять нет ли совпадающих файлов в директории, в которую будут вставляться файлы. При этом возможны 2 случая при сохранении файлов: сохранение в формате pdf и сохранение в виде изображений (jpeg, png).

  1. При сохранении одного файла (pdf, jpeg или png) если в директории назначения уже существует файл с таким же названием что и был передан в параметре name и с одинаковым расширением, необходимо одновременно вывести пользователю сообщение на красном фоне "Объект уже существует" и диалоговое окно "Дайте название файлу" с текстовым полем и кнопками "Принять" и "Отмена" (диалоговое окно и правила валидации такие же, как и в случае переименования файлов в деталях проекта), которое будет позволять сохранить файл с другим названием. "Отмена" - отсканированный файл не добавится.

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

  2. Для нескольких файлов, сохраняемых в виде изображений (png или jpeg), необходимо присваивать названия в следующем формате:

    %название_из_параметра_name% %номер_изображения%

    т.е. для нескольких файлов с названием "Документ" сохранять файлы с названиями: "Документ 1", "Документ 2" и т.д.

    Если при этом, совпадает одно из названий с номером (т.е. для нашего примера в текущей директории уже существует "Документ 2"), необходимо одновременно вывести пользователю сообщение (на красном фоне) "Объект уже существует" и диалоговое окно "Дайте название файлу" с текстовым полем и кнопками "Принять" и "Отмена", которое будет позволять сохранить файлы в следующем формате:

    %название_из_диалога% %номер_изображения%

    "Отмена" - данный отсканированный файл, у которого отменили переименование, не добавится. Проверка на совпадения названий продолжится.

Альтернативные потоки событий:

Альтернативный поток событий №1: В случае, если система Synergy, отправив запрос с типом SCAN, не получает ответа (сервер пользовательского агента не отвечает в течении 30 секунд), необходимо вывести диалоговое окно "Внимание" с кнопками "ОК", "Обновить" и текстом:

Для данного приложения ARTA Synergy не установлен, либо не запущен пользовательский агент Synergy. Установите или запустите агент и повторите попытку.

Для того, чтобы установить агент Synergy, скачайте его для ОС, установленной на Вашем компьютере:

Windows Debian/Ubuntu

где Windows - ссылка на скачивание инсталлятора для Windows, Debian/Ubuntu - ссылка на скачивание инсталлятора для Debian/Ubuntu.

При нажатии на кнопку "Обновить", система заново посылает запрос с типом SCAN пользовательскому агенту и в случаях:

Альтернативный поток событий №2: В случае, если на запрос от системы с типом SCAN, система получает ответ со статусом SCANNING или SAVED, необходимо вывести пользователю предупреждение на красном фоне со следующим текстом:

Сканирование уже выполняется. Закончите его или отмените.

Не посылать других запросов агенту (завершить процесс).

Альтернативный поток событий №3: В случае, если на запрос от системы с типом STATE, система получает ответ со статусом CANCELLED необходимо вывести пользователю сообщение на голубом фоне со следующим текстом:

Сканирование отменено.

Не посылать других запросов агенту (завершить процесс).

Альтернативный поток событий №4: В случае, если на запрос от системы с типом STATE, система не получает ответа - сервер пользовательского агента не отвечает в течении 30 секунд, необходимо вывести пользователю сообщение на красном фоне со следующим текстом:

Сканирование невозможно так как агент Synergy не отвечает. Запустите агент и повторите попытку.

Альтернативный поток событий №5: В случае, если в процессе сохранения нажимается кнопка закрытия, необходимо вывести пользователю сообщение на красном фоне со следующим текстом:

Сканирование уже выполняется.