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: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.