SAP RFC(remote function call)とは?
SAPの世界でRFCとはRemote function callのことを指します。
これは主に外部システムの汎用モジュールを呼び出すために使われます。
SAP 環境における異なるシステムのアプリケーション間の通信には、SAP システム間の接続と、SAP システムと非 SAP システム間の接続があります。
Remote Function Call (RFC) は、SAP システム間の通信のための SAP 標準インタフェースです。RFC は、リモートシステムで実行される関数を呼び出します。
現在では、さまざまなRFCのバリエーションがあり、それぞれが異なる特性を持ち、特定の目的のために使用されています。
つまり、RFCはSAPシステム内の接続やSAP以外に使われる接続方式と考えておけば良いでしょう。
ここからはSAPのRFCの仕組みと各々のRFCの種類について見ていきます。
RFCと一口にいってもいくつかの種類があります。
SAP RFC(remote function call)の仕組みとは?
リモートファンクションコール(RFC)とは、呼び出し側のプログラムとは異なるシステムで実行される汎用モジュールを呼び出すことである。
同一システム内の汎用モジュールをRFCで呼び出すこともできるが、通常、RFCは呼び出し側モジュールと被呼び出し側モジュールが異なるシステムで実行される場合に使用される。
SAPシステムでは、これらの機能はRFCインタフェースシステムで提供され、2つのSAPシステム間、またはSAPシステムと外部システム間の汎用モジュール呼び出しを実行するために使用することができます。
また、SAPのRFCにはさまざまなインターフェースシステムがございます。
SAP RFC(remote function call)のポート番号
SAP では、RFC 通信に使用されるポート番号は通常 33nn です。
ここで、nn は使用されるゲートウェイのインスタンス番号を表します。
具体的なポート番号は、使用されるシステムやゲートウェイの構成によって異なる場合がありますが、
一般的には 33nn の形式に従います。詳細なポート番号は、システムの構成やドキュメンテーションによって確認することができます。
SAP RFC(remote function call)とBAPIの関連性
SAP BAPI RFC は、SAP Business Application Programming Interface (BAPI) 環境でリモートファンクションコール (RFC) を実行するためのコネクタです。
BAPI は、SAP システムに組み込まれたビジネス機能を呼び出すための標準インターフェースであり、RFC は、SAP システムと外部システムとの間でデータをやり取りするためのプロトコルです。
SAP BAPI RFC コネクタを使用することで、外部システムから SAP システムの BAPI を呼び出すことができます。また、RFC_READ_TABLE を使用して SAP テーブルからデータを抽出することもできます。
SAPのRFCインターフェースシステムの種類
ABAPプログラムの呼び出し側インターフェースは、各ABAPプログラム内でリモート汎用モジュールを呼び出すために、CALL FUNCTION...
を使用します。
この際、DESTINATION
パラメータは、呼び出されるリモート汎用モジュールが呼び出し元のシステムとは異なるシステムで実行されていることをSAPシステムに通知します。
RFC通信は、CALL FUNCTION
コマンドの一部として実行されます。
呼び出されるRFC汎用モジュールは、正しいものである必要があり、かつSAPシステムでリモートとして登録されている必要があります。
送信元プログラムと送信先プログラムがともにABAPプログラムである場合、RFCインタフェースは双方の通信相手を提供します。ソースプログラムはどのようなABAPプログラムでもかまいませんが、デスティネーションプログラムは、リモートとして登録されたジェネリックモジュールである必要があります。
非ABAPプログラムを呼び出すためのインタフェースにおいては、呼び出し側プログラムも呼び出される側のパートナーもSAPプログラムでない場合、このプログラムはRFC通信の別のパートナーの役割を果たすようにプログラムされている必要があります。
外部プログラムは、RFCとGUIをサポートするインタフェースを使用してSAPシステム内の汎用モジュールを呼び出したり、SAPシステム内でこれらの汎用モジュールを実行したりすることができます。
同様に、ABAPプログラムは外部システムが提供する機能を使用する際にこれらのインタフェースを利用できます。
SAP RFC(remote function call)の種類
ここからはRFC(remote function call)の一覧を上げて、各々のRFCについて見ていきます。
同期RFC
RFCの最初のバージョンは同期RFC(sRFC)です。
このタイプのRFCは、同期通信に基づいて関数呼び出しを実行します。つまり、呼び出しが行われた時点で、関係するシステムの両方が利用可能でなければなりません。
非同期RFC(aRFC)
aRFCは、その名前とは裏腹に、非同期通信の条件を満たしていないため、実際には非同期通信の一種ではありません。
たとえば、sRFCでは、呼び出されたシステムは呼び出し中に利用可能でなければなりません。
aRFCの主な特徴は以下の通りです。
- 関数制御は、呼び出し後、呼び出し元のプログラムに直接戻る。
- 非同期RFCのパラメータはデータベースに記録されず、サーバーに直接送信されます。
- 非同期RFCにより、ユーザはリモートシステムと対話的なダイアログを実行することができます。
- 呼び出し側がaRFCを開始するとき、呼び出されたサーバーは要求を受け入れることが可能でなければなりません。
- 呼び出し側のプログラムは、非同期RFCから結果を受け取ることができます。
呼び出された関数モジュールの結果が得られるまで呼び出し側プログラムの処理を中断してはならないです。
リモート・システムとリアルタイム通信を確立する場合、aRFCの使用は常に良いアイデアです(ここでは非同期という用語をこの意味で使用します)。
トランザクションRFC(tRFC)
トランザクションRFC(tRFC、以前は非同期RFC)は、aRFCとは異なり、呼び出された機能モジュールをRFCサーバーで一度だけ実行する本物の非同期通信方法です。
RFCクライアントプログラムがtRFCを実行するときに、リモートシステムが利用可能である必要はありません。
tRFC コンポーネントは、呼び出された RFC 関数を対応するデータとともに、一意のトランザクション ID(TID )で SAP データベースに保存します。
コールが送信され、受信側のシステムがダウンしている場合、コールは後日までローカルキューに残ります。
呼び出し側のダイアログプログラムは、リモートコールが成功したかどうかを確認するために待つことなく、処理を進めることができます。
受信システムが一定時間内にアクティブにならない場合、呼はバッチで実行するようスケジューリングされる。
tRFCは、関数がLUW(Logical Unit of Work)として実行される場合、常に使用される。
LUW内では、すべての呼出しでは下記のリストのようになります。
- 呼び出された順番に実行されます。
- ターゲットシステムで同じプログラムコンテキストで実行される。
- 単一のトランザクションで実行され、単位としてコミットまたはロールバックされる。
呼び出しのトランザクション順序を維持したい場合は、tRFCの実装が推奨されます。
tRFCのデメリット
tRFCは、すべてのLUWを互いに独立して処理します。活性化されたtRFCの処理量が多いため、この手順では、送信側とターゲット側の両方のシステムでパフォーマンスが大幅に低下する可能性があります。
さらに、アプリケーションで定義されたLUWの順序を維持することはできません。
したがって、アプリケーションが指示した順序でトランザクションが実行されることを保証することは不可能です。
唯一保証できることは、すべてのLUWが遅かれ早かれ転送されることである。
キューRFC(qRFC)
複数のLUWがアプリケーションによって指定された順序で処理されることを保証するために、tRFCはキュー(受信キューと送信キュー)を使ってシリアライズすることができる。
このタイプのRFCはキューRFC(qRFC)と呼ばれる。
したがって、qRFC は tRFC の拡張である。qRFCは、LUW(トランザクション)を、参加するキューに(異なるアプリケーションプログラムで定義されたシーケンスに基づいて)先行者がいない場合のみ転送する。
複数のトランザクションが事前に定義された順序で処理されることを保証したい場合は、qRFCの実装が推奨されます。
バックグラウンドRFC(bgRFC)
bgRFC は tRFC と qRFC の後継であり、性能と機能が大幅に改善されています。
備考:したがって、tRFC および qRFC の代わりに bgRFC を使用することが緊急に推奨されます。
ローカルデータキュー(LDQ)
LDQはRFC通信における特殊なケースです。ここでは、データがシステムからアクティブに送信されることはありません。
代わりに、プル原理に従って外部アプリケーション(モバイルデバイスなど)から呼び出されるまで、ローカルに保存されます。
注記
すべての非同期 RFC 手順(tRFC、qRFC、bgRFC、LDQ)は、バックグラウンド通信のコンセプトの一部を構成しています。これらの手続きには、「通常の」RFCとは異なる特定の特性があるため、個別に詳細を説明します。
データ転送
すべてのRFCタイプは、CPI-CまたはTCP/IPによって転送されます。これらは一種のゲートウェイ通信を構成しています。
汎用モジュール(RFC_READ_TABLE)の使い方
SAP RFC_READ_TABLE は、SAP システムからデータを取得するための汎用モジュールです。このモジュールを使用することで、SAP テーブルからデータを抽出することができます4。以下に、RFC_READ_TABLE の使用方法と引数について説明します。
使用方法
- まず、SAP システムの SE37 画面で、RFC_READ_TABLE をコピーしてください1。これは、テンプレートとして使用するためです。
- Excel マクロを使用して、SAP データを取得することができます2。
- RFC_READ_TABLE の引数と返却値を調べておきます3。
引数
RFC_READ_TABLE の引数は以下の通りです。
Table_Value
: 抽出するテーブルの名前を指定します。Table_Query
: 抽出するデータの条件を指定します。
返却値
RFC_READ_TABLE は、抽出されたデータを返却します。これは、2次元配列の形式です。
例
以下に、RFC_READ_TABLE の使用例を示します。
abapDATA: lt_data TYPE TABLE OF your_table_type.
CALL FUNCTION 'RFC_READ_TABLE'
EXPORTING
table_value = 'your_table_name'
table_query = 'your_query_condition'
IMPORTING
table_data = lt_data.
このコードでは、your_table_type
と your_table_name
を適切に置き換えて、SAP テーブルからデータを抽出します。your_query_condition
には、抽出するデータの条件を指定します。