Eine ABAP-Datenreferenz wird in JavaScript als Proxy-Objekt der vordefinierten Proxy-Klasse SAPAbapDrefClass abgebildet. Der JavaScript-Referenz kann über den Parameter NAME_PROP der Methode BIND ein (case-sensitiver) Name gegeben werden.
Wenn die ABAP-Datenreferenz nicht initial ist, also auf ein Datenobjekt zeigt, hat das Proxy-Objekt genau ein Property 'data', über die auf das referenzierte ABAP-Datenobjekt zugegriffen werden kann (Dereferenzierung). Zuweisungen an die Komponente 'data' ändern den Inhalt des referenzierten Datenobjekts in ABAP. Wenn die ABAP-Datenreferenz mit einem strukturierten ABAP-Datentyp typisiert ist, hat die Property 'data' entsprechende Unterproperties mit den Namen der ABAP-Komponenten in Kleinbuchstaben. Wenn die ABAP-Datenreferenz initial ist, gibt es das Property 'data' nicht.
Das Proxy-Objekt hat eine Methode 'notInitial' ohne Eingabeparameter, die einen booleschen Wert zurückgibt. Der Rückgabewert ist wahr, wenn die ABAP-Datenreferenz auf ein Datenobjekt zeigt und falsch, wenn die ABAP-Datenreferenz initial ist.
Das Proxy-Objekt kann in JavaScript nicht um weitere Properties oder Methoden erweitert werden. Bei Zuweisungen an gebundene Datenreferenzen in JavaScript wird die JavaScript-Verarbeitung abgebrochen.
report DEMO_JAVA_SCRIPT_BIND_DREF.
types: begin of T_STRUCT,
TEXT type STRING,
end of T_STRUCT.
data DREF type ref to T_STRUCT.
data STRUCT type T_STRUCT.
data SOURCE type STRING.
data JS_PROCESSOR type ref to CL_JAVA_SCRIPT.
STRUCT-TEXT = 'Hello'.
get reference of STRUCT into DREF.
JS_PROCESSOR = CL_JAVA_SCRIPT=>CREATE( ).
JS_PROCESSOR->BIND( exporting NAME_OBJ = 'abap'
NAME_PROP = 'Dref'
changing DATA = DREF ).
concatenate 'if ( abap.Dref.notInitial() ) '
'{ abap.Dref.data.text += " World!"; }'
INTO source.
JS_PROCESSOR->EVALUATE( JAVA_SCRIPT = SOURCE ).
write STRUCT-TEXT.
Dieses Beispiel zeigt, wie in JavaScript auf eine Komponente einer strukturiert typisierten Datenreferenz zugegriffen werden kann. Die Methode notInitial überprüft, ob die Datenreferenz auf ein Datenobjekt zeigt.