Anfang des Inhaltsbereichs

Diese Grafik wird im zugehörigen Text erklärt Verbindung zum ABAP-Typ P Dokument im Navigationsbaum lokalisieren

Beispiel

report DEMO_JAVA_SCRIPT_BIND_P.

data PACK1 type P decimals 3 value '3.142'.
data PACK2 type P decimals 3 value '2.718'.

data SOURCE type STRING.
data RETURN_VALUE type STRING.
data JS_PROCESSOR type ref to CL_JAVA_SCRIPT.

JS_PROCESSOR = CL_JAVA_SCRIPT=>CREATE( ).

JS_PROCESSOR->BIND( exporting NAME_OBJ  = 'abap'
                              NAME_PROP = 'var1'
                    changing  DATA      = PACK1 ).

JS_PROCESSOR->BIND( exporting NAME_OBJ  = 'abap'
                              NAME_PROP = 'var2'
                    changing  DATA      = PACK2 ).

SOURCE = 'result = abap.var1 + abap.var2;'.
RETURN_VALUE = JS_PROCESSOR->EVALUATE( SOURCE ).

write / RETURN_VALUE.

SOURCE = 'result = 1*abap.var1 + Number(abap.var2);'.
RETURN_VALUE = JS_PROCESSOR->EVALUATE( SOURCE ).

write / RETURN_VALUE.

Die beiden ABAP-Variablen PACK1 und PACK2 werden als Properties des Top-Level-Binding-Objekts 'abap' im JavaScript-Kontext zugänglich gemacht. Dabei ist zu beachten, dass diese numerischen ABAP-Typen in JavaScript als Strings behandelt werden. Beispielsweise ist der Operator '+' ist in JavaScript überladen und behandelt PACK1 und PACK2 im ersten Fall als Zeichenketten und im zweiten Fall erst nach einer Multiplikation mit 1 bzw. nach Anwendung der JavaScript-Funktion 'Number' als numerische Werte. Trotzdem dürfen aber auch in JavaScript numerischen ABAP-Typen keine Werte zugewiesen werden, die nicht als Zahl darstellbar sind:

Beispiel

report DEMO_JAVA_SCRIPT_BIND_P_ERROR.

data PACK type P decimals 3.

data SOURCE type STRING.
data RETURN_VALUE type STRING.

data JS_PROCESSOR type ref to CL_JAVA_SCRIPT.

data ERROR_REF type ref to CX_SY_CONVERSION_NO_NUMBER.
data ERR_TEXT type STRING.

JS_PROCESSOR = CL_JAVA_SCRIPT=>CREATE( ).

JS_PROCESSOR->BIND( exporting NAME_OBJ  = 'abap'
                              NAME_PROP = 'js_var'
                    changing  DATA      = PACK ).

SOURCE = 'abap.js_var = "Hello World!";'.

try.
    RETURN_VALUE = JS_PROCESSOR->EVALUATE( SOURCE ).
  catch CX_SY_CONVERSION_NO_NUMBER into ERROR_REF.
    ERR_TEXT = ERROR_REF->GET_TEXT( ).
    write ERR_TEXT.
endtry.

Dieses Beispiel führt zur Ausnahme CX_SY_CONVERSION_NO_NUMBER welcher der ABAP-Laufzeitfehler CONVT_NO_NUMBER zugeordnet ist, da der ABAP-Variablen PACK im JavaScript-Programm ein nichtnumerischer Wert zugewiesen werden soll.

Ende des Inhaltsbereichs