!--a11y-->
ABAP
データ型 P
へのバインド 

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.
ABAP の 2 つの変数 PACK1 および PACK2 は、JavaScript コンテキスト内ではトップレベルのバインドオブジェクト 'abap' のプロパティとしてアクセスできます。これらの ABAP 数値タイプは、JavaScript では文字列として処理されます。たとえば、オペレータ '+' は JavaScript 内でオーバーロードされます。最初は文字列として PACK1 と PACK2 を処理し、2 番めは 1 で乗算されるかJavaScript の 'Number' 関数を使用して数値として処理されます。にもかかわらず JavaScript では、数値として表示できない値は ABAP 数値タイプに割り当てないようにします。

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.
この例では、例外 CX_SY_CONVERSION_NO_NUMBER という結果になります。これは、ABAP 実行時エラーCONVT_NO_NUMBER を割り当てられたものです。ABAP 変数 PACK は、JavaScript プログラムで非数値の値を割り当てられたからです。