Как извлечь данные из системы SAP ABAP?

Мне нужно извлечь данные из системы SAP ABAP в формате, который затем можно загрузить в базу данных Oracle (xlsx, csv, dmp и т. д.).

Как только данные будут извлечены, я буду использовать Pentaho, чтобы загрузить их в базу данных Oracle.

Есть ли способ извлечь данные из SAP? Мне также нужно будет автоматизировать это (извлечение), но сейчас это не слишком большая проблема, я могу подумать об этом позже.

Если это невозможно сделать, объяснение почему было бы полезно!


person Joshua1729    schedule 02.02.2012    source источник


Ответы (3)


У вас есть несколько вариантов сделать это.

Если вы используете SAP BW, существует множество стандартных инструментов, которые помогут вам выполнять извлечение и автоматизировать процессы.

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

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

Вы также можете обернуть свою RFC-функцию веб-службой и вызвать ее через SOAP/HTTP.

Наконец, если у вас есть доступ к базе данных, вы даже можете написать сценарий для извлечения необходимых данных.

Простой пример программы для извлечения чего-либо из таблицы БД:

report ZEXTRACT_EXAMPLE.

data: lt_t001 type table of t001.
data: ls_t001 type t001.
data: lv_filename type string value '/tmp/outfile.txt'.

select * from t001 into table lt_t001.

open dataset lv_filename for output in text mode encoding default.

loop at lt_t001 into ls_t001.
  transfer ls_t001-bukrs to lv_filename.
endloop.

close dataset lv_filename.

Это действительно примитивно, но вы поняли идею. Он выбирает данные из таблицы БД во внутреннюю таблицу (в памяти) и записывает их в файл с именем /tmp/outfile.txt на сервере, откуда вы можете их забрать. (Вам нужно будет изменить вывод в требуемом формате).

Затем вы можете запланировать свою программу с помощью SM36 для периодического запуска в качестве фонового задания.

person mydoghasworms    schedule 02.02.2012
comment
@mydoghasworms: Ну, эта программа вряд ли будет работать, если в таблице, например, 10 миллионов записей. Лучше использовать оператор OPEN CURSOR для выбора данных, а не последовательно записывать их в файл. - person Jagger; 02.02.2012
comment
@mydoghasworms: Еще одна вещь ... если таблица содержит некоторые поля, которые не являются символьными полями, вы получите различную длину, например, для целых или десятичных чисел в текстовом файле. - person Jagger; 02.02.2012
comment
@Jagger, ты абсолютно прав. Вы не хотели бы читать миллионы записей в памяти. Вы также не хотели бы просто экспортировать несимвольные поля без применения к ним согласованного форматирования. Что касается длины, если в вашем файле используется разделитель, а не фиксированная ширина, это не будет иметь большого значения. Спасибо за наблюдение. - person mydoghasworms; 02.02.2012

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

person tomdemuyt    schedule 02.02.2012
comment
Однако у RFC_READ_TABLE есть несколько недостатков: - он работает, только если в таблице есть все поля CHAR (один INT или FLOAT, и вы разорены), - максимальная ширина таблицы составляет 512, - он работает только в не-Юникоде (если бэкэнд является Unicode, внутреннее выравнивание полей будет повреждено...) - и, наконец, это большой недостаток безопасности, возможно, обход авторизации бизнес-уровня, с помощью которой рассматриваемая таблица может быть защищена... Другими словами: никогда не используйте Это! - person Lanzelot; 05.03.2018
comment
Согласованный. За исключением того, что я без проблем использовал RFC_READ_TABLE в системах Unicode? - person tomdemuyt; 05.03.2018

Одним из вариантов решения этой проблемы является поиск драйвера JDBC для данных SAP ERP, который собирает таблицы, просматривая уровень логической таблицы SAP.

Если у вас есть правильный драйвер JDBC, вы можете использовать его от Pentaho.

Я пробовал такое решение JDBC поверх SAP ERP с Talend, и оно отлично работает.

RFC_READ_TABLE, как указывалось в предыдущих комментариях, довольно ограничен с точки зрения количества полей таблицы, а также количества записей, не говоря уже о проблемах преобразования.

person David Beck    schedule 23.07.2015
comment
RFC_READ_TABLE действительно плохой. Но это решение выглядит еще хуже: действительно ли вы передадите пароль своей базы данных SAP какому-то JDBC-скрипту, который где-то работает и может быть легко скомпрометирован? Это может означать передачу драгоценностей вашей компании какому-нибудь старому хакеру (или ненадежному сотруднику), которому удастся найти этот скрипт... - person Lanzelot; 05.03.2018