Anfang des InhaltsbereichsFunktionsdokumentation BIND Dokument im Navigationsbaum lokalisieren

Funktion

Übergibt eine Referenz auf ein ABAP-Datenobjekt an einen JavaScript-Kontext. Dadurch können JavaScript-Programme direkt mit diesen Datenobjekten arbeiten.

Während ABAP eine streng typisierte Spache ist, benutzt JavaScript das so genannte 'loose typing', bei dem Felder keine eindeutigen Datentypen haben und nach Inhalt und Kontext interpretiert werden. Die vielfältigen Typen der ABAP-Typenhierarchie werden deshalb auf JavaScript-Typen bzw. JavaScript-Objekte abgebildet.

Die elementaren ABAP-Typen können auf elementare JavaScript-Typen abgebildet werden. Die übrigen komplexen ABAP-Typen (Strukturen, interne Tabellen und Referenzen) müssen auf spezielle JavaScript-Objekte abgebildet werden. Für diesen Zweck wurde für jeden abbildbaren komplexen ABAP-Typ eine eigene Proxy-Klasse in der JavaScript-Laufzeitumgebung implementiert. Bei Bindung eines komplexen ABAP-Datenobjekts an einen JavaScript-Kontext wird ein Objekt der entsprechenden Proxy-Klasse erzeugt und in JavaScript wird mit einer Referenz auf das Proxy-Objekt gearbeitet.

Bei der Bindung komplexer ABAP-Datenobjekte an einen JavaScript-Kontext ist zu beachten, dass das Proxy-Objekt eine dynamische Grösse ist. Wenn während der Bindung entweder in JavaScript oder in ABAP gewisse Änderungen am ABAP-Datenobjekt vorgenommen werden (z.B. Zeilen interner Tabellen löschen), kann es notwendig sein, das Proxy-Objekt neu zu generieren. Durch die Methode BIND wird letzendlich nur eine JavaScript eines bestimmten Namens statisch mit einem ABAP-Datenobjekt verbunden, während das dazwischen liegende Proxy-Objekt ausgetauscht werden kann. Letzteres geschieht unsichtbar für den Benutzer.

ABAP-Typ

Abbildung in JavaScript

I, F

Double

C, D, N, P T, X, STRING, XSTRING

String

Strukturen (struct)

  • Komponenten einer Struktur (struct-comp)

Proxy-Klasse: SAPAbapStructClass

  • Gleichnamige Attribute (Properties) des Proxy-Objekts (proxy.comp).
    Unterstrukturen sind eigene Proxy-Objekte.

Interne Standard-Tabellen (itab)

  • Zeile einer Tabelle (itab[] INDEX idx)

Proxy-Klasse: SAPAbapItabClass

  • Array-Zugriff auf das Proxy-Objekt (proxy[idx]).

Datenreferenzen (dref)

  • Dereferenziertes Datenobjekt (dref->*)
  • Komponenten eines dereferenzierten Datenobjekts (dref->*-comp bzw. dref->comp)

Proxy-Klasse: SAPAbapDrefClass

  • Attribut (Property) 'data' des Proxy-Objekts (proxy.data).
  • Gleichnamige Attribute (Properties) des Proxy-Objekts (proxy.data.comp).

Objektreferenzvariablen (oref).

  • Öffentliche Instanzattribute des Objekts in ABAP Objects (oref->attr)
  • Öffentliche Instanzmethoden des Objekts in ABAP Objects (oref->meth)

Proxy-Klasse: SAPAbapOrefClass

  • Gleichnamige Attribute (Properties) des Proxy-Objekts (proxy.attr).
  • Methode invoke des Proxy-Objekts (proxy.invoke )

Klassen (class)

  • Öffentliche statische Attribute der Klasse in ABAP Objects (class=>attr)
  • Öffentliche statische Methoden der Klasse in ABAP Objects (class=>meth)

Proxy-Klasse: SAPAbapCrefClass für Property Class von SAPAbapOrefClass

  • Gleichnamige Attribute (Properties) des Proxy-Objekts (proxy.Class.attr).
  • Methode invoke des Proxy-Objekts (proxy.Class.invoke )

