Show TOC Anfang des Inhaltsbereichs

Syntaxdokumentation sap:call-external  Dokument im Navigationsbaum lokalisieren

Verwendung

Mit der Anweisung sap:call-external haben Sie die Möglichkeit ABAP-Aufrufe mit einer beliebigen Anzahl von Rückgabewerten aus einem XSLT-Programm durchzuführen.

Die Aufrufe können sowohl auf der Ebene der Instanzen von ABAP-Klassen oder auch der Klassen selbst erfolgen. In ersten Fall werden daher Instanzmethoden, im zweiten dagegen Klassenmethoden verwendet.

Beim Aufruf von Interface-Methoden müssen diese grundsätzlich über den Namen des Interfaces gefolgt vom Interface-Komponentenselektor (intf~) gekennzeichnet werden.

Syntax

Aufrufe von Instanzmethoden erfolgen gemäß der Syntax:

<sap:call-external name="prefix:localname" method="instanceMethod">

  <sap:callvalue      param="inParam1" select="expression"/>

  <sap:callvalue      param="inParam2" select="expression"/>

      ...

  <sap:callvariable   param="exParam1" name="varName1" type="xslType"/>

  <sap:callvariable   param="exParam2" name="varName2" type="xslType"/>

      ...

</sap:call-external>

Beschreibung

Die Anweisung sap:call-external kann an jeder Position im XSL-Quelltext stehen, an der sonst auch xsl:call-template erlaubt ist.

Der Aufruf einer Instanzmethode erfordert die Angabe eines Objektnamens, der ein ABAP-Objekt identifiziert und den Namen der aufzurufenden Methode.

Die beiden Sub-Anweisungen sap:callvalue und sap:callvariable werden für die Übergabe von Parameterwerten benötigt.
Mit sap:callvalue werden Parameterwerte an die gerufene Methode als Import-Parameter übergeben. Das Attribut param gibt je einen Parameternamen aus der Methodendefinition in ABAP an; die Wertezuweisung erfolgt mit dem Attribut select. Dabei können die XSLT-Typen string, number, boolean und node-set an die ABAP-Parameter übergeben werden.

Beispiel:

Die Konvertierung, etwa der Typen number und node-set in die entsprechenden ABAP-Werte erfolgt nach dem folgenden Schema:

·         ein Wert des Typs number kann in ABAP sowohl in Integer- als auch in einen Float-Typ umgewandelt werden.

·         ein Node-Set wird stets in eine iXML-Node-Collection konvertiert. Beachten Sie, daß keine implizite Konvertierung von Node-Sets in Strings erfolgen kann. Um beispielsweise den Wert eines Attributs "attr" an einen String-Parameter in ABAP zu übergeben, muss der XPath-Ausdruck string(@attr) verwendet werden.

Die aus dem Methodenaufruf zurückgelieferten Werte werden mit der Sub-Anweisung sap:callvariable an XSLT-Variablen gebunden. Das Attribut param gibt hier den ABAP-Parameternamen aus der Methodendefinition an. Das Attribut name bezeichnet dagegen die zugehörige XSLT-Variable. Zusätzlich kann das Attribut type verwendet werden, um die resultierenden Werte einem bestimmten XSLT-Typ zuzuordnen. Anderenfalls kommt die Standardkonvertierung zu Einsatz.

Beispiel:

Daten vom Typ C(1) werden per Default in einen XSLT-String konvertiert. Ist dagegen boolean im Attribut type explizit angegeben, so wird entsprechend in XSLT-Boolean umgesetzt.

Hinweis

Generell können auch ABAP-Objekte als Parameter angegeben werden.

Beachten Sie, daß ABAP-Parameter von Typ "changing" sowohl mit sap:callvalue als auch mit sap:callvariable übergeben werden können.

 

Beim Aufruf der Klassenmethoden ist das Attribut name durch class ersetzt. Als Wert von class ist demzufolge der Name der ABAP-Klasse und für method der Name der gewünschte Klassenmethode anzugeben.
Die Syntax lautet dann also:

<sap:call-external class="className" method="clasMethod">

      ...

</sap:call-external>

Beispiel

Das nachfolgende Beispiel demonstriert einen Zugriff auf die Datenbank des SAP-Systems, mit dem zusätzliche Daten zu einer ausgewählten Flugverbindung ausgegeben werden. Der Aufruf erfolgt mittels der Klassenmethode GET_DETAIL für die Klasse CL_FLIGHT_INFO.

Die erhaltene Information wird mit Hilfe von sap:callvariable an die entsprechenden XSLT-Variablen (duration, distance, unit, ...) gebunden.

<sap:call-external class="CL_FLIGHT_INFO" method="GET_DETAIL">

  <sap:callvalue     param="AIRLID"   select="string($carr/@code)"/>

  <sap:callvalue     param="CONNID"   select="string(@code)"/>

  <sap:callvalue     param="FLDATE"   select="string(departure/date)"/>

  <sap:callvariable  param="FLIME"    name="duration"/>

  <sap:callvariable  param="DIST"     name="distance" type="number"/>

  <sap:callvariable  param="UNIT"     name="unit"/>

  <sap:callvariable  param="PLTYPE"   name="planetype"/>

  <sap:callvariable  param="SEATSM"   name="seatsmax"/>

</sap:call-external>

 

 

Ende des Inhaltsbereichs