Anfang des Inhaltsbereichs

Diese Grafik wird im zugehörigen Text erklärt Verbindung zu statischen Klassenkomponenten Dokument im Navigationsbaum lokalisieren

Auf die statischen Komponenten einer ABAP-Klasse kann in JavaScript nur durch die Bindung an eine Objektreferenzvariable (Verbindung zu Objektreferenzen (Instanzen)) zugegriffen werden, die den statischen Typ der Klasse hat. Es muss aber nicht unbedingt eine Instanz der Klasse in ABAP erzeugt werden.

Die statischen Komponenten einer ABAP-Klasse werden in JavaScript als Proxy-Objekt der vordefinierten Proxy-Klasse SAPAbapCrefClass abgebildet. Bei der Bindung an eine Objektreferenzvariable hat das entsprechende Proxy-Objekt (proxy) eine Property 'Class', die auf SAPAbapCrefClass basiert.

Die Komponenten des Proxy-Objekts 'proxy.Class' sind:

Das Proxy-Objekt 'proxy.Class' kann in JavaScript nicht um weitere Properties oder Methoden erweitert werden. Bei Zuweisungen an 'proxy.Class' in JavaScript oder wenn in JavaScript versucht wird, auf Komponenten von nichtgeladenen Klassen zuzugreifen, wird die JavaScript-Verarbeitung abgebrochen.

Beispiel

report DEMO_JAVA_SCRIPT_BIND_DREF.

class C1 definition.
  public section.
    class-data A1 type STRING value 'Hello'.
    class-methods M1.
  protected section.
    class-data A2 type STRING value 'Hello'.
endclass.

class C1 implementation.
  method M1.
    concatenate A1 '!' into A1.
  endmethod.
endclass.

data JS_PROCESSOR type ref to CL_JAVA_SCRIPT.

data OREF type ref to C1.

data SOURCE type STRING.

start-of-selection.

  JS_PROCESSOR = CL_JAVA_SCRIPT=>CREATE( ).

  JS_PROCESSOR->BIND( exporting NAME_OBJ  = 'abap'
                               NAME_PROP = 'Oref'
                      changing  DATA      =  OREF ).

  concatenate  ' if ( abap.Oref.Class.isActive() )'
               '{ abap.Oref.Class.a1 += " World";   '
               '  abap.Oref.Class.invoke( "m1" );  }'
               into SOURCE.

  JS_PROCESSOR->EVALUATE( JAVA_SCRIPT = SOURCE ).

  write / C1=>A1.

In diesem Beispiel verlängert JavaScript das Attribut C1=>A1 von 'Hello' auf 'Hello World!'. Die Verlängerung um 'World' erfolgt durch einen Zugriff auf das statische Attribut 'Oref.Class.a1', während die Verlängerung um '!' durch Aufruf der Methode C1=>M1 über 'Oref.Class.invoke' erfolgt.

Ende des Inhaltsbereichs