Andere ABAP-Datenobjekte werden zur Zeit nicht unterstützt. Es sind aber alle in ABAP möglichen Kombinationen der oben angegebenen Datentypen erlaubt, wie z.B. Standard-Tabellen als Komponenten von Strukturen.

Eine Änderung von gebundenen Datenobjekten in einem JavaScript-Programm wirkt sich direkt auf die ABAP-Datenobjekte aus (Wertesemantik). Dies ist aber nur für elementare Datenobjekte bzw. die elementaren Komponenten komplexer bzw. tiefer Datenobjekte (d.h. die elementaren Anteile von Zeilen in Tabellen oder die Attribute von Objekten) möglich. Zuweisungen an JavaScript-Referenzen, die auf Proxy-Objekte zeigen sind nicht möglich. Wenn beispielsweise dem Top-Level-Binding-Objekt in JavaScript ein Wert zugewiesen wird, führt dies zum Abbruch der JavaScript-Verarbeitung. Weiterhin können einem Proxy-Objekt keine Properties hinzugefügt oder entfernt werden.

Zuweisungen von gebundenen Datenobjekten innerhalb JavaScript an andere JavaScript-Variable sind nur für elementare Datenobjekte bzw. elementare Komponenten möglich problemlos möglich (Wertesemantik).

Bei Zuweisungen von JavaScript-Referenzen auf komplexe ABAP-Datenobjekte an andere JavaScript-Variable wird mit Referenzsemantik gearbeitet. Das heißt, die Zielvariablen in JavaScript zeigen nach der Zuweisung auf das gleiche Proxy-Objekt und diese zunächst auf das gleiche Datenobjekt in ABAP, wie die Quellvariable. Dies kann beispielsweise bei Reorganisation einer internen Tabellen oder durch die Garbage Collection in ABAP zum Verlust der Bindung der Zielvariablen führen. Wenn der Speicherinhalt eines ABAP-Objekts solcherart verändert wird, wird in JavaScript ein neues Proxy-Objekt erzeugt. Während die Quellvariable automatisch mit dem neuen Proxy-Objekt verbunden wird, zeigt die Zielvariable weiterhin auf das vorhergehende Proxy-Objekt. Ein Zugriff auf die Zielvariable führt dann in der Regel zum Abbruch der JavaScript-Verarbeitung oder zu einem ABAP-Laufzeitfehler.

Hinweis

Die JavaScript-Zielvariable (bzw. das Proxy-Objekt, auf das sie zeigt) stellt sozusagen einen Schnappschuss des Zustands des ABAP-Objekts während der Zuweisung dar. Es wird empfohlen bei abwechselnder JavaScript- und ABAP-Verarbeitung, nach der Rückkehr aus ABAP nicht mehr mit einem Schnappschuss zu arbeiten.

Zur Zeit kann eine mit BIND durchgeführte Verknüpfung nur durch das Löschen des zugehörigen JavaScript-Kontexts mit der Methode ABAP_DESTRUCTOR aufgelöst werden.

Importing Parameter

NAME_OBJ (Typ STRING)

Name eines JavaScript-Objekts, an das bis zu 255 ABAP-Datenobjekte als Properties gebunden werden können (Top-Level-Binding). Es können beliebig viele solche Top Level Bindings in einem Kontext angelegt werden. Wenn ein leerer String übergeben wird, wird das ABAP-Datenobjekt an eine Property des Wurzelobjekts (bzw. eine globale Variable) des Kontexts gebunden (Root-Level-Binding, nicht empfohlen).

NAME_PROP (Typ STRING)

Name des Properties des Top-Level-Binding-Objekts bzw. des Wurzelobjekts unter dem im JavaScript-Kontext auf das ABAP-Datenobjekt zugegriffen wird. Für komplexe ABAP-Datenobjekte sind das Referenzen auf die Objekte des entsprechenden Proxy-Objekts.

Changing Parameter

DATA (Typ ANY)

Name des ABAP-Datenobjekts.

Details und Beispiele

Verbindung zu ABAP-Typen I und F

Verbindung zum ABAP-Typ P

Verbindung zu ABAP-Strukturen

Verbindung zu internen Tabellen

Verbindung zu Datenreferenzen

Verbindung zu Objektreferenzen (Instanzen)

Verbindung zu statischen Klassenkomponenten

Ende des Inhaltsbereichs