Окончание. Начало см. PC Week/RE № 5/2002, с.20.
Опыт применения XML в системе “Контур Корпорация”
Итак, можно привести множество примеров подходов к применению XML в бизнес-системах, но не все они служат залогом желаемых результатов. За кажущейся простотой языка, как всегда, скрывается бездна тонких нюансов и подводных камней. Наш опыт встраивания XML в информационную систему и создания приемлемых форматов для описания предметной области показал, насколько это непростая задача.
Система “Контур Корпорация” компании Intersoft Lab. предназначена для сбора деловых данных в корпоративном хранилище многофилиальной организации, их консолидации и дальнейшего использования для анализа, формирования внутренних и внешних отчетов, бюджетирования и выполнения других управленческих функций. Эта система является своеобразной студией по созданию деловых хранилищ данных, что означает возможность изменений структур хранилища во время настройки конкретного приложения и при расширении номенклатуры данных в процессе эксплуатации системы.
Первоначально для обмена данными и дистрибуции метаданных применялся текстовый формат. Структурно он объединял INI-файлы и файлы с разделителем. Разработка процедур импорта-экспорта была одной из наиболее трудоемких задач, которая осложнялась еще и тем, что система рассчитана на сбор первичных данных многофилиальных организаций, т. е. огромных объемов информации, требующей проверки и очистки во время загрузки в хранилище.
Поэтому появление XML-формата, упрощающего контроль структуры транспортного файла и обеспечивающего простоту расширения номенклатуры информационных объектов, выразительность и гибкость, было воспринято с большим энтузиазмом. Но встраивание XML привело к переосмыслению архитектуры системы и серьезной ее модификации - созданию специального объектного слоя и адаптации базы данных. При этом было рассмотрено множество вариантов, XML-формат совершенствовался как в процессе разработки, так и при опытной эксплуатации системы.
Результат оказался впечатляющим: кроме значительного уменьшения трудоемкости разработки процедур обмена данными были получены многие дополнительные возможности. Рассмотрим основные подходы к применению XML в системе “Контур Корпорация”.
Объектная организация системы
Дистрибуцию метаданных в формате XML, автоматизацию создания конкретных XML-форматов при изменении структуры хранилища данных и исключение программирования процедур загрузки данных обеспечивает объектная организация системы “Контур Корпорация”:
Каждому объекту предметной области соответствует совокупность таблиц в базе данных, класс в библиотеке прикладных классов и базовый объект в XML-формате.
Каждый прикладной объект представлен в виде двух классов в библиотеке и двух объектов в XML - списка и экземпляра, например “Счета” и “Счет”.
Каждому атрибуту объекта предметной области соответствует поле в таблице базы данных, свойство в классе прикладной библиотеки и тег в XML-формате.
Существуют обязательные теги, которые описывают неотъемлемые свойства прикладного объекта, например номер счета.
Существуют необязательные теги, которые описывают дополнительные свойства прикладного объекта, специфичные для конкретного приложения или организации, например категория контрагента.
Объект может иметь тип, что меняет состав его дополнительных атрибутов и соответственно тегов. Например, объект “Документ” может иметь тип “Платежное поручение” или “Договор поставки”, каждый из этих документов имеет собственный состав атрибутов.
Каждый класс библиотеки прикладных классов имеет стандартные и, возможно, специфические методы. Например, обязательный метод put помещает данные объекта в базу данных, а метод get выгружает объект в оперативную память или в XML-файл.
Ведение хранилища и дистрибуция метаданных
Словарь метаданных системы может быть полностью или частично выгружен в XML-файл и загружен из него. В момент загрузки происходит генерация новых таблиц и процедур, адаптация интерфейсов под новые структуры хранилища.
Поэтому структура дистрибутива состоит из инсталлятора собственно системы и XML-файла, содержащего настройки системы, которые и представляют собой конкретное “приложение”. XML-представление словаря метаданных позволяет не только создавать дистрибутив приложения, но и обмениваться нормативно-справочной информацией и другими настройками между несколькими копиями системы и с другими системами.
Метаданные, описывающие прикладные объекты, сохраняются в базе данных системы при описании новых объектов в дизайнере хранилища данных. Это позволяет сразу после настройки нового типа контрагента, документа, финансового показателя сгенерировать XML-шаблон для обмена данными с внешними приложениями. Кроме того, сами метаданные могут быть выгружены для использования во внешних системах. Например, для стандартизации нормативно-справочной информации.
Обмен данными
Задача интеграции с другими приложениями является одной из ключевых для системы. В качестве формата для сбора данных был выбран XML. Возможность расширения структуры хранилища добавляет системе гибкости и позволяет собирать и хранить самые разные данные. С другой стороны, невозможно заранее описать форматы до уровня всех разрешенных тегов.
Для создания адекватного по гибкости механизма создания форматов была разработана специальная технология - Dynamic XML. Ее суть состоит в том, что XML-форматы не описываются вручную, а генерируются в момент изменения настроек хранилища по заранее определенным правилам. После этого система готова к сбору данных в новом формате. Сразу же после поступления новых XML-документов они будут автоматически загружаться в систему.
Важнейшее преимущество, которое дает объединение объектной прикладной библиотеки и объектного XML-формата, состоит в том, что при этом не требуется разрабатывать или модифицировать процедуры загрузки. После описания в системе новых бизнес-объектов эти процедуры адаптируются к ним автоматически. Принцип их (процедур) работы следующий: по имени тега XML-документа определяется класс библиотеки, которому он соответствует, создается объект этого класса, свойства объекта заполняются из вложенных тегов и вызывается метод “загрузить”, имеющийся у каждого класса. Так же автоматически адаптируются процедуры выгрузки данных из хранилища. В этом случае на вход подаются списки объектов и параметры выгрузки, параметры превращаются в свойства объектов и для каждого объекта вызывается метод “выгрузить”.
Контроль и очистка данных реализуются как выполнение внешних, подключаемых функций, выполняющихся по событию. Например, событие “Ошибка загрузки” класса “Показатель” вызывает пользовательскую функцию, которая получает доступ ко всем свойствам показателя. Эта функция может остановить загрузку, исправить ошибку, например перекодировать валюту, а также послать почтовое сообщение администратору или выполнить другие действия.
В случае выгрузки данных для каждого внешнего источника данных необходимо разработать специальную программу. При этом можно применить любой язык программирования, в том числе и встроенный в систему. Существует миф о возможности выгрузки данных из любого источника данных с помощью специальных утилит, настраиваемых мышкой в визуальной среде. К сожалению, это лишь миф. Так, например, популярная система “1С:Предприятие” имеет закрытую базу данных, легальный доступ к которой можно получить, только если воспользоваться встроенным языком программирования или вызовом функций COM-объекта, а никак не универсальными утилитами извлечения данных. Во многих случаях необходимые для другой системы данные в базе данных не хранятся, а вычисляются. Например, часто хранятся данные о приходе и расходе, а остатки на произвольную дату вычисляются. Поэтому выгрузка данных является самой сложной и менее всего автоматизируемой частью процесса интеграции приложений.
Когда задача состоит в сборе и консолидации данных из однотипных или различных систем, установленных в филиалах, один или несколько видов программ выгрузки устанавливается во всех филиалах и утверждается регламент выгрузки данных. Выгружаемые XML-документы архивируются, при необходимости шифруются и загружаются в электронную почту. При поступлении в головной офис предприятия файлы переносятся во входной каталог системы, где выполняется проверка данных и загрузка их в центральное хранилище. Эта технология хорошо зарекомендовала себя в ряде крупных многофилиальных организаций.
Предоставление данных Интернет-клиентам
Web-интерфейс системы позволяет передавать команды на выполнение операций над объектами и получать результаты этих операций в виде XML-документов. Этот механизм обеспечивает возможность разработки динамических Интернет-интерфейсов.
Отдельная технология применяется для описания отчетов. Отчет разрабатывается как два взаимосвязанных модуля - программа получения данных и выполнения вычислений и форма отображения. Обмен данными между вычисляющей и отображающей частями отчета происходит в специальном XML-формате, не зависящем от отображающей системы. Для нее создается внешний модуль, интерпретирующий этот формат в специфический API системы. Это позволяет показывать в Win-клиенте и в Интернет-браузере один и тот же отчет, разработанный для отображения, например, через Excel.
С автором статьи, техническим директором компании Intersoft Lab., можно связаться по адресу: nekrasov@iso.ru.