BEx Analyzer: синхронизация изменений в модулях VBA-проекта
В статье рассмотрена реализация механизма импорта модулей в VBA-проект из репозитория MIME с нулевыми затратами на синхронизацию модулей между рабочими книгами.
Вводная часть
В ходе проекта по созданию системы отчетности на основе системы SAP BI, наибольшую часть работ составляет процесс создания отчетных форм. Отчетные (или плановые) формы – это основной инструмент пользователей.
К форме отчета предъявляются строгие требования. Отчёт должен:
- быть удобен в работе,
- соответствовать корпоративному дизайну,
- иметь ряд дополнительных качеств, помогающих пользователю в работе.
Требования к дополнительным качествам формулируются в соответствии с бизнес правилами, а также в соответствии со спецификой работы конкретных пользователей.
В руках консультанта, работающего с SAP BI, есть два инструмента для разработки сложных отчетов:
- Web Application Designer (BSP-приложения)
- BEx Analyzer (рабочие книги Excel).
Какой из инструментов будет выбран, как правило, решается на ранних стадиях работ по созданию системы отчетности.
В этой статье я рассмотрю вопросы, возникающие перед консультантом при выборе им BEx Analyzer.
Проблема
При реализации требований бизнеса и конкретных пользователей может оказаться, что стандартных возможности BEx Analyzer (инструментария, выбранного для разработки отчетов) не достаточно. В таких случаях приходиться использовать встроенное средство Excel по автоматизации – язык VBA. Помимо широких возможностей по манипулированию и форматированию данных из запросов рабочей книги, благодаря поставляемой с SAP GUI надстройке “BExAnalyzer.xla”, язык позволяет автоматизировать часть работы пользователя и реализовывать дополнительные требования бизнеса.
Важная особенность, которую следует учитывать при разработке на языке VBA: исходный код модулей VBA-проекта храниться непосредственно в рабочей книге Excel. Это означает, что при необходимости повторить аналогичный функционал код модуля необходимо скопировать в новую отчетную форму. Это не представляет проблемы на этапе внедрения при небольшом числе отчетных форм. Но в случае большого числа разрабатываемых форм (более 50), или после перехода к продуктивной эксплуатации, когда потребуется сопровождение и дальнейшее развитие Решения (по моему мнению, проекты по аналитике останавливаются только тогда, когда остановился бизнес), возникает серьезная проблема в синхронизации изменений модуля VBA-проекта на все отчетные формы.
Решение проблемы
Решением проблемы может быть размещение модулей в репозиторий MIME. При этом обеспечивается хранение предыдущих версий, что позволить при необходимости «откатить» изменения. Предлагаю рассмотреть реализацию конкретного механизма импорта модулей в VBA-проект из репозитория MIME. Достоинством предлагаемого механизма являются нулевые затраты на синхронизацию модулей между рабочими книгами.
Этапа решения проблемы:
- Создание дистанционного функционального модуля для получения файла из репозитория.
- Разработка модуля и вспомогательных классов для вызова ФМ.
- Импорт полученного из репозитория файла в VBA-проект.
Техническая реализация
Основной функционал ФМ (см. листинг ФМ ZBI_GET_MIME_OBJ_BY_URL) реализуется при вызове метода GET класса CL_MIME_REPOSITORY_API. Дальнейшая обработка полученных данных требуется для передачи данных по протоколу RFC. При разработке дистанционного функционального модуля нужно учитывать, что передача данных по RFC накладывает ряд ограничений на тип передаваемых данных:
- не допускаются применять родовые типы переменной длины (STRING, XSTRING, SEQUENCE, XSEQUENCE)
- не допускается передача значений по ссылке
- требуется установка вида выполнения в значение «Дистанционный модуль» (рис. 1)
- возврат таблицы значений возможен только через Tables (Exporting с типом таблицы не поддерживается)
Рис. 1. Виды выполнения функциональных модулей
После каждого обновления набора данных, управляющая процессом надстройка “BExAnalyzer.xla” имеет возможность вызвать пользовательскую процедуру для обработки полученного набора данных (своеобразный user exit). Для этого необходимо включить соответствующую опцию в настройках рабочей книги и указать имя вызываемой процедуры (рис. 2). При определении процедуры следует указывать обязательный аргумент «varname».
Рис. 2. Включение выполнения макросов в настройках книги
Импорт файла модуля из репозитория в VBA-проект выполняется всего одной строчкой кода: вызов процедуры putModuleFromRepositoryToProject, после выполнения которой возможно обращаться к функциям и процедурам добавленного модуля. Элементы переменной Module заполняются значениями URL выгружаемого из репозитория MIME файла, именем модуля в VBA-проекте, и именем файла для временного хранения в локальном каталоге.
В функции putModuleFromRepositoryToProject создается подключение к системе SAP, созданное соединение, а также URL требуемого файла передаются в функцию getObjectFromRepository, где происходит получение содержимого файла из репозитория MIME, запись содержимого во временный
Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland
ЗарегистрироватьсяУ вас уже есть учетная запись?
Войти