Подсистема импорта/экспорта данных для слойницы

advertisement
Подсистема импорта/экспорта данных для слойницы
Введение
Файл
Уровень
формата
Уровень
данных
Слой
конфигурации
экспорта
Форматтер
экспорта
Общие функции
форматтера
Форматтер
импорта
Скрипт экспорта
Общие функции
импорта/
экспорта
Скрипт импорта
Слой данных
Слой данных
Слой
конфигурации
импорта
Описание слоя
данных
Database
Рассмотрим простейший случай: импорт и экспорт данных одного слоя. Инициатором
экспорта является сам объект слоя.
Экспорт:
1. Слой вызывает скрипт экспорта, передав ему собственные данные и код экспорта
2. Скрипт экспорта считывает конфигурацию экспорта с заданным кодом. По
конфигурации скрипт экспорта определяет тип форматтера, который ему нужно
вызвать для выгрузки. Также в конфигурации может быть указан параметр для
форматтера (любая информация в виде строки).
3. Скрипт экспорта вызывает форматтер (АБЛ-скрипт), передав ему данные и
параметр.
4. Форматтер выгружает данные в определенном формате в определенное хранилище.
Если форматтер предназначен для выгрузки в файл, то запрашивается имя файла
через диалог. Форматтер может использовать описание слоя и параметр из
конфигурации для форматирования значений.
Импорт:
1. Слой вызывает скрипт импорта, передав ему код импорта и себя
2. Скрипт импорта считывает конфигурацию импорта с заданным кодом. В
конфигурации может быть указан параметр для форматтера (любая информация в
виде строки)
3. Скрипт импорта вызывает форматтер (АБЛ-скрипт), передав ему параметр и слой,
в который закачивать данные.
4. Форматтер считывает данные из определенного хранилища из определнного
формата. Если форматтер предназначен для загрузки из файла, то запрашивается
имя файла через диалог. Форматтер может использовать описание слоя и параметр
из конфигурации для расформатирования значений. Данные закачиваются в слой.
В рассмотренной архитектуре существует четкое разделение на два уровня:
 Уровень данных, на котором производятся подготовка (преобразование) данных. В
рассмотренном простейшем случае никаких преобразований не производится.
Алгоритму экспорта все равно, куда дальше пойдут данные. Также и алгоритму
импорта все равно, откуда появляются данные.
 Уровень формата, который задает как хранилище, с которым идет взаимодействие
подсистемы импорта/экспорта, так и правила выгрузки/загрузки данных в это
хранилище (включая форматирование значений). Соответсвенно, форматтерам все
равно, какие данные им нужно выгружать и загружать: в их распоряжении есть
описание слоя и настрйки из конфигурации.
Уровень данных
Мы рассмотрели простейший случай импорта и экспорта, когда выгрузке и загрузке
подлежат данные с набором полей, совпадающим с набором полей слоя.
В общем же случае алгоритмы импорта и экспорта набора данных выглядят следущим
образом:
Да
Начало
Начало
Взять исходные данные для
экспорта
Загрузить данные в формате
загрузки
Определить формат данных
для выгрузки
Определить формат данных
для сохранения
Формат
данных для выгрузки
совпадает с форматом
исходных данных?
Нет
Преобразовать исходные
данные в формат для
выгрузки
Выгрузить исходные данные
Да
Формат
загруженных данных
совпадает с форматом
данных для
сохранения?
Преобразовать загруженные
данные в формат данных
для сохранения
Сохранить загруженные
данные
Сохранить преобразованные
данные
Выгрузить преобразованные
данные
Конец
Нет
Конец
Теперь рассмотрим, как реализовать эти алгоритмы в нашей архитектуре со слоями.
Схема экспорта:
Форматтер
Слой
конфигурации
экспорта
Скрипт экспорта
Слой формата
Вычислялка
Клиент экспорта
Слой данных
Database
1. Инициатором экспорта может быть любой код, который заполнит коллекцию
параметров, передав скрипту экспорта код экспорта и слой данных.
2. Скрипт экспорта считывает конфигурацию экспорта по заданному коду. В
конфигурации помимо типа форматтера может быть указан алиас слоя формата.
3. Определяется формат выгрузки
a. Если алиас слоя формата не указан, тогда выгружаться будут исходные
данные.
b. Если алиас слоя указан, тогда скрипт экспорта создает слой формата и
вызывает его вычисление, передав слой с исходными данными в качестве
источника данных для вычислений.
4. Скрипт экспорта вызывает форматтер для выгрузки данных.
Схема импорта:
Форматтер
Слой
конфигурации
импорта
Скрипт импорта
Слой формата
Вычислялка
Клиент импорта
Слой
преобразования
Копирование
Database
Слой данных
1. Клиент импорта вызывает скрипт импорта. Клиентом импорта может быть любой
код, который передаст скрипту код импорта и слой, в который необходимо
закачать данные.
2. Скрипт импорта считывает конфигурацию импорта с заданным кодом. В
конфигурации помимо типа форматтера может быть указан алиас слоя формата, а
также алиас слоя преобразования.
3. Определяется формат импортируемых данных.
a. Если алиас слоя формата указан
i. создается слой формата и вызывается форматтер для закачки в него
данных.
ii. если указан алиас слой преобразования, то создается слой
преобразования и вызывается его вычисление с использованием
данных из слоя формата
iii. данные перекачиваются в слой данных из слоя преобразования (или
слоя формата, если слой преобразования не задан)
b. Если алиас слоя формата не указан
i. вызывается форматтер для закачки данных в копию слоя приемника
ii. если указан алиас слоя преобразования, то создается слой
преобразования и вызывается его вычисление с использованием
данных слоя приемника
iii. данные перекачиваются в конечный слой приемника
Уровень формата
Для каждого поддерживаемого формата существует два АБЛ-макроса: форматтер
экспорта и форматтер импорта. Скрипты импорта и экспорта определяют имя макросов
форматтеров, которые нужно вызывать, по формату, который указан в конфигурации
импорта или экспорта соответственно.
Все поддерживаемые форматы перечислены в слое
«Системные.ФорматыИмпортаЭкспорта», в котором для каждого формата задается:
 Имя формата
 Имя скрипта форматтера для импорта
 Имя скрипта форматтера для экспорта
