Создание расширяемых конфигураций в Microsoft BizTalk Server 2004
Гибкость разрабатываемого прикладного решения всегда является его большим преимуществом, особенно в условиях динамично развивающейся информационной системы предприятия. Недостаточная расширяемость системы может вызвать проблемы при внесении даже небольших изменений. Добавление новых возможностей и вовсе может поставить вопрос о переработке системы «с нуля», что потребует значительных инвестиций. Таким образом, риски, связанные с ростом потребностей пользователей, при проектировании системы обязательно должны учитываться. В этой статье речь пойдет о некоторых подходах, которые могут использоваться при разработке гибкого решения на платформе Microsoft BizTalk Server 2004. Сразу отмечу, что она ориентирована на системных архитекторов и разработчиков систем на платформе Microsoft и подразумевает некоторый опыт работы с BizTalk Server 2004.
Сценариев, где может понадобиться гибкость прикладного решения, множество. Например, системы с часто меняющимися структурами документов; системы, импортирующие данные из ненадежных источников (ручной ввод), да и просто системы, в которых требуется свести к минимуму вмешательство в исполняемый код или настройки. Кратко рассмотрим пример, когда все перечисленное присутствовало в проекте, выполненном специалистами компании IBS для одной из крупных российских финансовых структур.
При проектировании корпоративной системы поддержки нормативно-справочной информации для этой компании в концепцию системы было первоначально заложено требование гибкости, причем со стороны заказчика это требование было приоритетным. Особо было оговорено, что большую часть задач по интеграции с системой предстоит выполнять людям, далеким от интеграционных технологий. Для выполнения указанных требований в качестве интеграционного средства для данной системы была выбрана платформа Microsoft BizTalk Server 2004. Обширная практика IBS позволила специалистам компании создать технологическое решение, обеспечившее консолидацию, централизованное хранение, обработку, анализ и управление нормативно-справочной информацией66 и полностью соответствующее требованиям и спецификациям заказчика.
На начальном этапе разработки системы был проведен анализ интегрируемых систем и источников справочных данных. В ходе анализа выяснилось, что, помимо систем SAP R/3, имеющих развитую поддержку импорта/экспорта данных, в том числе с помощью собственных интеграционных средств, имеются и другие системы, у которых такие возможности отсутствуют. Часть источников данных представляли собой периодически обновляемые файлы программы Microsoft Excel. На основании полученных сведений была поставлена задача построить отказоустойчивую систему импорта/экспорта данных, которая могла бы одинаково успешно работать как со стандартизированными форматами (IDOC), так и с документами, создаваемыми вручную. Кроме того, было необходимо обеспечить подстройку интеграционной среды при внесении изменений в структуру документов системы без участия специалиста по Biztalk Server.
Для решения этой задачи было разработано комплексное решение, использующее следующие базовые методики:
- поздняя верификация входящих документов внутри оркестровки;
- использование карт преобразований вне BizTalk Server;
- работа с плоскими форматами (CSV, DBF) без использования адаптеров и без описания схемы документов.
Рассмотрим каждый из подходов подробнее.
Поздняя верификация входящих документов внутри оркестровки
Инициализация обработки входящего документа в оркестровке начинается с опознания и сопоставления документа с имеющимися XSD-схемами. При несоответствии документа ни одной из схем или нарушении его структуры оркестровка не запустится, а все ошибки попадут в журнал приложений Application Log, причем с таким скудным описанием, что быстро установить точную причину неполадки будет невозможно. Это не вызовет особых проблем, если связь между BizTalk и интегрируемой системой четко регламентирована и отлажена, но что делать, когда ежедневно поступают документы, создаваемые пользователями вручную? В этом случае очень важно не просто зафиксировать факт ошибки, но и установить, в каком файле и в каком конкретно месте этого файла допущена ошибка. Причем возникновение такой ошибки не должно повлиять на обработку другой информации из файла.
Экран 1. Настройка типа сообщения |
Для того чтобы обеспечить возможность такой обработки, необходимо отключить первичную верификацию входящих документов, указав в качестве типа сообщения (Message Type) не одну из имеющихся XSD-схем, а стандартный класс System.Xml.XmlDocument (см. экран 1).
Таким образом, одна проблема решена — в оркестровку будут попадать любые XML-файлы, но как же быть с файлами, структура которых нарушена? Для того чтобы заставить BizTalk не обращать на это внимания, необходимо в настройках документа Receive Location выбрать Receive Pipeline = PassThruReceive (см. экран 2).
Экран 2. Настройка Receive Pipeline |
После этого в оркестровку могут попадать любые документы, даже невзирая на то, что мы указали тип сообщения System.Xml.XmlDocument. Возникает резонный вопрос, как загрузить документ, который не обязательно является XML, проверить его и затем обработать?
В оркестровку документ попадает в виде сообщения, имеющего тип Microsoft.XLANGs.BaseTypes.XLANGMessage. Один из способов получить из него XML-документ — это открыть сообщение как поток данных System.IO.Stream и затем подгружать из него данные, одновременно проверяя их на соответствие формату XML и используемым XSD-схемам c помощью класса System.Xml.XmlValidatingReader, как показано в листинге 1.
Эту функцию можно вызвать в оркестровке из блока Expression, передав в качестве параметра сообщение, полученное в блоке Receive. При возникновении несоответствия поступающих данных формату XML или используемой XSD-схеме сообщения об ошибках можно перехватывать, анализировать и затем отправлять обратно в систему-источник в удобном виде, например: «Не заполнено обязательное поле NAME в такой-то строке в таком-то файле».
Использование карт преобразований вне BizTalk Server
Специалисты, имевшие опыт преобразования XML-файлов с помощью технологии XSLT и знающие, что для создания карт преобразования визуальная среда Biztalk является довольно удобным средством, справедливо заметят: «Как воспользоваться этими картами в своем приложении, не устанавливая и не настраивая Biztalk Server?» Сначала XSL-файлы необходимо получить из Biztalk Server, так как Biztalk хранит описание карты в своем внутреннем формате (.btm). Для этого надо открыть Visual Studio 2003, где в Solution Explorer нажать правой кнопкой мыши на нужный файл (.btm) и выбрать в контекстном меню Validate Map. После успешной верификации карты в окне Output появятся ссылки на сгенерированный XSL-файл и соответствующий ему файл Extension Object XML.
Задействовать сгенерированный XSL-файл можно с помощью классов System.Xml.Xsl.XslTransform и System.Xml.Xsl.XsltArgumentList. Воспользуемся следующим классом, описанным в листинге 2.
Применение класса BizTalkMap проиллюстрировано на примере листинга 3. Пути к файлам должны быть определены в переменных:
- xsltPath - путь к карте преобразования XSL;
- extensionPath - путь к файлу с Extension Object XML (необязательный параметр);
- instancePath - путь к исходному файлу;
- destPath - путь к файлу с результатами преобразования.
Работа с плоскими форматами (CSV) без использования адаптеров и описания схем документов
При выстраивании взаимодействия с унаследованными системами предприятия возникает необходимость настройки преобразования из форматов с уже реализованной поддержкой. Как правило, это CSV, DBF и т. д. Если действовать стандартно, то нужно сначала установить соответствующий адаптер, затем полностью описать схему документа (какое поле за каким следует, каким разделителем разбиты поля и строки и т. д.) Однако такая последовательность действий не нужна, если требуется просто преобразовать CSV в XML и передать его в оркестровку для дальнейшей обработки (верификации, преобразований и т. д.) Рассмотрим эти два формата (см. экран 3). В первой строке CSV-файла содержатся наименования столбцов, запомнив которые мы можем формировать названия атрибутов в XML-файле. А по имени исходного файла можно формировать название содержащего эти атрибуты элемента.
Экран 3. Преобразование CSV в XML |
По такому же принципу можно читать XML-данные из других форматов. Например, из DBF-файла названия атрибутов можно получить, считав метаданные из объекта System.Data.OleDB.OleDbDataReader, открыв DBF-файл с помощью System.Data.OleDb.OleDbConnection. Пример чтения одной записи из DBF-файла в виде XML показан в листинге 4. Параметры dirName и tableName в данном примере сформированы вместе:
Путь к файлу DBF = dirName+tableName+».dbf»
Конечно, данный подход не универсален, но он позволяет, во-первых, сэкономить время на описании исходных форматов и внесении в эти описания изменений, а во-вторых, такой способ чтения файлов в паре с концепцией поздней верификации, описанной раннее, представляет собой не что иное, как гибкую систему чтения данных.
Ярослав Помазков - Эксперт ПО-департамента интеграционных решений компании IBS.