Вызов функций в другой системе SAP с сериализованными параметрами с помощью общей RFC-функции
Интеграция данных и процессов в разных системах SAP всегда была непростой задачей и требовала большого объема разработки. Используя общее представление функций/методов и параметров в общей RFC-функции, можно значительно сократить объем разработки при интеграции систем.
Ключевое понятие
Функциональный модуль с RFC — программа SAP, которую можно вызвать из другой системы посредством RFC. Обобщенное программирование — парадигма программирования, заключающаяся в таком описании данных и алгоритмов, которое можно применять к различным типам данных, не меняя само это описание. Это реализуется через создание параметризованных шаблонов, которые можно затем конкретизировать для реальных классов и алгоритмов. Идея лежит в том, чтобы тело программных модулей было как можно более общим (базовым) и соответственно более легко используемым повторно. Сериализация — процесс преобразования объекта в поток байтов для его хранения или передачи в память, базу данных или файл. Основной целью при этом является сохранение состояния объекта с возможностью его повторного создания при необходимости. Обратный процесс называется десериализацией.
Для вызова функции в другой системе SAP можно вызвать функциональный модуль с RFC для целевой системы. Например, находясь в системе SAP ERP Central Component (ECC), вы можете вызвать функцию в системе SAP BW и наоборот. Если функция в целевой системе не является функциональным модулем с RFC (такая функция может быть функциональным модулем, методом или программой), вы можете создать для этой функции соответствующую оболочку и вызывать полученный функциональный модуль с RFC из исходной системы.
Однако при этом необходимо учитывать два момента.
- Общий формат функционального модуля с RFC. Если в целевой системе вам требуется вызвать более 20 различных функций, вам придется вызывать более 20 стандартных или пользовательских функциональных модулей с RFC. Организовать эффективное управление этим процессом будет не просто. Вопрос в том, можете ли вы разработать общий функциональный модуль с RFC для всех этих 20 с лишним различных функций?
- Параметры. Для каждого из этих 20 с лишним функциональных модулей могут быть установлены разные параметры импорта/экспорта/изменения/возврата. Для разработки общего функционального модуля необходимо создать общее выражение параметров с общими типами данных, понятных для исходной и целевой систем и соответствующих всем функциональным требованиям, предъявляемым к параметрам.
Я предлагаю вам решение с одним общим функциональным модулем RFC с сериализованными параметрами для вызова различных функций другой системы. Упрощенная архитектура данного RFC-вызова представлена на рис. 1.
Рис. 1. Упрощенный процесс вызова RFC
Для вызова функционального модуля RFC используется RFC-соединение из вызывающей системы (например, из системы SAP BW). Для получения финансового периода из календарного месяца можно использовать, например, функцию FISCPER_FROM_CALMONTH_CALC. Вызываемая система (например, система ECC) получает запрос и выполняет функциональный модуль RFC FISCPER_FROM_CALMONTH_CALC с импортом календарного месяца, варианта финансового года и экспортом финансового периода в вызывающую систему.
Чтобы сделать вызов более общим и подходящим для разных функций, вы можете оптимизировать архитектуру, как показано на рис. 2.
Рис. 2. Оптимизированный вызов RFC с оператором варианта
С помощью оператора варианта можно определить функциональный модуль с RFC для вызова в вызывающей системе.
Вызывающая программа показана на рис. 3.
Рис. 3. Программа для вызова функционального модуля RFC
Функциональный модуль вызывается с адресом (RFC-адресом) вызываемой системы ECDCLNT100, индикатор «C» (это означает, что вызывается клиент). Вызывается функциональный модуль FISCPER_FROM_CALMONTH_CALC, входной параметр — календарный месяц 201706, вариант финансового года — Z1. Ожидается, что будет возвращен финансовый период.
Прим. корректора:
Автор похоже что-то путает. Модуль FISCPER_FROM_CALMONTH_CALC есть только в BI системах. Его нет в системе SAP ECC (по крайней мере, в десятке доступных мне систем, вплоть до ядра 7.40, я такого модуля не нашел). Опять же, исходя из документации SAP, данный модуль находится в разделе:
SAP NetWeaver Business Warehouse -> Useful ABAP Programs and Function Modules in SAP BI
То есть модуль существует в системе BI и вызвать его по RFC из системы BI в системе SAP ECC не представляется возможным (как говорил матрос Лом в мультфильме «Приключения капитана Врунгеля») за отсутствием такового в системе клиента.
Олег Точенюк
Если финансовый год компании начинается в октябре, то финансовый год 2017 начинается с календарного месяца 201610. Таким образом, календарный месяц 201706 должен возвратить финансовый период 2018009.
Данный функциональный модуль должен быть внедрен в обеих системах (вызывающей и вызываемой), поскольку решение должно работать в обоих направлениях. Вызов можно выполнить из любой системы без внесения изменений в код.
Оформите подписку sappro и получите полный доступ к материалам SAPPRO
Оформить подпискуУ вас уже есть подписка?
Войти