コンテンツフレーム起動

このグラフィックは添付のテキストに説明されています ABAP データ型 P へのバインド 文書を SAP ライブラリストラクチャに組み込む

例

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 プログラムで非数値の値を割り当てられたからです。

 

 

 

コンテンツフレーム終了