プロセス
SAP ACOを介した動的RFCアクセスは、ACOを使用するプログラムのクライアント側でABAPのコード開発によって完全に実行されます。
ファクトリメソッドを使用することから始めます。
宛先の指定
メタデータを取得するために、システムへの宛先を指定する必要があります。後でリモート関数を呼び出すときに、関数と関連するディクショナリオブジェクトが同一である限り、同じ宛先または別の宛先を使用できます。
このメソッドは、宛先オブジェクト・インターフェースIF_ACO_DESTINATIONへの参照を返します。宛先オブジェクトから、メソッドGET_REPOSITORYを使用してリポジトリオブジェクトを取得します。
リポジトリに返されるタイプインタフェースIF_ACO_REPOSITORYの参照により、機能オブジェクトを要求することができます。
-
FUNCTION_NAMEで、リモート対応汎用モジュールの名称を指定する必要があります。
-
パラメータCHECK_TIMESTAMPを使用して、パフォーマンスを向上させることができます。通常、SAP ACOは、GET_FUNCTIONを呼び出すたびに、キャッシュされたリポジトリ情報のタイムスタンプをリモートリポジトリ情報と比較します。前回の呼び出し以降、リモート関数が非互換的に変更されていないことがわかっている場合は、パラメータをABAP_FALSEに設定することができます。
-
BYPASSING_BUFFERは、通常、ABAP_TRUEに設定しないでください。これはテスト目的でのみ使用され、パフォーマンスを大幅に低下させます。
-
CLASSIC_EXCEPTIONSを使用すると、受信する例外のタイプ(クラシック例外またはクラスベースの例外)を区別できます。(注:クラスベースの例外はすべてのリリースで使用できるわけではないため、一部のリリースではこのオプションが省略されています)。
-
パラメーターASYNCHRONOUS_TASKは、関数を同期的に呼び出すか非同期的に呼び出すかを指定するために使用されます。
-
非同期の場合にのみ、パラメーターRECEIVE_RESULTを入力するのが理にかなっています。このパラメータがABAP_TRUEに設定されている場合、結果を取得するために非同期タスクの終了時に呼び出されるクラスを指定するように後で要求されます。
-
さらに、パラメーターKEEP_TASKを設定して、同じコンテキストでさらに非同期呼び出しを呼び出した後もタスクを保持することができます。詳細については、非同期RFCのドキュメントをお読みください。
IF_ACO_FUNCTION
IF_ACO_FUNCTIONは、関数を実行し、パラメータ/例外のメタデータと値を設定および取得するための主要なエントリポイントです。
メソッドEXECUTEは、指定された宛先DESTINATIONでリモート関数を呼び出します。非同期の場合、TASKでタスク名を追加で指定する必要があります。
GET_FUNCTION中にRECEIVE_RESULTを指定した場合は、結果ハンドラークラスのクラスインスタンスを渡すことも要求されます。後で、別のセクションで、結果ハンドラークラスを構築する方法について説明します。
メソッドRECEIVE_RESULTは、結果ハンドラークラスから呼び出す必要があります。結果ハンドラークラスを作成する方法については、別のセクションで後述します。
実行前または実行後に汎用モジュールのパラメータにアクセスするには、メソッドGET_PARAMETER_LISTから開始します。
PARAMETER_CLASSとして、インポートの場合はI、エクスポートの場合はE、変更の場合はC、テーブルのパラメーターの場合はTを指定できます。
メソッドGET_NAMEは、汎用モジュール名を返します。
GET_FUNCTION中にCLASSIC_EXCEPTIONSを指定しなかった場合、メソッドGET_EXCEPTIONは可能な例外名のリストを返します。
。
GET_FUNCTION中にCLASSIC_EXCEPTIONSを指定した場合、メソッドGET_CLASSIC_EXCEPTIONは発生した例外を返します。
複雑なデータ型を表す3つのインターフェイス
インターフェイスから継承IF_ACO_RECORD。
IF_ACO_RECORD
インターフェイスIF_ACO_RECORDは、次のメソッドを提供します。
メソッドGET_VALUEは、指定されたコンポーネント名の値を返します。メソッドがパラメーターリストから呼び出される場合は、パラメーターの名前を指定します。メソッドが構造体に対して呼び出される場合は、フィールド名を指定する必要があります。テーブルの場合、パラメータ名は行を参照しているため、空にする必要があります。DATAで渡される変数は、パラメーター、フィールド、または行タイプに適合する必要があります。
メソッドSET_VALUEは、GET_VALUEの反対です。コンテンツをそれぞれの変数に格納します。メソッドがパラメーターリストから呼び出される場合は、パラメーターの名前を指定します。メソッドが構造体に対して呼び出される場合は、フィールド名を指定する必要があります。テーブルの場合、パラメータ名は行を参照しているため、空にする必要があります。DATAで渡される変数は、パラメーター、フィールド、または行タイプに適合する必要があります。
GET_VALUEとSET_VALUEは、構造化されたタイプではなく、単純なタイプに対してのみ機能します。複合型の場合、特別なメソッドが提供されます。
メソッドGET_TABLEは、インターフェースIF_ACO_TABLEへの参照を返します。パラメータNAMEには、パラメータまたはフィールド名を入力する必要があります。まれに、テーブルの線種が再びテーブルになる場合、GET_VALUEのようにNAMEも空になることがあります。
メソッドGET_STRUCTUREは、インターフェースIF_ACO_STRUCTUREへの参照を返します。パラメータNAMEには、パラメータまたはフィールド名を入力する必要があります。メソッドがテーブルから呼び出される場合、GET_VALUEのようにNAMEも空になる可能性があります。
前述のGETメソッドとSETメソッドでは、タイプ定義またはメタデータを知っている必要があります。したがって、メソッドメソッドGET_META_DATAを使用することができます。他のメソッドと同様に、パラメータリストにアクセスするときはパラメータ名、構造体にアクセスするときはフィールド名、テーブルにアクセスするときは空の文字列を指定します。次の情報を受け取ります。
•TYPNAMEのデータディクショナリタイプ名
•ABAPTYPEの内部ABAPタイプ。
•IS_TABLE_OFがABAP_TRUEの場合、ABAPTYPEにはテーブルパラメータの行タイプが含まれます。
•LENGTHの文字、numc、またはパックタイプ(BCD)の場合の長さ。
•DECIMALSのパックタイプ(BCD)の10進文字の量
•DEFAULTはパラメータリストでのみ使用され、デフォルト値を指定します
•SHORTTEXTでは、パラメータまたはフィールド名の短いテキストが提供されます
•OPTIONALはパラメータリストでのみ使用され、パラメータがオプションかどうかを指定します
メソッドGET_META_DATAには、入力としてパラメーター名またはフィールド名が必要です。しかし、タイプについて何も知らない場合、あなたはどうしますか?この場合、メソッドGET_COMPONENTSを使用できます。このメソッドは、パラメータリストのすべてのパラメータまたはCOMPONENTSの構造体のすべてのフィールドを返します。
インターフェイスIF_ACO_TABLEは、IF_ACO_RECORDをインターフェイスするための追加のメソッドを提供します。メソッドAPPEND_ROWを使用して、最後に空の行を追加します。
メソッドINSERT_ROWを使用して、指定された位置に追加の空の行を挿入します。
メソッドDELETE_ROWを使用して、指定された位置の行を削除します。
。
メソッドGET_ROW_COUNTは、テーブルの行数を提供します。
。
メソッドSET_ROW_POSITIONは、現在の行を指定された位置に設定します。
メソッドGET_ROW_POSITIONは、現在の行の位置を読み取ります。
メソッドNEXT_ROW、PREVIOUS_ROW、FIRST_ROW、およびLAST_ROWを使用して、テーブル内で行カーソルを移動できます。
メソッドCLEARは、テーブル全体を削除します。