Две грани программирования в КИС
В.Н. Шурыгин,
к.т.н., доцент МГУП имени Ивана Федорова
А.А. Богданов,
студент МГУП имени Ивана Федорова
В статье рассматриваются вопросы использования в КИС различных языковых средств. Применительно к системе SAP R/3 анализируются возможности языка ABAP как примера специализированного языка и универсальных языков задействованных в технологии XSL - преобразований.
Внедрение на предприятиях корпоративных информационных систем (КИС) принципиально отличается от установки коробочных программных продуктов. Инсталляция и эксплуатация КИС предусматривает активное участие в этих процессах не только специалистов-пользователей и IT-администраторов, но и программистов, владеющих не только универсальными языками программирования, но и узкоспециализированными. Это обусловлено необходимостью расширения или специализации функционала КИС к нуждам конкретного предприятия, особенно при совместном использовании разнородных информационных сред. Причем, внесение тех или иных изменений может требоваться на протяжении всего периода эксплуатации системы. В статье представлено описание особенностей программирования в КИС с обзором основных языков программирования, находящих применение в процессе специализации или расширения их функционала.
Особенностью КИС (с точки зрения программистов) является использование в этих системах специализированных языков программирования. Один из таких языков, применяющийся в самой известной и самой масштабной по возможностям КИС - SAP R3, это язык ABAP.
ABAP является одним из многих специально ориентированных языков четвертого поколения (4GLs), был разработан в 1980-х. Пер-
воначально он предполагался как Report Language (на основе вводимых данных и команд создается отчет или программа генератор отчета) для корпоративной системы SAP R/2, платформы, которая позволяла крупным корпорациям создавать приложения по управлению бизнесом, материальными ресурсами и финансами, а также осуществлять управление предприятием.
Аббревиатура ABAP сокращение от Allgemeiner Berichts Aufbereitungs Prozessor, в переводе с немецкого «общий процессор подготовки отчета», но позже в коммерческих целях расшифровка аббревиатуры была изменена на Advanced Business Application Programming (усовершенствованное программирование бизнес-приложений).
ABAP был одним из первых языков, включающих в себя понятие логической базы данных (LDBs - позволяет создавать подмножества физической базы данных), которая обеспечивает высокий уровень абстракции от базового уровня(-ей) базы данных.
Язык программирования ABAP использовался разработчиками для создания корпоративной системы SAP R/3. Кроме того, язык предназначен для использования клиентами SAP для расширения системы собственными приложениями - клиенты могут разрабатывать собственные отчеты и интерфейсы. Язык ABAP и сейчас остается языком для создания приложений для корпоративной клиент-серверной системы R/3 [1].
Все ABAP-приложения находятся в базе данных системы SAP. Они не хранятся в виде отдельных внешних файлов, в отличие от программ написанных на Java или C + +. В базе данных весь код ABAP существует в двух формах: исходный код, который можно просмотреть и отредактировать с помощью инструментария ABAP Workbench, и сгенерированный код в двоичном представлении. Программа на языке ABAP выполняется под контролем исполнительной системы (runtime system), которая является частью ядра SAP R/3. Исполняющая система отвечает за обработку операторов ABAP, контролируя уровень логики и обработку событий (например, нажатие кнопки пользователем). Ключевым компонентом системы является интерфейс базы данных, которая преобразует БД-независимые операторы ABAP («Open SQL») в операторы понимаемые СУБД («Native SQL»). Интерфейс базы данных обрабатывает все связи с реляционной базой данных от имени ABAP-приложе-ний, но и содержит дополнительные функции, такие как буферизация таблиц и часто используемых данных в локальной памяти сервера.
Обычный способ выполнения ABAP-кода в системе SAP осуществляется посредствам ввода кода транзакции (например, VA01 является кодом транзакции для «Создание заказов»). Транзакции, в корпоративной системе SAP термин, обозначающий выполнение программы. Транзакции могут быть вызваны определенной системой или конкрет-
ным пользователем, через разграничивающий права интерфейс. Они также могут быть запущены вводом кода транзакции непосредственно в поле команды или программно с помощью ABAP-операторов.
ABAP различает два типа исполняемых программ:
• Report
• Module pools
Report (отчет) в языке АВАР является программой, которая извлекает данные из базы, группирует их в соответствии с различными критериями и отображает на экране или устройстве печати в виде списка. Отчеты следуют относительно простой модели программирования, посредством которой пользователь вводит набор параметров, которые используются для создания отчета. Термин «отчет», может несколько вводить в заблуждение. Стоит заметить, что отчеты могут также быть направлены на изменение данных. Причина, по которой эти программы называются отчетами - в схожести выходной информации с отчетами-документами.
Module pools определяют более сложные схемы взаимодействия с пользователем, используя коллекцию из экранов (screen). Термин «экран» относится к фактическому физическому изображению, которое видит пользователь. Каждый экран имеет свой «уровень логики», который ссылается на ABAP-код, неявно вызываемый экранами. Уровень логики, разделяется на секции (Process Before Output) и (Process After Input).
Рассмотрим некоторые правила и особенности в языке ABAP:
- каждый оператор должен заканчиваться точкой
WRITE 'Hello World'.
- литералы (последовательности символов) заключаются в одинарные кавычки
USERPROMPT = 'Please double-click on a line in the output list'.
- между операндами должен быть хотя бы один пробел
X = (A + B) - (C + 2). — не верно
X = (A + B) - (C + 2). — верно
- перенос строки эквивалентен пробелу
- если литерал занимает больше чем одну строку то при переходе на новую строку, предыдущая строка должна заканчивается символом &
USERPROMPT = 'Please double-click on a line in the output list' & 'to see the complete details of the transaction.'.
- язык не чувствителен к регистру (за исключением регистра в литералах)
- последовательности одинаковых команд в языке АВАР могут быть упрошены, данная последовательность операторов:
WRITE FLIGHTINFO-CITYFROM.
WRITE FLIGHTINFO-CITYTO.
WRITE FLIGHTINFO-AIRPTO.
может быть упрошена следующим образом
WRITE: FLIGHTINFO-CITYFROM, FLIGHTINFO-CITYTO, FLIGHTINFO-
AIRPTO.
Ключевым элементом системы SAP R/3, который раскрывает все возможности и гибкость языка ABAP, является информационная система Repository (хранилище). Repository состоит из модели данных, программ, определения экранов и многих других элементов [2], главным из которых является словарь Dictionary - совокупность всех встроенных типов данных языка ABAP (рис. 1). Типы данных в Dictionary делятся на три группы:
1) элементарные типы данных: символьные и числовые переменные, переменные даты, времени, строки, байтовые последовательности;
2) сложные типы данных: структуры и внутренние таблицы, о которых стоит рассказать чуть больше. Среди типов данных внутренние таблицы являются чрезвычайно важной особенностью языка ABAP. Язык предоставляет набор простых операторов для доступа к параметрам и
| Типы ~|
-1 Типы ДЕННЫМ !
-1 Эл^рлвктарные типы данным |
Ci >икси ровен ной длинной
■С Текстовое пале
N Числовое текстовое пале
D дата
Т вр емч
У. Шестнадцэте р ичнае число
р Упакованный номер (Packed
number)
Целое число
F Числа с плавающей запятой
С изменяемой длинной
STRING Симвал&нач последовательность"
XSTRING Байтовая последовательность
Сложные типы данных
Structure type Структуры
Table type Вн утре н н и е табл и цы
Ссылочный тип данных
Data references Ссыл кз на данн ые
Object references Ссылка на объект
Class references Ссылка на класс
Interface references Ссылка на интерфейс
Типы объектов
Classes классы
Interfaces интерфейсы
Рис. 1. Типы данных в языке ABAP
управления содержимым внутренних таблиц. В отличие от таблиц базы данных, которые существуют независимо от того, обращается пользователь к ним или нет, внутренние таблицы существуют только во время выполнения программы, и по сути являются представлением таблицы БД;
3) ссылочные типы данных: ссылки на объекты, типы данных, классы и интерфейсы.
В добавление к типам данных, в Dictionary существуют типы объектов, которые содержат классы и интерфейсы, которые тоже могут использоваться как типы данных. Стоит отметить, что хоть язык и содержит тип «объект», но не является объектно-ориентированным. Так же в типах данных нет таких распространенных типов, как массивы булевский тип данных. Булевский тип данных может быть смоделирован в языке ABAP с помощью строковых или числовых переменных, в свою очередь массивы можно определить, используя внутренние таблицы.
В итоге мы получаем простой и в тоже время мощный специализированный язык программирования ABAP, который предоставляет высокий уровень абстракции, что дает возможность разработчику сконцентрироваться на концептуальных аспектах задачи, не заботясь о реализации технических деталей таких как выделение памяти, работа с указателями и т. д. Система Repository и ее главный элемент Dictionary предоставляют удобные средства для коллективной работы команды программистов. Dictionary - гарантирует непротиворечивость данных во всей системе, а Repository - хранит данные о всех разрабатываемых и выполняемых объектах. Логическая база данных, Open SQL и внутренние таблицы обеспечивают простое взаимодействие с различными СУБД. Все это обеспечивает высокую надежность, функциональность и производительность корпоративной системы SAP R/3 разработанной на языке ABAP.
Мы рассмотрели одну грань языковых средств КИС - их специализированного. Вместе с тем в современных КИС находят применение языки, которые можно отнести к категории универсальных. В качестве примера таких языков остановимся на языках, задействованных в технологии XSL - преобразований.
Внедрение и эксплуатация КИС, как правило, не означает отказ от необходимости интеграции всех разнородных информационных и вычислительных ресурсов. Даже внедрив SAP R/3, трудно обойтись без разнообразных специализированных приложений от разных разработчиков программных решений. Задача интеграции, в свою очередь, требует создания простого и надежного механизма обмена данными между самыми разнообразными приложениями, возможно работающими на разных аппаратно-программных платформах в распределенной среде, использующих собственные внутренние форматы и т. д. Решение проблемы заключается в создании универсальных
промежуточных форматов данных, с помощью которых можно обеспечить обмен данными между любыми приложениями. Средством создания таких форматов является язык XML.
Язык XML (extensible Markup Language) расширяемый язык разметки - универсальный формат для представления данных, представляющий собой свод общих синтаксических правил. XML - текстовый формат, предназначенный для хранения структурированных данных для обмена информацией между программами, а также для создания на его основе более специализированных языков разметки [2]. XML позволяет записать не только сами данные, но также и информацию об их структуре. К настоящему моменту технологии XML, в качестве универсальной платформы обмена данными, поддерживают практически все ведущие ИТ-поставщики.
Однако сам по себе XML не решает другую важную задачу -преобразование XML-документов, необходимое для передачи данных от одного приложения к другому и для отображения. Средством решения этих задач (все чаще выбираемых сегодня) являются языки XSL и XPath.
XSL является семейством рекомендаций, описывающих языки преобразования XML-документов. Таким языком преобразований (трансформации) является XSLT. XSLT (eXtensible Stylesheet Language
Рис. 2. Общая схема XSLT преобразований
Transformations) - язык преобразования XML-документов. Спецификация XSLT входит в состав XSL и является рекомендацией W3C [3].
Язык XSLT - язык для описания преобразований данных XML. Программа преобразования на языке XSLT принимает один или более документов XML в качестве входных данных и выдает один или более XML документов в качестве результата (рис. 2).
Согласно [5] через 6-7 лет после опубликования спецификации языка XSLT и начала разработок его реализаций - области применения языка распределились следующим образом. Примерно 80 процентов фактического использования XSLT приходилось на преобразование XML в HTML, 10 процентов на представления XML в других форматах отображения, таких как SVG, WML или PDF и еще
Рис. 3. Клиент-серверная система преобразования XML в HTML
10 процентов использования пришлись на приложения, преобразующие объекты XML в объекты XML.
Рис. 4. Клиент-серверная система XSLT преобразования на стороне сервера
Сервер
(О
База данных
XML
XML
г=нерецця хгтЬджунектае
XML
XSLT преобразование
XSLT-процессор
Клиент
HTML документ
Рис. 5. Клиент-серверная система XSLT преобразования на стороне клиента
В первом случае (преобразование XML в HTML) преобразование осуществляется обычно в клиент-серверных системах. Примером подобной системы может быть Web-сервер, предоставляющий клиентам информацию из базы данных (рис. 3).
Существует два способа использования XSLT в подобной архитектуре. Первый способ предусматривает преобразования на стороне сервера (рис. 4), второй - на стороне клиента (рис. 5).
Достоинством второго способа является снижение нагрузки на сервер и предоставление клиенту возможности самостоятельно решать вопросы выборки и формы отображения передаваемых ему XML-данных. Наряду с достоинствами второй способ несвободен от недостатка. Его применение ограничивается необходимостью поддержки клиентом XSLT преобразований.
Преобразование исходных XML данных в PDF-формат предусматривает по сравнению с ранее рассмотренной схемой (преобразований) дополнительно стадию перевода документа XSL-FO в формат PDF (или другой пригодный для печати) с помощью FO-процессора (рис. 6).
Рис. 6. Система XSLT XSL-FO преобразований
Документ XSL-FO получаемый с помощью XSLT преобразований представляет собой XML-документ и содержит объекты форматирования для вывода на печать, но без разбивки на страницы. Все содержимое размещается в нескольких видах элементов:
• Блоковые форматирующие объекты.
• Внутристрочные форматирующие объекты.
• Табличные форматирующие объекты.
• Внестрочные форматирующие объекты.
Блоковые форматирующие объекты определяют прямоугольные зоны, разделенные переносами строки и, возможно, дополнительными символами форматирования. Блоки могут содержать в себе другие блоки ^о:Ыоск, ^:Ыоск-соп1атег, ^:1аЫе, ^:^-Ыоск и др.).
Внутристрочные форматирующие объекты также представляются как прямоугольные зоны, которые могут содержать текст или другие внутристрочные элементы. Когда строка заполняется, под ней начинается новая строка (fo:bidi-override, ^:сЬ|агайег, ^мпНпе, ^мпНпе-соП:атег и др.).
Таблица является блоковым объектом, в то время как части таблицы не являются ни внутристрочными, ни блоковыми элементами. Тем не менее, полная таблица может быть превращена во внутристроч-ный объект с помощью размещения ее в элементе fo:inline-container. (fo:table, fo:table-header, fo:table-body, fo:table-row, fo:table-cell и др.).
Внестрочные форматирующие объекты «наплывают» на место имеющихся на странице внутристрочных и блоковых объектов. (fo:float, fo:footnote, fo:footnote-body).
Третье направление XSLT преобразований (XML в XML) относится к преобразованиям сообщений, посылаемых друг другу программными приложениями в интегрированной инфраструктуре организации, либо между организациями (рис. 7).
Рис. 7. Схема XSLT преобразований XML в XML
Основными характеристиками языка XSLT являются [5]:
1. Синтаксис на основе XML (программа преобразования XSLT - таблицей стилей сама является XML-документом).
2. Декларативная, функциональная модель программирования (основной парадигмой программирования XSLT является функциональное программирование).
3. Язык XSLT основан на правилах (таблица стилей XSLT представляет собой собрание правил, описываемых шаблоном с вложенными инструкциями).
4. Преобразование дерева в дерево: (входные данные и результат преобразования моделируются в виде деревьев, а не в виде последовательной формы XML).
5. Двухъязыковая модель: (XSLT использует XPath в качестве подъязыка для выбора данных из исходного дерева).
Первое свойство создает удобство в случае, когда большие части таблицы стилей содержат элементы XML, которые должны быть включены непосредственно в результат преобразования.
Результатом второй особенности языка является то, что в самом языке не задается порядок выполнения действий. Отсутствуют операторы присвоения и обновляемые переменные. Эта особенность требует от программиста значительной реорганизации мышления. По этой причине XSLT получил репутацию трудного для изучения и написания эффективного кода языка.
Следствием третьей особенности языка XSLT является его удобство в организации рекурсивного обхода вершин поддеревьев встречающихся в XML-документах, имеющих свободные правила для вложений тегов.
Четвертое свойство означает, что создание исходного дерева (например, из XML-документа с использованием анализатора XML) и приведение дерева результата в последовательную форму (для сохранения в файле или передачи другой программе) являются действиями, отличными от непосредственно XSLT преобразования.
Пятое свойство языка XSLT означает, что XSLT использует в качестве подъязыка XPath.
Проводя разделение между этими двумя языками можно сказать, что инструкции XSLT используются для создания узлов в дереве результата и управления последовательностью обработки входного дерева, а выражения XPath используются для выбора данных из исходного дерева. Выражения XPath всегда вызываются из инструкций XSLT.
Основополагающей конструкцией языка XPath является выражение пути, описывающее последовательность шагов необходимых для обращения к узлам дерева XML документа. Для выражения пути в XPath используются оси без фильтрации узлов или с таковой. Ось служит для выделения в дереве документа различных подмножеств узлов относительно некоторого узла, называемого контекстным. Контекстный узел устанавливается инструкциями XSLT (<xsl:template match=»x»>...</ xsl:template>; xsl:for-each; xsl:apply-templates). Фильтрация осуществляется с помощью предикатов и используется, когда требуется отобразить узлы в зависимости от хранящихся в них данных, возможно, в сочетании с ограничениями на имена и позицию [6].
Итак, на примере двух групп языков - узко специализированного, применяющегося только для программирования в конкретной КИС, и языков широкого применения мы попытались дать обзор и характеристику языковых инструментов для создания программных продуктов в разнородных корпоративных информационных системах.
Библиографический список
1. http://en.wikipedia.org/wiki/ABAP
2. Кречмер Р. Разработка приложений SAP R/3 на языке АВАР/4/Р. Кречмер, В. Вейс. - «Лори», 1998.
3. http://ru.wikipedia.org/wiki/XML
4. http://ru.wikipedia.Org/wiki/XSL#XSLT
5. W3C XML: XQuery от экспертов. Руководство по языку запросов. КУДИЦ-Образ, 2005.
6. Мангано Сэл XSLT: Сборник рецептов. - М. : ДМК Пресс, СПБ. : БХВ-Петербург, 2008. - 864 с. : ил.