Show TOC Anfang des Inhaltsbereichs

Vorgehensweisen Erweitertes XML-Handling aktivieren  Dokument im Navigationsbaum lokalisieren

Verwendung

In ABAP kann man bei einem initialen Schnittstellen-Parameter nicht erkennen, ob der Parameter nicht mit einem Wert belegt wurde oder ob ein initialer Wert übergeben wird. Zudem gibt der XSD-Standard vor, wie mit Defaultwerten umgegangen wird. Für die Proxy-Generierung ergibt sich daraus folgendes Standard-Verhalten:

Standardverhalten der Defaultbehandlung

Consumer-Proxy

Beim Erzeugen des XML-Datenstroms wird in allen initialen Feldern der Defaultwert gesetzt

Provider-Proxy

Die Eingangsverarbeitung auf Server-Seite der ABAP-Proxy-Laufzeit setzt für Parameter den Defaultwert vor Aufruf der Anwendung, wenn Element-Tags leer sind oder Attribut-Tags fehlen. Wenn Elemente ein Attribut nil = "true" haben oder das Element-Tag ganz fehlt, wird der zugehörige Parameter initial gelassen.

Optionale skalare Elemente ohne Default, die initial sind, werden in der Message zur Performance-Optimierung unterdrückt.

Dieses Standard-Verhalten können Sie übersteuern.

Voraussetzungen

Die Übersteuerung des Standard-Verhaltens wirkt sich auf die Performance aus, denn die Zusatzinformationen müssen beim Aufbau der Message ausgewertet beziehungsweise beim Parsen beschafft werden. Aus diesem Grund müssen Sie der ABAP-Proxy-Laufzeit explizit mitteilen, wenn Sie diesen Dienst nutzen wollen.

Das Payload-Protokoll ist eine Instanz des Interface IF_WSPROTOCOL_PAYLOAD. Im Abschnitt Protokoll ist beschrieben, wie Sie sich vor dem Aufruf eines Proxy auf Senderseite beziehungsweise in der Inbound-Verarbeitung auf Empfängerseite diese Instanz besorgen. Um das erweitere XML-Handling zu aktivieren, gehen Sie folgendermaßen vor:

·        Um auf Senderseite der Proxy-Laufzeit mitzuteilen, dass Sie das Standard-Verhalten übersteuern möchten, rufen Sie vor dem Aufruf des Client-Proxies die Methode SET_EXTENDED_XML_HANDLING auf und setzen den Parameter EXTENDED_XML_HANDLING (auf 'X'). Für die Felder, für die das Standard-Verhalten abweichen soll, füllen Sie eine Controller-Tabelle (wie ist im folgenden Abschnitt erläutert). Mit der Controller-Tabelle können Sie steuern, ob beziehungsweise wie ein Wert in der Payload der Message auftauchen soll.

·        Unabhängig davon, ob beim Sender der Parameter EXTENDED_XML_HANDLING gesetzt war oder nicht, können Sie beim Empfänger die ABAP-Proxy-Laufzeit dazu veranlassen, die Controller-Tabellen für Felder zu füllen. Rufen Sie dazu die Methode SET_EXTENDED_XML_HANDLING des Payload-Protokolls auf und setzen den Parameter EXTENDED_XML_HANDLING (auf 'X'). Die ABAP-Proxy-Laufzeit stellt dann beim Parsen von Messages zu diesem Proxy fest, ob das Feld in der Message übertragen wurde beziehungsweise ob das Feld einen initialen oder keinen Wert hatte. Entsprechend füllt die Proxy-Laufzeit wiederum eine Controller-Tabelle, die von der Anwendung ausgewertet werden kann.

Hinweis

Mit der Methode GET_EXTENDED_XML_HANDLING können Sie abfragen, ob das erweiterte XML-Handling von Ihnen aktiviert wurde.

Steuerung beim Sender

Die ABAP-Proxy-Generierung generiert zu jedem komplexen Typ eine Kontroll-Tabelle vom Typ PRXCTRLTAB (Zeilentyp PRXCTRL). Diese Komponente hat den Namen CONTROLLER. Mit Hilfe dieser Tabelle können Sie für jedes Feld individuell festlegen, wie und ob es in der Message auftauchen soll. Dazu setzen Sie für eine Tabellenzeile das Feld FIELD auf den ABAP-Feldnamen, das Feld VALUE auf einen Wert aus dem Type-Pool sai und hängen die Zeile an die Tabelle an. Das Feld VALUE kann dabei folgende Werte haben:

Wertebereich für Feld VALUE der Tabelle CONTROLLER

Wert

Bedeutung

sai_ctrl_initial

Das Feld erscheint mit typgerechtem Initialwert in der Message, übersteuert also die Defaultbehandlung und die Performance-Optimierung. Der Wert wird für Strukturen beziehungsweise komplexe Typen ignoriert.

sai_ctrl_nil

Für das Feld wird der Wert xsi:nil in der Message gesendet.

sai_ctrl_none

Das Feld erscheint nicht in der Message, und zwar unabhängig von dessen Wert oder dem Default

Interpretation der Kontroll-Tabelle auf Empfängerseite

Auch auf der Empfänger-Seite wird die Kontroll-Tabelle analog zu jeder Struktur generiert. Die Proxy-Laufzeit füllt sie in diesem Fall beim Parsen mit Werten, die die Anwendung auswerten kann:

Mögliche Werte des Feldes VALUE der CONTROLLER-Tabelle auf Inbound-Seite

Wert

Bedeutung

sai_ctrl_initial

Für das Feld wurde der Initialwert gesendet

sai_ctrl_nil

Für das Feld wurde der Wert xsi:nil in der Message gesendet.

sai_ctrl_none

Das Feld war nicht in der Message enthalten

 

 

 

 

 

Ende des Inhaltsbereichs