2012-02-02 27 views
5

Potrzebuję wyodrębnić dane z systemu SAP ABAP w formacie, który można następnie załadować do bazy danych Oracle (xlsx, csv, dmp itd.)Jak wyodrębnić dane z systemu SAP ABAP?

Po wyodrębnieniu danych użyję Pentaho do przesłania do bazy danych Oracle.

Czy istnieje sposób na wyodrębnienie danych z SAP? Będę również musiał zautomatyzować to (ekstrakcja), ale nie jest to teraz zbyt dużym problemem, mogę później dowiedzieć się/martwić o tę część.

Jeśli nie jest to możliwe, wyjaśnienie, dlaczego byłoby pomocne!

Odpowiedz

6

Masz wiele opcji, aby to zrobić.

Jeśli korzystasz z SAP BW, istnieje wiele standardowych narzędzi, które pomagają wykonywać ekstrakcje i automatyzować procesy.

W przeciwnym razie można napisać prosty program ABAP (typ 1), aby odczytać dane z tabel i umieścić je w płaskim pliku.

W przeciwnym razie można napisać moduł funkcji zdalnego dostępu (RFC) i wywołać go za pomocą biblioteki RFC SAP.

Można również zawinąć funkcję RFC w usługę internetową i wywołać ją za pośrednictwem protokołu SOAP/HTTP.

Wreszcie, jeśli masz dostęp do bazy danych, możesz nawet napisać skrypt, aby wyodrębnić potrzebne dane.

Prostym przykładem programu, aby wyodrębnić coś z tabeli DB:

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. 

Jest to bardzo prymitywne, ale masz pomysł. Wybiera dane z tabeli DB do wewnętrznej tabeli (w pamięci) i zapisuje ją do pliku o nazwie /tmp/outfile.txt na serwerze, skąd można go pobrać. (Będziesz musiał zmienić wynik, aby był w wymaganym formacie).

Następnie można zaplanować program z SM36, aby działał okresowo jako zadanie w tle.

+0

Dzięki. Spróbuję tego. – Joshua1729

+2

@mydoghasworms: Cóż, ten program nie będzie działał, jeśli tabela ma na przykład 10 milionów rekordów. Należy raczej używać instrukcji 'OPEN CURSOR' do wybierania danych, a następnie zapisywać je kolejno do pliku. – Jagger

+1

@mydoghasworms: Jeszcze jedno ... jeśli tabela zawiera pola, które nie są znakami, otrzymasz inną długość, na przykład w postaci liczb całkowitych lub dziesiętnych w pliku tekstowym. – Jagger

2

Można również użyć zdalnie włączonego modułu funkcyjnego "RFC_READ_TABLE", można nadać mu dowolną nazwę tabeli i separator, a to spowoduje, że wewnętrzna tabela będzie ładnie sformatowana.

+0

RFC_READ_TABLE ma kilka niedociągnięć, chociaż: - działa tylko wtedy, gdy tabela zawiera wszystkie pola CHAR (jedna INT lub FLOAT i jesteś odpadł), - maksymalna szerokość tablicy to 512, - działa tylko w Non-Unicode (jeśli backend to Unicode, wewnętrzne wyrównanie pól zostanie uszkodzone ...) - i na koniec jest to wielka luka w zabezpieczeniach, prawdopodobnie pomijając autoryzacje na poziomie biznesowym, które mogą być chronione przez tabelę ... Innymi słowy: nigdy Użyj tego! – Lanzelot

+0

Uzgodnione. Z wyjątkiem tego, że użyłem RFC_READ_TABLE w systemach Unicode bez problemu? – tomdemuyt

-1

Jedną z opcji rozwiązania tego problemu jest znalezienie sterownika JDBC do danych SAP ERP, które gromadzą tabele, patrząc na poziom tabeli logicznej SAP.

Po wybraniu odpowiedniego sterownika JDBC można użyć tego z Pentaho.

Próbowałem tego rodzaju JDBC przez rozwiązanie SAP ERP z Talend i działa świetnie.

RFC_READ_TABLE, jak wskazano w poprzednich komentarzach, jest dość ograniczone pod względem liczby pól tabeli, a także liczby rekordów, nie wspominając o problemach z konwersją.

+0

RFC_READ_TABLE rzeczywiście jest złe. Ale to rozwiązanie wygląda jeszcze gorzej: czy naprawdę rozdasz hasło do bazy danych SAP do jakiegoś skryptu JDBC, który działa gdzieś i może łatwo zostać naruszony? Może to oznaczać przekazanie klejnotów koronnych twojej firmy każdemu starszemu hackerowi (lub niegodnemu godnemu pracownikowi), który udaje się znaleźć ten skrypt ... – Lanzelot

Powiązane problemy