Универсальная утилита импорта данных

39 5

На проекте N заказчику потребовалась загрузка исторических данных. Всё необходимое заказчик выгрузил в Excel. В начале всё было как положено – мы взяли утилиту импорта данных и согласно проектному решению разработали необходимые модификации, а затем на их основе сделаны соответствующие доработки утилиты для всех кастомных полей и новых справочников.

А затем началось то, что послужило поводом для проведённых работ и данной статьи – постоянные правки для разработанных модификаций со стороны заказчика. Не поймите неправильно, правки – это неотъемлемая часть любого проекта, но когда ради одного нового поля в справочнике ты вынужден повторять ряд однотипных действий, на которые тратится драгоценное время, то возникает огромное программистское желание создать универсальную утилиту, которая автоматически учитывала бы все внесённые в разработку изменения.

Задача

Итак, дабы в дальнейшем более не пришлось выполнять сизифов труд, приняли решение разработать универсальную утилиту импорта данных, которая:

  • автоматически формирует шаблон для нужного справочника;
  • создает объекты в системе на основании данных, введенных в шаблон;
  • имеет возможность загружать записи, содержащие в себе свойства-коллекции (штатная утилита такой функционал не поддерживает).

Самая главная задача – дальнейшее использование утилиты должно быть возможно без дополнительных модификаций, а следовательно без привлечения разработчика.

Результат

Утилита получилась двухкомпонентной: решение для Directum RX и собственно сам исполняемый файл (exe-шник). Работает она, как и её “предок”, через сервис интеграции. Для демонстрации смоделируем ситуацию:

Предположим, нам потребовалась загрузка данных, аналогичная описанной в предыстории, только в нашем случае разработка настолько «кастомная», что мы создаём новый справочник. Итак, мы заранее поставили разработанное решение, сделали нужный нам справочник, который получился таким (прошу прощения за названия):

  • Name – string, необязательное;
  • Test – коллекция;
  1. TestString – string, необязательное;
  2. Required – string, обязательное;
  3. Navigation – Ссылка:Department, необязательное.
  • TestEmployee – Ссылка:Employee, обязательное;
  • TestInt – int, необязательное.

И последний штрих – поставили галочку “использовать в сервисе интеграции”. Всё. Провели публикацию, и, крайне важно, инициализацию. Убедились, что всё работает.

Далее запускаем утилиту, которая встречает нас таким окном (решено было сделать взаимодействие через графический интерфейс, так как предполагается, что так будет удобнее для конечного пользователя):

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

Нажимаем кнопку “Создать шаблон”. В открывшемся окне необходимо выбрать разработанный справочник и сформировать шаблон к нему:

Цветные поля имеют следующие обозначения:

  • Красный - обязательные реквизиты;
  • Синий - свойства-ссылки;
  • Фиолетовый – свойства-ссылки, которые являются обязательными.

Для свойств-ссылок поиск осуществляется по ключевому полю, которое утилита предложит выбрать при импорте. Если коллекция нам не нужна – просто не заполняем её. При заполнении коллекций последующие поля не заполняются (на следующем скрине продемонстрировано).

Заполняем необходимые нам данные:

Стоит сказать пару слов о заполнении шаблона. Сейчас предполагается, что шаблон заполняется вручную. Возможно, в дальнейшем будет реализовано какое-либо решение для ускорения и этого процесса, если возникнет такая необходимость, но на данном этапе оно отсутствует.

Сохраняем, нажимаем на главной форме утилиты кнопку “Импортировать данные”, выбираем только что сохранённый файл и справочник для импорта:

Нажимаем  кнопку “Импорт”, после чего  утилита предлагает нам настроить ключевые поля для реквизитов – данного справочника и всех свойств-ссылок. По ним будет осуществляться поиск внутри системы.

Жмём “Подтвердить”, дальше остаётся только ждать загрузки, за которой можно наблюдать по лог-окну:

После оповещения утилиты о завершении загрузки идём в систему и проверяем результат.

 

 

 

Всё успешно загружено.

Заключение

Утилита пока не доведена до полного рабочего состояния, в ней присутствует ряд недочётов, которые требуют доработок:

  • нет механизма по загрузке документов и их тел;
  • предварительные тесты показали, что требуется оптимизация загрузки (на одну сущность может уходить до 10 секунд);
  • логирование недостаточно информативное;
  • некоторым блокам кода утилиты требуется рефакторинг.

Однако уже в текущем виде утилита способна выполнять рутинные операции по импорту данных в систему. А главное, она позволяет снизить трудоемкость импорта исторических данных за счет того, что её использование возможно без дополнительных модификаций. Разработчику больше не придётся производить ряд однотипных действий внутри стандартной утилиты:

  • создание модели справочника;
  • создание шаблона excel;
  • реализация обработчика загрузки данных на основании шаблона.

Предложенное решение позволяет перейти сразу к заполнению шаблона.

На доработку всех недочётов уйдёт какое-то время. Целью же данной статьи является предварительное ознакомление и сбор предложений и идей. Поэтому, пишите ваши комментарии и вопросы (если таковы имеются). Всем удачи! Спасибо за уделённое время!

Юлия Литвинюк

Отличная работа, давно назрела такая потребность 

Из пожеланий - добавить чтобы настройку справочника, ключевых полей для реквизитов и всех свойств-ссылок можно было выгружать в конфиг. Чтобы разработчик один раз настроил и отдал консультанту/заказчику для самостоятельного импорта. А им оставалось только указать файл с данными и конфиг с настройками.

Данил Чепелев

Юлия, на самом деле я думал произвести локализацию реквизитов, но вариант где разработчик контролирует выбор параметров таким образом мне понравился намного больше. Поэтому я обязательно учту Ваше предложение при доработках. Спасибо за Ваш комментарий!

Данил Чепелев: обновлено 29.06.2022 в 07:31

Было бы очень интересно посмотреть на исходный код.

Хайрбек, по сути обвязка вокруг сервиса интеграции с небольшой подпоркой со стороны прикладной разработки

Данил Чепелев

Хайрбек, к сожалению решение пока что находится на стадии разработки и код в настоящее время не готов к демонстрации. Вероятнее всего его конечная версия будет сильно отличаться от той, что есть сейчас.

Данил Чепелев: обновлено 14.07.2022 в 14:41

Авторизуйтесь, чтобы написать комментарий