Комментарии по теме

«Ко­рре­кти­ро­вка таблиц базы данных с помощью ABAP»
Олег Точенюк:
Андрей а вам никто никогда не говорил, что обновлять таблицы базы данных SAP категорически запрещено, независимо от того чем обусловлены такие желания. Свои Z-таблицы, да сколько угодно, но......
«Тра­нза­кция SM02: сообщения в SAP системе»
Олег Башкатов:
С помощью ФМ TH_POPUP можно отправить сообщение конкретному пользователю :-)
«Тра­нспо­ртная система SAP для чайников»
Вячеслав Шиболов:
Хорошая метафора с коробками. Наглядная.

База знаний

Вызов функций в другой системе SAP с сериализованными параметрами с помощью общей RFC-функции

2040

Ключевое понятие

Функциональный модуль с 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.

Данный функциональный модуль должен быть внедрен в обеих системах (вызывающей и вызываемой), поскольку решение должно работать в обоих направлениях. Вызов можно выполнить из любой системы без внесения изменений в код.

Вы хотели бы увидеть полную версию статьи?

Если вы являетесь подписчиком журнала SAP Professional Journal, пожалуйста, авторизируйтесь на сайте.

Если вы хотите подписаться на журнала SAP Professional Journal, пожалуйста, обратитесь в редакцию или сделайте заказ на сайте.

Правила получения тестового доступа к статьям SAP Professional Journal


Любое воспроизведение запрещено.
Копирайт © «Издательство ООО «Эксперт РП» Copyright © 2010 Wellesley Information Services. All rights reserved.