11

私のjava/groovyプログラムは、ユーザー入力からテーブル名とテーブルフィールドを受け取り、SAPのテーブルをクエリして、その内容を返します。

ユーザー入力は、テーブルCDPOSとに関係する場合がありCDHDRます。SAPのドキュメントを読んでグーグルした後、これらは変更ドキュメントのログを格納するテーブルであることがわかりました。しかし、この種のクエリを実行するためにJavaで使用できるリモート呼び出し関数は見つかりませんでした。

次に、非推奨のRFC汎用モジュールを使用し、RFC_READ_TABLEこのRFCのみに基づいてカスタマイズされたクエリを作成しようとしました。ただし、このRFCに渡した目的のフィールドの数が2を超えるDATA_BUFFER_EXCEEDED場合、最大行数を制限しても常にエラーが発生することがわかりました。

私はSAPシステムでABAP開発者になる権限がなく、既存のシステムにFMを追加できないため、JAVAでこの要件を達成するためのコードを記述することしかできません。

私は何か間違ったことをしていますか?その問題についてのヒントを教えてください。

4

3 に答える 3

17

DATA_BUFFER_EXCEEDED読み取りたいフィールドの合計幅がパラメータのを超えた場合にのみ発生しDATAます。これは、SAPリリースによって異なる場合があります(現在のシステムでは512文字)。数とは関係ありませんが、単一のデータセットのサイズとは関係ありません。

したがって、問題は次のとおりFIELDSです。パラメータの内容は何ですか?空の場合、これは「すべてのフィールドを読み取る」ことを意味します。は幅192文字なので、問題は幅774文字CDHDRだと思います。CDPOS主な問題は、フィールドVALUE_OLDVALUE_NEW、両方とも245文字です。

開発者のアクセス権を取得していない場合でも、構造を詳細に調べることができるように、読み取り専用の辞書アクセス権を取得するように誰かに勧める必要があります。

恥知らずなプラグイン:RCERRFC_READ_TABLEには、フィールド処理を処理し、選択されたフィールドの合計幅が汎用モジュールによって課される制限を下回ることを保証するラッパークラスが含まれています。

また、これらのテーブルは実稼働環境では巨大になる可能性があることに注意してください。数十億のエントリを考えてみてください。これらのテーブルに対して過度の読み取り操作を実行することにより、データベースを簡単に停止させることができます。

PS:RFC_READ_TABLESAPノート382318に従って、得意先向けにリリースされていません。ノート758278では、独自の汎用モジュールを作成することを推奨しており、ロジックが改善されたテンプレートを提供しています。

于 2010-11-12T19:05:46.600 に答える
1

代わりにBBP_RFC_READ_TABLEを使用してください

于 2019-12-17T19:46:58.923 に答える
0

DATA_BUFFER_EXCEEDエラーを回避する方法があります。この関数は、SAP OSSノート382318に従って顧客が使用できるようにリリースされていませんが、この関数にパラメータを渡す方法を変更することで、この問題を回避できます。エラーの原因となっているのは単一のフィールドではありませんが、データの行が512バイトを超えると、このエラーが発生します。CDPOSには確かにこの問題があります!

Jcoを使用して関数を呼び出し、テーブルパラメータを渡す方法を知っている場合の回避策は、返される正確なフィールドを指定することです。その後、返された結果を512バイトの制限未満に保つことができます。

テーブルCDPOSの例を使用して、このようなものを指定すると、うまくいくはずです...(注意してください、CDPOSは大規模になる可能性があります!where句を指定して渡す必要があります!)

FIELDS ='OBJECTCLAS' .... FIELDS ='OBJECTID'

Javaでは、次のように表すことができます。

listParams.setValue(this.getpObjectclas()、 "OBJECTCLAS");

返すフィールドを制限することで、このエラーを回避できます。

于 2013-06-06T16:44:01.647 に答える