[Из песочницы] 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

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

0-qj2ysinthhrqkp9smvbl2q-9u.png

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

adqofh0cghgz40hfz-gvvkpyox8.png

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

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

riohjevdebtdr7dvizw7xv8wuhi.png

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

wvw5kssvtujxc1adnzxpbq9qfim.png

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

8m0ickvqrta4hi7njoe8zx0627u.png

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

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

yv-hsepdzsat-smv3vyyfsmxkdq.png

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

cnvzs_tqnonpwjm3ffwra5zu2ly.png

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

lr4gicyghxdyv0zsot1unm_362s.png

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

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

wklh-vo7993cls086mgy55x78xi.png

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

abiee75tpgpkcgfgkdf_8rvtgug.png

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

© Habrahabr.ru