SAP プログラム (トランザクション) の機能を BAPI として公開したいと考えています。GUI がバイパスされるように、レポートを呼び出して範囲フィルターを指定する必要があります。
SUBMIT ... WITH ... ABAP コンストラクトの実際の例、または私がする必要があることを達成する方法に関する他の提案はありますか?
これが実際の例です:
SUBMIT SAPF140
TO SAP-SPOOL "optional"
SPOOL PARAMETERS print_parameters "optional"
WITHOUT SPOOL DYNPRO "optional (hides the spool pop-up)"
VIA JOB jobname NUMBER l_number "optional"
AND RETURN "optional - returns to the calling prog"
WITH EVENT = REVENT
WITH BUKRS IN RBUKRS
WITH BELNR IN lRBELNR
WITH GJAHR IN RGJAHR
WITH USNAM = SY-UNAME
WITH DATUM = SAVE_DATUM
WITH UZEIT = SAVE_UZEIT
WITH DELDAYS = RDELDAYS
WITH KAUTO = 'X'
WITH RPDEST = SAVE_PDEST
WITH TITLE = TITLE.
すべての「WITH」ステートメントは、呼び出されたプログラムの選択フィールドに関連しています。ここで、= は PARAMETER ステートメント (単一フィールド) であり、IN は SELECT_OPTIONS ステートメント (範囲) です。
範囲を埋める方法の簡単な例を次に示します。
REFRESH lrbelnr.
lrbelnr-sign = 'I'.
lrbelnr-option = 'EQ'.
lrbelnr-low = HBKORM-belnr.
CLEAR lrbelnr-high.
append lrbelnr.
この機能をBAPIとして抑制したい場合は、機能をリモート関数呼び出し(RFC)モジュールでラップする必要があります。RFC汎用モジュールを実装するだけです。レポートの実装方法によっては、RFC実装から呼び出すこともできるABAPオブジェクトを使用する場合があります。その場合を考えると、あなたはかなり良い解決策を持っています。レポートが調整されるたびに、BAPIにも変更が反映されます。ラップできないSAPの標準プログラムの場合は、名前空間にコピーして調整することを検討してください。それでも、SAPがサポートパッケージスタックを介して更新を実行し、それを認識できない場合、これは面倒な作業になる可能性があります。2つのメソッドの出力は異なります。それとは別に、外部から呼び出したい場合は、RFCモジュールを実装する以外に方法はありません。
送信レポートは、外部の値を返すことはできません。レポートは常にGUI機能専用であり、データ交換用ではありません。レポートで選択オプションを使用する場合、このステートメントはRFCモジュール内では使用できないため、RFCに「手動で」この機能を実装する必要があります。私は通常、レポートを作り直し、モジュール化して、選択情報を中央クラスに配置するか、レポートとBAPI汎用モジュールから呼び出すことができる別の汎用モジュールを配置しようとします。あなたが話しているフィルターはRFCに自動的に実装することはできません。これらの範囲を手動で実装する必要があります。リモートシステムからRFCコールを実行し、警告のポップアップが表示された場合、発生する警告を抑制することはできません。ショートダンプで終了します。したがって、
ジョブスケジューリングを介してそれをバイパスすることだけを探している場合は、バリアントを作成し、そのバリアントを使用してレポートをスケジュールしますが、それはあなたが探しているソリューションではないと思います。
組み込みのBAPIを使用することもできます。「Range」と入力して F4 を押すだけです。
レポートをBATCH INPUT セッションでラップし、関数内で実行できます。唯一の欠点は、レポートを変更するたびに BATCH INPUT を書き直す必要があることです。