[Python, ERP-системы, Big Data] Выгрузка данных из SAP через RFC на Python

Автор Сообщение
news_bot ®

Стаж: 6 лет 4 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
16-Фев-2021 13:32

Поговорим о выгрузке данных из SAP ERP или S/4 HANA с использованием механизма SAP RFC. Такая выгрузка может служить для наполнения аналитического хранилища данных или для интеграции с другой системой.Интерфейс SAP RFC (remote function call) позволяет вызывать различные функции SAP из стороннего приложения.Преимущества этого интерфейса:
  • прямое и быстрое подключение с SAP.
  • возможность менять параметры запроса, запрашивая данные частями.
  • отсутствие промежуточных звеньев в обмене данными и, как следствие, высокая надежность.
УстановкаДля работы через RFC вам потребуется установить следующее:
  • Библиотека PyRFC https://github.com/SAP/PyRFC  pip install pynwrfc
  • Библиотека SAP NW RFC для вашей платформы, скачанный с https://support.sap.com (нужен акаунт SAP).
  • Установить переменную окружения, указав каталог с библиотекой SAP NW RFC:  SAPNWRFC_HOME=C:\NWRFC\nwrfcsdk\
Поиск уже имеющихся в системе функцийВ системе SAP можно поискать уже готовые функциональные модули.Сделать это можно следующим образом:
  • Запустить транзакцию SE16 (просмотр таблиц). 
  • Указать имя таблицы TFDIR. 
  • Задать фильтры для поиска:
  • FUNCNAME=*MATERIAL* (задать маску поиска)
  • FMODE=R (возможность вызова функции через механизм RFC)
Чтение таблиц через RFC_READ_TABLERFC_READ_TABLE позволяет выгружать данные из таблицы SAP, ограничивая выборку фильтрами.Несмотря на то, что SAP позиционирует эту функцию как тестовую и не предназначенную для использования в продуктивной среде, она вполне работоспособна.Следует сказать, что RFC_READ_TABLE часто неудобна, т.к. она позволяет читать только одну таблицу (не поддерживает JOIN).В этой статье я не буду подробно описывать работу с этой функцией, т.к. в интернете существует множество примеров ее использования. Вместо этого приведу пример вызова функции стандартной функции BAPI_MATERIAL_GETLIST, выдающий список материалов по заданным критериям поиска. Просмотр функции через SE37Входные и выходные параметры функции можно просмотреть с использованием транзакции SE37.Параметры вызова функции присутствуют на следующих вкладках:
  • Importing - входные параметры простого типа (не табличные)
  • Exporting - выходные параметры простого типа
  • Tables - как входные, так и выходные параметры в виде таблиц
Рассмотрим использование SE37 на примере BAPI_MATERIAL_GETLIST.Для того, чтобы посмотреть состав полей таблиц нужно дважды кликнуть на поле с типом данных.
SE37 - вкладка Tables
Просмотр полей таблицыЭта функция выдает не слишком много полезных данных: Номер материала и описание.Другие таблицы нужны для передачи  на вход параметров выборки.Например поиск по коду материала (MATNRSELECTION):
Таблица входных значенийПодключаемся к SAPПодключение к SAP с использованием библиотеки pyrfc делается не сложно. (Настройки подключения можно посмотреть в SAP GUI.)Код на Python:import pandas as pdimport osimport pyrfcconn = pyrfc.Connection(user='', passwd='',     mshost='111.111.11.11', msserv='3600', sysid='010',     group='NN', saprouter='', lang='EN',client='')   Вызываем необходимую функциюРассмотрим вызов функции на примере BAPI_MATERIAL_GETLIST.Сначала зададим входные параметры.В данном случае для каждого параметра в таблице будет по одной строке. Строка таблицы задается как python dictionary, а вся таблица задается как list, состоящий из строк.В нашем примере укажем фильтр на код материала: '' (т.е. все значения), а также укажем значение для Plant.Для выборки используем SIGN="I" (Includes), Варианты для OPTION:
  • EQ Equal
  • BT Between (требует задать значение для для LOW и HIGH)
  • LE Less Equal
  • GE Greater Equal
  • CP Contains Pattern
matnrselection = [{'SIGN':'I', 'OPTION':'CP', 'MATNR_LOW':''}]plantselection = [{'SIGN':'I', 'OPTION':'EQ', 'PLANT_LOW':'NNNN'}]Далее вызываем функцию с этими параметрами.result = conn.call('BAPI_MATERIAL_GETLIST',     MATNRSELECTION = matnrselection, PLANTSELECTION = plantselection)Преобразуем результат в DataFrameDataFrame можно получить в одну строку:df = pd.DataFrame(result['MATNRLIST'])Где MATNRLIST, это имя результирующей таблицы, указанное в разделе Tables.Итак, с помощью буквально нескольких строк кода, мы получили данные из SAP в DataFrame и можем дальше работать с этими данным используя все возможности языка Python.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_python, #_erpsistemy (ERP-системы), #_big_data, #_sap, #_rfc, #_integratsija_prilozhenij (интеграция приложений), #_dwh, #_python, #_erpsistemy (
ERP-системы
)
, #_big_data
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 03-Июл 06:31
Часовой пояс: UTC + 5