!--a11y-->
EVALUATE_IN_STACK 
デバッグモードでスクリプトのスタックレベルを評価します。この関数の前提条件は、それぞれの評価対象スクリプトが EXECUTE メソッドにより 1 回実行されるということです。その実行は、実際のプログラム実行で呼び出されただけでもかまいません。
スタックエントリの数。番号 1 は常に最高 ( 最新) のスタックエントリです。また 1 より大きい番号は、スタック内の低い位置にあるエントリにアクセスします。
実行するスクリプト。ここでは変数名を入力して、その値を照会することができます。
EVALUATE_IN_STACK を使用して照会した命令の値。

report DEMO_JAVA_SCRIPT_STEP.
data SOURCE1 type
STRING.
data SOURCE2 type STRING.
data VALUE_GLOBAL type STRING.
data VALUE_LOCAL type STRING.
data JS_PROCESSOR type
ref to CL_JAVA_SCRIPT.
data STACK type JS_STACK_TABLE.
data STACK_ENTRY like
line of STACK.
data STACK_DEPTH type I.
JS_PROCESSOR = CL_JAVA_SCRIPT=>CREATE( ).
concatenate
'function
Set_String() ' "
1
'{ '
" 2
' var local =
""; '
" 3
' local += "
this"; '
" 4
' local += "
is"; '
" 5
' local += "
JavaScript"; ' " 6
' global = global + local; ' "
7
' global +=
"!";
' " 8
'} '
" 9
into SOURCE1 separated by
CL_ABAP_CHAR_UTILITIES=>CR_LF.
concatenate
'var global = "Hello World,"; ' " 1
'Set_String(); '
" 2
'string; '
" 3
into SOURCE2 separated by
CL_ABAP_CHAR_UTILITIES=>CR_LF.
JS_PROCESSOR->COMPILE(
SCRIPT_NAME = 'SOURCE1.JS'
SCRIPT = SOURCE1
).
JS_PROCESSOR->EXECUTE( exporting SCRIPT_NAME = 'SOURCE1.JS').
JS_PROCESSOR->COMPILE(
SCRIPT_NAME = 'SOURCE2.JS'
SCRIPT = SOURCE2
).
JS_PROCESSOR->SET_BREAKPOINT(
SCRIPT_NAME = 'SOURCE2.JS'
LINE_NUMBER = 1 ).
JS_PROCESSOR->EXECUTE( exporting SCRIPT_NAME = 'SOURCE2.JS').
if
JS_PROCESSOR->LAST_CONDITION_CODE =
CL_JAVA_SCRIPT=>CC_BREAKPOINT.
STACK = JS_PROCESSOR->GET_CALL_STACK( ).
STACK_DEPTH = LINES( STACK ).
endif.
while STACK_DEPTH > 0.
read table STACK into STACK_ENTRY index 1.
VALUE_GLOBAL
= JS_PROCESSOR->EVALUATE_IN_STACK(
STACK_ENTRY_NUMBER = 1 SCRIPT = 'global').
VALUE_LOCAL = JS_PROCESSOR->EVALUATE_IN_STACK(
STACK_ENTRY_NUMBER = 1 SCRIPT = 'local').
write: at /(3)
STACK_ENTRY-LINE_NUMBER,
at 10
STACK_ENTRY-SCRIPT_NAME,
at 25
STACK_ENTRY-FUNCTION_NAME,
at 40
VALUE_GLOBAL,
at 75
VALUE_LOCAL.
JS_PROCESSOR->STEP_INTO( ).
STACK =
JS_PROCESSOR->GET_CALL_STACK( ).
STACK_DEPTH = LINES( STACK ).
endwhile.
ここでは SOURCE1.JS と SOURCE2.JS という 2 つのスクリプトがコンパイルされます。SOURCE2.JS は、SOURCE1.JS の Set_String 関数を呼び出します。SOURCE1.JS がスタック内で有効であるため、コンパイル後に EXECUTE メソッドにより 1 回実行される必要があります。ブレークポイントが行 1 で設定された後に、EXECUTE メソッドはSOURCE1.JS をデバッグモードに切り替えます。現在のスタックが GET_CALL_STACK メソッドにより読み取られて、内部テーブルに格納されます。SOURCE1.JS と SOURCE2.JS の変数値が EVALUATE_IN_STACK メソッドにより読み取られます。値 1 はSTACK_ENTRY_NUMBER に転送されるので、ここではほとんどのローカルコンテキストは常に可視データと見なされます。対応するテーブルのスタック行は、変数に出力されます。スクリプト全体は、STEP_INTO メソッドにより、完了してスタックが空になるまで実行されます。