2010-11-12 18 views
8

Wymaganie w moim programie java/groovy jest jak poniżej: Użytkownicy mogą wprowadzać nazwy tabel i pola tabeli jako parametry wejściowe kwerendy i spodziewać się uzyskać wynik kwerendy od SOK ROŚLINNY. Na podstawie danych wprowadzonych przez użytkownika otrzymuję nazwę tabeli [CDPOS] i [CDHDR]. Po przeczytaniu dokumentacji SAP i szukania w Google znalazłem tablice przechowujące dzienniki zmian dokumentów. Ale nie znalazłem żadnych funkcji zdalnego wywołania, które mogą być użyte w języku Java do wykonywania tego rodzaju zapytań. Następnie użyłem wycofanego dokumentu RFC "RFC_READ_TABLE" i próbowałem utworzyć dostosowane zapytania tylko w zależności od tego dokumentu RFC. Jednak znalazłem, jeśli liczba żądanych pól przekazanych do tego RFC jest większa niż 2, zawsze otrzymałem błąd DATA_BUFFER_EXCEED, nawet jeśli ograniczam maksymalną liczbę wierszy.Dlaczego otrzymałem DATA_BUFFER_EXCEED podczas wywoływania RFC_READ_TABLE na CDPOS w java

Nie jestem uprawniony do bycia deweloperem ABAP w systemie SAP i nie mogę dodać żadnego FM do istniejących systemów, więc mogę napisać kod, aby spełnić to wymaganie w JAVA.

Czy robię coś nie tak? Czy możesz dać mi wskazówki na ten temat?

Wielkie dzięki z góry!

Odpowiedz

8

DATA_BUFFER_EXCEEDED dzieje się tylko wtedy, gdy całkowita szerokość pól chcesz przeczytać przekracza szerokość parametru danych, które mogą się różnić w zależności od wersji systemu SAP - 512 znaków dla obecnych systemów. Nie ma to nic wspólnego z liczbą wierszy, ale z rozmiarem pojedynczego zestawu danych. Pytanie brzmi: Jaka jest zawartość parametru FIELDS? Jeśli jest pusty, oznacza to "przeczytaj wszystkie pola". CDHDR ma 192 znaki szerokości, więc zakładam, że problemem jest CDPOS o szerokości 774 znaków. Głównym problemem będą pola VALUE_OLD i VALUE_NEW, obie 245 znaków. Nawet jeśli nie uzyskasz dostępu do programistów, powinieneś prod kogoś, aby uzyskać dostęp do słownika tylko do odczytu, aby móc szczegółowo przeanalizować struktury.

Bezwstydna wtyczka: RCER zawiera klasę opakowania dla RFC_READ_TABLE, która zajmuje się obsługą pól i zapewnia, że ​​całkowita szerokość wybranych pól jest poniżej limitu narzuconego przez moduł funkcyjny.

Należy również pamiętać, że te tabele mogą być OGROMNE w środowiskach produkcyjnych - pomyśl o miliardach zgłoszeń. Możesz łatwo doprowadzić do zatrzymania bazy danych poprzez wykonywanie nadmiernych operacji odczytu na tych tabelach.

+0

Wielkie dzięki! Twoje wyjaśnienie jest bardzo jasne. Wkopię się w RCER i sprawdzę klasę opakowania. Zastanawiam się, czy istnieją zdalne moduły funkcyjne lub BAPIS, abyśmy mogli odczytać informacje o zmienionym dokumencie, tak jak robi to transakcja "rsscd100". –

+0

Nie znam żadnego, przepraszam. Dostęp do dokumentów zmian jest dość nietypowy - do czego jest to potrzebne? – vwegert

+0

Witam vwegert, sprawdziłem projekt RCER. Czy masz wersję oddziału niezależną od aplikacji Eclipse RCP? –

0

Istnieje sposób obejścia błędu DATA_BUFFER_EXCEED. Mimo że funkcja ta nie jest udostępniona do użytku klienta zgodnie z notatką 382318 SAP OSS, można obejść ten problem, zmieniając sposób przekazywania parametrów do tej funkcji. To nie jest jedno pole, które powoduje twój błąd, ale jeśli wiersz danych przekroczy 512 bajtów, ten błąd zostanie podniesiony. CDPOS na pewno będzie miał ten problem!

Praca, jeśli wiesz, jak wywołać funkcję za pomocą Jco i przekazać parametry tabeli, to określić dokładne pola, które chcesz zwrócić. Następnie możesz zachować zwrócone wyniki w ramach limitu 512 bajtów.

Korzystanie przykład CDPOS tabeli określ coś takiego i powinno być dobrze iść ... (uwaga, może dostać tablica CDPOS masywny! Należy określić i przekazać WHERE!)

POLA = 'OBJECTCLAS' .... pola = 'OBJECTID'

W Java może być wyrażona jako ..

listParams.setValue (to.getpObjectclas(), "OBJECTCLAS");

Ograniczając zwracane pola, można uniknąć tego błędu.

+0

... to jest dokładnie to, co odpowiedziałem w listopadzie zeszłego roku, tylko sformułowane inaczej? – vwegert

+2

Próbowałem wyjaśnić twoje wyjaśnienie na przykładzie przy użyciu parametru "FIELDS" i przykładu Java .... Zamiast odniesienia do "klasy opakowania". Nie wspomniano o notatce OSS 382318, która stwierdza, że ​​ten moduł funkcjonalny nie jest udostępniany klientom. Jest to nieobsługiwany moduł funkcyjny SAP i chciałem uświadomić to społeczności. – SteveB

Powiązane problemy