Судя по тому интересу, который возник в статье Flutter + 1C, которую можно прочитать, перейдя по ссылке //infostart.ru/1c/articles/1910243/, хотел бы продолжить тему флатера и языка программирования дарт.
В комментариях были вопросы от разработчиков 1С, которые спрашивали о том, как им начать изучать флатер, какими ресурсами лучше пользоваться.
Отвечая на комментарии, я писал, что прежде чем изучать флатер, необходимо изучить язык программирования дарт. Так как, не зная этого языка, будет очень трудно изучать флатер. Изучив дарт, а затем флатер, вы потратите времени меньше, чем если сразу начнете изучать флатер. Причем во втором случае есть большая вероятность вообще забросить изучение данной технологии.
(Конечно, могут быть исключения. Если разработчик хорошо знаком с ООП парадигмой программирования, может быть, уже разрабатывал приложения на других языках программирования (например Java, C#) , где работал с классами, наследованием, интерфейсами, то конечно, он может сразу начинать изучать фреймворк флатер.)
Хочу продемонстрировать вам пример небольшого, простого приложения, написанного на языке дарт (без фреймворка), которое можно использовать для начала изучения языка.
Это консольное приложение, которое подключается по http протоколу к базе данных 1С и посредством POST запроса передает на сервер файл.
Начнем с базы данных 1С. Создаем чистую информационную базу и в дереве метаданных добавляем http сервис. Сервис называем dart_1c и также называем корневой URL - dart_1c. Добавляем новый шаблон - РаботаСФайлами, и устанавливаем у него шаблон - /work-with-files. В этом шаблоне добавляем новый http метод - POST - ПолучитьФайл. В результате всех проделанных операций мы получили следующую картину:
Исходный код модуля http сервиса можно посмотреть здесь.
Прокомментирую данный код. Из тела POST запроса получаем данные. Данные, представляют собой строку, Base64. Эта строка и есть тот файл, который мы передаем на сервер. Далее преобразуем строку Base64 в двоичные данные, затем получаем заголовок, этот заголовок мы передаем на сервер. В заголовке, содержится расширение закодированного файла. На диске D сохраняем этот файл. В процессе сохранения мы формируем ему имя. В качестве имени у нас будет уникальный идентификатор + расширение.
Если запись файла прошла, успешно, мы клиенту отправляем статус 201, в противном случае статус с кодом 500 - разнообразные ошибки сервера.
Более подробно про http сервисы можно узнать тут //infostart.ru/1c/articles/1293341/
Публикуем http сервис на веб сервере. (На вашем компьютере должен быть установлен веб сервер апач или IIS). Я назвал имя публикации - dart_http_1c. Полный путь к POST ресурсу, в моем случае, такой:
http://localhost/dart_http_1c/hs/dart_1c/work-with-files
Перейдем теперь к самому интересному.
Для начала программирования на дарт, нам необходимо установить фреймворк и ide, для набора и редактирования программного кода. (Устанавливая флатер мы фреймворком можем не пользоваться, будет использовать только дарт. При установке флатера, устанавливается так же виртуальная машина дарт, которая и будет выполнять код на дарте.). Как установить флатер можно почитать в статье //infostart.ru/1c/articles/1910243/ или на официальном сайте флатер https://docs.flutter.dev/get-started/install
Насчет ide можно почитать тут https://docs.flutter.dev/get-started/editor.
Первое, что нам нужно сделать, это создать папку на компьютере, в котором будет находиться наше небольшое приложение на дарт.
Открываем эту папку в вашей любимой ide и создаем там файл main.dart.
Открываем этот файл и набираем в нем следующий код.
(Можно не устанавливать ide, а программировать в обыкновенном блокноте, но это не очень удобно. Также в коде не обработаны ошибки, которые могут выбросить исключения, например - не найден передаваемый файл, сервер не отвечает и тому подобные ошибки).
В файле main.dart создайте функцию main - эта функция является точкой входа в любое приложение флатер и дарт.
Прокомментирую написанный код:
стр. 7 - создание объекта httpClient, класса - HttpClient - это наш http клиент.
стр.8 - создание объекта класса HttpClientRequest - это наш http запрос. Мы у него вызываем метод post, куда передаем параметры подключения, а именно имя сервера, порт подключения и путь к http ресурсу.
стр.9 - готовим файл для передачи на сервер. Файл , который мы будем передавать будет наш файл на дарте - main.dart
стр.10 - получаем данные из файла и преобразуем эти данные в строку base64.
стр.11 - добавляем в пост запрос, свой заголовок -
request.headers.set("x-file-type", "txt");
(Для примера, передадим на серевер файл с расширением txt)
стр.12 - помещаем строку base64 в тело пост запроса.
стр.13. выполняем http запрос и ждем ответ от сервера -
final HttpClientResponse response = await request.close();
В ответе сервера, проверяем статусы ответа. В зависимости от статуса выводим пользователю разные сообщения. В последней строке закрываем соединение с сервером
httpClient.close();
Для того, чтобы выполнить данный код, в командной строке нужно набрать следующую команду
dart run main.dart
Для того, чтобы можно было удобно пользоваться и распространять приложение - его нужно собрать в исполняемый файл. Приложения дарт можно собирать под разные платформы. Давайте соберем это приложение под операционную систему Windows. Для этого в командной строке наберем команду dart compile exe main.dart (ее можно расшифровать так - дарт собери exe файл из файла main.dart)
Обратите внимание, у нас появился файл main.exe. Это исполняемый файла ОС Windows.
Выводы
Хотя приложение, которое тут представлено, очень простое и занимает несколько строчек, но мы узнали много нового. Как создать функцию, которая является точкой входа в приложение. Поработали с объектами File, HttpClient, HttpClietRequest, HttpClientResponse - из стандартной библиотеки дарт. Научились конвертировать данные в base64. Научились запускать приложение, а также компилировать приложение в exe файл.
Файл dt - выгрузки данных 1С можно скачать из репозитория по адресу - https://github.com/hariuc/flutter_order_test
Тестовая конфигурация для бэкенда создана технологической платформой 8.3.23.1688
Благодарю за внимание.