使用する
ステートメントsap:call-externalを使用すると、XSLTプログラム内から任意の数の戻り値を使用してABAP呼び出しを実行することができます。
これらの呼び出しは、ABAPクラスのインスタンスレベルとクラスレベル自体の両方で行うことができます。したがって、最初のケースでは、インスタンスメソッドが使用されます。一方、2番目の方法では、クラスメソッドが使用されます。
インターフェイスメソッドを呼び出すときは、インターフェイスの名前の後にインターフェイスコンポーネントセレクター(intf〜)を付けて指定する必要があります。
構文
インスタンスメソッドの呼び出しは、次の構文に従って実行されます。
説明
ステートメントsap:call-externalは、XSLソースコード内の任意の位置に配置できます。それ以外の場合は、xsl:call-templateも許可されます。
インスタンスメソッドを呼び出すには、ABAPオブジェクトを識別するオブジェクト名と、呼び出されるメソッドの名前を指定する必要があります。
パラメータ値を渡すには、サブステートメントsap:callvalueとsap:callvariableの両方が必要です。
sap:callvalueを使用して、パラメータ値がインポートパラメータとして呼び出されたメソッドに渡されます。属性paramは、ABAPのメソッド定義からそれぞれ1つのパラメータ名を指定します。値の割り当ては、属性selectを使用して行われます。ここで、XSLTタイプの文字列、数値、ブール値、およびノードセットをABAPパラメータに渡すことができます。
例:
たとえば、タイプ番号とノードセットの対応するABAP値への変換は、以下のスキームに従って実行されます。
タイプ番号の値は、ABAPで整数型と浮動小数点型の両方にコンパイルすることができます。
ノードセットは常にiXMLノードコレクションに変換されます。ノードセットを文字列に暗黙的に変換することはできないことに注意してください。たとえば、属性 “attr”の値をABAPの文字列パラメータに渡すには、XPath式string(@attr)を使用する必要があります。
メソッド呼び出しから返される値は、サブステートメントsap:callvariableを使用してXSLT変数にバインドされます。ここで、属性paramは、メソッド定義からのABAPパラメータ名を指定します。一方、属性名は、対応するXSLT変数を識別します。さらに、属性タイプを使用して、結果の値を特定のXSLTタイプに割り当てることができます。それ以外の場合は、標準の変換が使用されます。
例:
タイプC(1)のデータは、デフォルトでXSLT文字列に変換されます。ただし、ブール値が属性タイプで明示的に指定されている場合、それに応じてXSLTブール値に変換されます。
クラスメソッドが呼び出されると、属性名はクラスに置き換えられます。クラスの値は、それに応じてABAPクラスの名前で指定する必要があり、メソッドの値は、必要なクラスメソッドの名前で指定する必要があります。したがって、構文は次のとおりです。
例
次の例は、選択したフライト接続の追加データが出力されるSAPsystemのデータベースへのアクセスを示しています。呼び出しは、クラスCL_FLIGHT_INFOのクラスメソッドGET_DETAILを使用して行われます。
受信した情報は、sap:callvariableを使用して、対応するXSLT変数(期間、距離、単位など)にバインドされます。