Форматтер экспорта:
Задача форматтера экспорта – выгрузить «куда-то» данные некоторого слоя (который ему
передается). Это «куда-то» определяется типом форматтера.
Форматтер экспорта получает при вызове следующую информацию:
 Данные, которые следует экспортить
 Описание слоя (по которому можно получить более детальную информацию о типе
данных, чтобы правильно отформатировать значения)
 Параметр из конфигурации экспорта – обычная строка, в которой может задаваться
любая информация. Синтаксис этой строки зависит от типа форматтера.
Недостающую информацию форматтер должен получить сам либо от пользователя, либо
из каких-то других предопределенных источников. Например, имя файла, в который
следует выгрузить данные, логично запросить у пользователя или считать из какихнибудь настроек.
Форматтер импорта:
Задача форматтера импорта – загрузить «откуда-то» данные некоторого слоя (который
ему передается). Это «откуда-то» определяется типом форматтера.
Форматтер импорта получает при вызове следующую информацию:
 Описание слоя (по которому можно получить более детальную информацию о типе
данных, чтобы правильно расформатировать значения)
 Параметр из конфигурации импорта - обычная строка, в которой может задаваться
любая информация. Синтаксис этой строки зависит от типа форматтера.
Недостающую информацию форматтер должен получить сам либо от пользователя, либо
из каких-то других предопределенных источников. Например, имя файла, из которого
следует загрузить данные, логично запросить у пользователя или считать из каких-нибудь
настроек.
Множественный импорт/экспорт
Множественный импорт/экспорт – это операция, выполняемая сразу над несколькими
слоями. Т.е. множественный импорт загружает данные нескольких (возможно связанных)
слоев из одного хранилища. Также множественный экспорт выгружает данные
нескольких (возможно связанных) слоев в одно хранилище.
Множественный импорт и экспорт реализуются АБЛ-скриптами, которые надстраиваются
над скриптами импорта и экспорта и используют их для импорта и экспорта отдельно
взятого слоя.
Форматтер
Форматтер
Слой формата 1
Скрипт экспорта
Скрипт
множественного
экспорта
Клиент экспорта
Слой формата 2
Слой формата 3
Слой данных 1
Скрипт импорта
Скрипт
множественного
импорта
Слой данных 2
Слой данных 3
Клиент импорта
Множественный экспорт:
1. Клиент экспорта вызывает скрипт множественного экспорта, передав ему
исходные слои с данными и код экспорта. Клиент экспорта может и не передавать
слои, если необходимо выгрузить все утвержденные данные слоев: скрипт экспорта
выберет их самостоятельно без ограничений.
2. Скрипт множественного экспорта считывает конфигурацию экспорта с заданным
кодом. В конфигурации может быть указано несколько записей с одинаковым
кодом экспорта – это означает, что экспорт множественный, и необходимо
выгрузить несколько слоев.
3. Для каждой из записей в конфигурации экспорта скрипт множественного экспорта
выбирает слой с данными (если он не передан ему параметром, то создает и
выбирает в него все утвержденные данные) и вызывает скрипт экспорта. Скрипту
экспорта передается экспортируемый слой, а также коллекция слоев-источников,
которые могут использоваться при вычислениях слоя формата.
4. Скрипт экспорта по заданному ранее алгоритму экспортирует данные. Некоторые
параметры, значения которых определяются при выполнении экспорта, могут быть
сохранены в общей коллекции параметров и возвращены в виде результата.
Например, при выгрузке в файл сохраняется параметр с именем файла, который
запрошен у пользователя. Кроме того, в коллекции возвращается фактически
выгруженный слой (исходный слой или слой формата) в виде результата.
5. Скрипт множественного экспорта перекидывает выгруженный слой в коллекцию с
источниками данных, чтобы использовать его при экспорте следующих слоев.
Таким образом, экспорт каждого последующего слоя может использовать данные,
выгруженные на предыдущих итерациях. Поскольку коллекция параметров
используется общая для всех вызовов скрипта экспорта, параметры у пользователя
не запрашиваются повторно для каждого слоя, т.к. они кэшируются в коллекции.
При таком алгоритме важен порядок выполнения экспортов каждого слоя из заданной
конфигурации множественного экспорта. Поэтому в конфигурацию вводится атрибут,
определяющий порядок выполнения экспортов.
Множественный импорт:
Множественный импорт построен аналогично экспорту. Также используется общая
коллекция параметров при вызове импорта для каждого слоя, также вводится порядок
выполнения импортов в конфигурацию импорта. Каждый результирующий слой может
быть источником данных для последующих импортов (это позволяет, например, заменять
в детализациях естественные внешние ключи заголовка на сгенерированные суррогатные).
В результате возвращается коллекция из результирующих слоев с закачанными данными.
Импорт с генерацией задач
Иногда при импорте данных требуется помещать данные в задачи. Для этого задачи
необходимо сгенерить для каждого из импортируемых слоев.
Реализуется это еще одним АБЛ-скриптом, использующим скрипт множественного
импорта. Этот скрипт еще более высокого уровня, и уже может считаться клиентом
импорта, а не частью подсистемы импорта/экспорта. Таких скриптов может быть много, в
зависимости от мест использования импорта/экспорта данных слоев. Импорт с генерацией
задач логично использовать только на интерфейсе «Задачи».
Таким образом, все имеющиеся макросы можно разделить на уровни. Причем на каждом
уровне макросы зависят от нижестоящих, но никак не зависят от вышестоящих.
Импорт с
генерацией
задач
Скрипт
множественного
экспорта
Скрипт
множественного
импорта
Скрипт экспорта
Скрипт импорта
Форматтеры
Форматтеры
Пример: импорт/экспорт реестра расходных обязательств из районов.
Реестр расходных
обязательств (район).xls
Слои данных
Слои формата
Слои преобразования
1. Справочники.
Полномочия
1.
ФорматОбмена.
Полномочия
1. Импорт.
Преобразование.
Полномочия
2. Справочники.
ВидыНПА
2.
ФорматОбмена.
ВидыНПА
2. Импорт.
Преобразование.
ВидыНПА
3. Данные.
Суммы
3.
ФорматОбмена.
Суммы.Районы
3. Импорт.
Преобразование.
Суммы.Районы
3. Данные.
Суммы.Районы
4. Данные.
НПА
4.
ФорматОбмена.
НПА.Районы
4. Импорт.
Преобразование.
НПА.Районы
4. Данные.
НПА.Районы
Импорт.
Преобразование.
Полномочия.Вставка
Импорт.
Преобразование.
ВидыНПА.Вставка
Импорт.
ЗапросРайона
Экспорт
Импорт
Слои данных
1. Справочники.
Полномочия
2. Справочники.
ВидыНПА
На некоторых слоях висят АБЛ-обработчики:
 ФорматОбмена.Полномочия: обработчик показывает диалоговое окно, где просит пользователя указать группу полномочий,
которую необходимо выгрузить в файл. После выбора данные фильтруются по группе полномочий (первый уровень классификатора)
 Импорт.Преобразование.Полномочия: обработчик показывает слой на визуализаторе, чтобы пользователь сопоставил коды
полномочий в импортируемых данных с кодами полномочий собственного справочника.
 Импорт.Преобразование.ВидыНПА: обработчик показывает слой на визуализаторе, чтобы пользователь сопоставил коды видов
НПА с кодами в собственном справочнике.
 Импорт.ЗапросРайона: обработчик показывает диалог с запросом кода района, которому принадлежат импортируемые данные.
Выбранный код помещается в датасет, в котором будет только одно атомарное значение.
На данном примере видно, как можно использовать импортированные при импорте последующих слоев:
 Слои Импорт.Преобразование.Суммы.Районы и Импорт.Преобразование.НПА.Районы использует данные слоя
Импорт.Преобразование.Полномочия.Вставка для подмены кодов полномочий на коды собственного справочника.
 Слой Импорт.Преобразование.НПА.Районы использует данные слоя Импорт.Преобразование.ВидыНПА.Вставка для подмены
кодов видов НПА на коды собственного справочника.
.
Download