...

вторник, 20 марта 2018 г.

[Из песочницы] Amazon S3 + 1С. Часть 1. Интерфейс

image

Всем привет, с вами Низамов Илья и сегодня я начинаю цикл статей по написанию обработки взаимодействия с облаком Amazon s3 из 1С.

Обработка Amazon s3 позволяет получат список файлов по фильтру, скачать необходимые файлы с Amazon s3 используя amazon s3 api, отправлять файлы напрямую из 1С используя multipart/form-data.

Основная сложность работы с облаком Amazon s3 связана с тем, что 1С в http запросах умеет использовать только basic аутентификацию, в Amazon же используется AWS Signature
Version 4. Вот такую аутентификацию я и буду создавать используя средства 1С.
В статье очень подробно расписаны способы аутентификации. 1С умеет работать только с basic аутентификацией, что накладывает определенные ограничения на использование ее с современными web приложениями. Как вы можете видеть в статье, безопасных способов аутентификации гораздо больше.

Теперь откроем документацию по Amazon S3 REST API. Для работы с файлами в облаке нам необходимо будет использовать запросы с аутентификацией AWS Signature Version 4. Процесс получения сигнатуры для отправки в запросе описан на схеме.

StringToSign зависит от типа запроса, как эта строка формируется я покажу в следующих статьях.

Чтобы получить SigningKey нам необходимо последовательно выполнить 4 хеш функции HMAC-SHA256 передавая в качестве ключа значение предыдущей функции.

Итоговую сигнатуру вычисляем с помощью хеш функции передавай в качестве ключа SigningKey и StringToSign в качестве параметра вычисления хеша.

Вконце сигнатуру приводим к шеснадцатиричной строке.

В этой части я буду разрабатывать интерфейсную часть обработки.

Добавим новую обработку в дереве конфигурации, назовем ее AmazonS3. Создадим новую управляемую форму и на ней разместим группу — страницы для размещения трех вкладок. Потом добавим три группы с видом — страница. В корень формы добавим стандартную группу без отображения, имя — ГруппаЛоги.

image

Добавим необходимые реквизиты, в основном все строкового типа с длинной 0 и одну таблицу значений.

image

Разместим часть реквизитов на странице Настройки.

Вниз формы перенесем реквизит Logs, отключим вывод заголовка и выберем много строчный режим.

У элемента СтраницаНастройки поменяем заголовок на «Настройки», тоже самое сделаем с элементами СтраницаЗагрузка и СтраницаВыгрузка, установим заголовки «Загрузка» и «Выгрузка».

Добавим две команды «ВыгрузитьФайлы» и «ЗагрузитьФайлыXML». На страницу «Выгрузка» перенесем таблицу значений «СписокВыгрузки», в ее командную панель перенесем команду «ВыгрузитьФайлы».

На странице «Загрука» разместим реквизит «ПапкаНаКомпьютере» и команду «ЗагрузитьФайлыXML».

У обоих команд изменим цвет фона и шрифт.

Откроем модуль формы и создадим область «Интерфейс».

У элемента «ПапкаНаКомпьютере» изменим свойство КнопкаВыбора — Да и создадим, на клиенте, обработчик события «НачалоВыбора». В обработчике разместим код под вызову диалога выбора файла, и для отказа от модальности, результат выбора будем обрабатывать через Оповещение. В обработке оповещения, если папка выбрана, полученный результат поместим в реквизит «ПапкаНаКомпьютере».

Для того чтобы значения в реквизитах автоматически сохранялись нам необходимо изменить свойство формы «АвтоматическоеСохранение» в Использовать, и указать какие реквизиты будут автоматически сохранять свои значения при закрытии формы и восстанавливать их при открытии.

Теперь создадим логику работы с таблицей «СписокВыгрузки», данный список будет содержать путь к файлу и имя файла которые необходимо загрузить в облако. У элемента «СписокВыгрузки», на клиенте, создадим обработчик события «ПередНачаломДобавления» и разместим код для вызова диалога выбора файла, от стандартной обработки события откажемся.
В обработчике оповещения обработаем полученные данные, если данные получены то добавим строку в таблицу и заполним реквизиты полным путем к файлу, имя файла получим обработав полный путь.

Если сейчас запустить обработку в пользовательском режиме, то мы увидим, что элемент Logs не растягивается до конца формы. Чтобы это исправить надо отключить свойство «АвтоМаксимальнаяШирина».

Вернемся в модуль формы и создадим область «ОбработчикиСобытийФормы». В ней разместим стандартный обработчик формы «ПриСозданииНаСервере». Здесь я размещу на время отладки код по заполнению таблицы значений тестовыми данными.

Вот так в итоге выглядит наша обработка.

На этом все, спасибо за внимание. В следующих частях будет интереснее.

Let's block ads! (Why?)

Комментариев нет:

Отправить комментарий