!--a11y-->
ƒIƒuƒWƒFƒNƒgŽQƂւ̃oƒCƒ“ƒh
(
ƒCƒ“ƒXƒ^ƒ“ƒX
) 
ABAP ƒIƒuƒWƒFƒNƒgŽQÆ‚Í JavaScript ‚Å‚ÍA’è‹`ς݃vƒƒLƒVƒNƒ‰ƒX SAPAbapOrefClass ‚̃vƒƒLƒVƒIƒuƒWƒFƒNƒg‚Æ‚µ‚ă}ƒbƒv‚³‚ê‚Ü‚·BJavaScript ŽQƂɂÍABIND ƒƒ\ƒbƒh‚Ì NAME_PROP ƒpƒ‰ƒ[ƒ^‚ðŽg—p‚µ‚Ä‘å•¶Žš¬•¶Žš‚ð‹æ•Ê‚·‚閼̂ðŽw’è‚Å‚«‚Ü‚·B
ƒvƒƒLƒVƒIƒuƒWƒFƒNƒg‚̃Rƒ“ƒ|[ƒlƒ“ƒg‚ðŽŸ‚ÉŽ¦‚µ‚Ü‚·B
· ’è‹`ς݃vƒƒpƒeƒB eClassf BƒvƒƒLƒVƒNƒ‰ƒX SAPAbapCrefClass ‚ÉŠî‚¢‚Ä‚¨‚èA–ÙŽ¦“I‚É‚»‚̃IƒuƒWƒFƒNƒgƒNƒ‰ƒX‚ɃoƒCƒ“ƒh‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚Ì‚½‚ßAƒNƒ‰ƒX‚ւ̃oƒCƒ“ƒh‚Åà–¾‚µ‚½‚悤‚ɃIƒuƒWƒFƒNƒg‚ÌÓIƒRƒ“ƒ|[ƒlƒ“ƒg‚ɃAƒNƒZƒX‚Å‚«‚Ü‚·B
· ƒvƒƒpƒeƒB‚Æ‚µ‚ÄŽQÆ‚³‚ꂽ ABAP ƒIƒuƒWƒFƒNƒg‚̃pƒuƒŠƒbƒNƒCƒ“ƒXƒ^ƒ“ƒX‘®« ( ¬•¶Žš) B
· ’è‹`ς݃ƒ\ƒbƒh einvokef BŽQÆ‚³‚ꂽ ABAP ƒIƒuƒWƒFƒNƒg‚̃pƒuƒŠƒbƒNƒCƒ“ƒXƒ^ƒ“ƒXƒƒ\ƒbƒh‚ðŒÄ‚Ño‚·‚±‚Æ‚ª‚Å‚«‚Ü‚·B
· “ü—̓pƒ‰ƒ[ƒ^‚ðŽ‚½‚¸˜_—’l‚ð•Ô‚·’è‹`ς݃ƒ\ƒbƒh enotInitialf BABAP ƒIƒuƒWƒFƒNƒgŽQÆ‚ªƒCƒ“ƒXƒ^ƒ“ƒX‚ðƒ|ƒCƒ“ƒg‚·‚éê‡A–ß‚è’l‚Í^‚Å‚·BABAP ƒIƒuƒWƒFƒNƒgŽQÆ‚ª‹ó”’‚Ìꇂ͋U‚Å‚·B
JavaScript “à‚Å‚ÍA‘¼‚̃vƒƒpƒeƒB‚Ü‚½‚̓ƒ\ƒbƒh‚ðƒvƒƒLƒVƒIƒuƒWƒFƒNƒg‚ɒljÁ‚Å‚«‚Ü‚¹‚ñBJavaScript ‚Ì’†‚ŃoƒCƒ“ƒh‚³‚ꂽƒIƒuƒWƒFƒNƒgŽQÆ‚É ABAP ƒIƒuƒWƒFƒNƒgŽQÆ‚ðŠ„‚è“–‚Ä‚éê‡A‚Ü‚½‚Í JavaScript ‚Ì’†‚Å‘¶Ý‚µ‚È‚¢ ABAP ƒIƒuƒWƒFƒNƒg‚Ì‘®«‚ɃAƒNƒZƒX‚µ‚悤‚Æ‚·‚éê‡ (ABAP ‚ÌŽQƕϔ‚ª‹ó”’) AJavaScript ‚͈—‚ð’âŽ~‚µ‚Ü‚·B
JavaScript ƒIƒuƒWƒFƒNƒg‚ð ABAP ‚̃IƒuƒWƒFƒNƒgŽQƕϔ‚ÉŠ„‚è“–‚Ä‚éê‡A‚Ü‚½ JavaScript ‚Í ABAP ƒIƒuƒWƒFƒNƒg‚Ì‘®«‚àŽg—p‚µ‚Ü‚·BŠ„“–Œã‚̃IƒuƒWƒFƒNƒgŽQƕϔ‚ÍAABAP ƒIƒuƒWƒFƒNƒg‚ðƒ|ƒCƒ“ƒg‚µ‚Ü‚·BJavaScript “à‚̕ϔ‚Í ABAP “à‚̃IƒuƒWƒFƒNƒgŽQƕϔ‚ɃoƒCƒ“ƒh‚³‚ê‚Ä‚¨‚èAABAP ƒIƒuƒWƒFƒNƒg‚ɃoƒCƒ“ƒh‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ ( ŽQÆ: BIND_INSTANCE) B
JavaScript ƒIƒuƒWƒFƒNƒg‚ÍAÓIƒ^ƒCƒv‚̃IƒuƒWƒFƒNƒgŽQƕϔ‚ÉƒŠƒ“ƒN‚³‚ê‚Ü‚·BABAP “à‚ł̊„“–‚ðŽg—p‚µ‚Äk¬ƒLƒƒƒXƒg‚ªŽÀs‚³‚ê‚éê‡AJavaScript ƒIƒuƒWƒFƒNƒg‚͓Ǝ©‚̃f[ƒ^Œ^‚ðˆÛŽ‚µ‚Ä‚¨‚èA“®“Iƒ^ƒCƒv‚̒ljÁ‚³‚ꂽ‘®«‚ɃAƒNƒZƒX‚Å‚«‚Ü‚¹‚ñB“¯—l‚ÉAŠg‘åƒLƒƒƒXƒg‚ðŽÀs‚µ‚Ä ABAP ‚Ì’†‚¾‚¯‚Ń`ƒFƒbƒN‚³‚¹‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±‚Ì‚½‚ß JavaScript ‚Å‚ÍAŽQÆ‚³‚ꂽƒIƒuƒWƒFƒNƒg‚Å‘¶Ý‚µ‚È‚¢‘®«‚ɃAƒNƒZƒX‚·‚邯‚¢‚Á‚½–â‘è‚Ͷ‚¶‚Ü‚¹‚ñB
JavaScript ‚Ì’†‚ŃoƒCƒ“ƒh‚³‚ꂽƒIƒuƒWƒFƒNƒgŽQƕϔ‚̃vƒƒpƒeƒB‚𑼂̕ϔ‚ÉŠ„‚è“–‚Ä‚éê‡A’ˆÓ‚µ‚Ä‚‚¾‚³‚¢BŠÖ˜A‚·‚éƒIƒuƒWƒFƒNƒg‚ª ABAP ‚Ì’†‚ŃK[ƒxƒbƒWƒRƒŒƒNƒ^‚É‚æ‚è휂³‚ê‚Ä‚©‚çA‘Îۂ̕ϔ‚ðŽg—p‚µ‚悤‚Æ‚·‚邯AŽÀsŽžƒGƒ‰[‚ª”¶‚µ‚Ü‚·B

report DEMO_JAVA_SCRIPT_BIND_ATTRIBUT.
class C1 definition.
public section.
data ATTR type STRING.
methods CONSTRUCTOR.
endclass.
class C1 implementation.
method CONSTRUCTOR.
ATTR = 'Hello '.
endmethod.
endclass.
data OREF type ref to C1.
data RETURN_VALUE type STRING.
data SOURCE type STRING.
data JS_PROCESSOR type ref to CL_JAVA_SCRIPT.
start-of-selection.
JS_PROCESSOR = CL_JAVA_SCRIPT=>CREATE( ).
JS_PROCESSOR->BIND( EXPORTING
NAME_OBJ =
'abap'
NAME_PROP
= 'Ref'
CHANGING
DATA = OREF ).
create object OREF.
concatenate 'if
( abap.Dref.notInitial() ) '
'{
abap.Ref.attr += " World!"; }'
INTO
source.
JS_PROCESSOR->EVALUATE( JAVA_SCRIPT = SOURCE
).
write OREF->ATTR..
‚±‚Ì—á‚Å‚ÍAJavaScript ‚Í‘®« OREF->ATTR ‚ð 'Hello' ‚©‚ç 'Hello World!' ‚É•ÏX‚µ‚Ü‚·BCREATE OBJECT ‚ÌŠ„“–‚Ì‘O‚É JavaScript ‚ª 'oref.attr' ‚ɃAƒNƒZƒX‚µ‚悤‚Æ‚·‚邯Aˆ—‚ÍI—¹‚µ‚Ü‚·B
ABAP “à‚ÌŽQƃIƒuƒWƒFƒNƒg‚̃pƒuƒŠƒbƒNƒCƒ“ƒXƒ^ƒ“ƒXƒƒ\ƒbƒh‚ð JavaScript ‚©‚çŒÄ‚Ño‚·‚É‚ÍAŠÖ˜A‚·‚é JavaScript ƒIƒuƒWƒFƒNƒg‚Ì einvokef ƒƒ\ƒbƒh‚ðŽg—p‚µ‚Ü‚·B
einvokef ƒƒ\ƒbƒh‚ÍAʼn‚̈ø”‚Æ‚µ‚Ä ABAP ƒCƒ“ƒXƒ^ƒ“ƒXƒƒ\ƒbƒh‚̬•¶Žš‚Ì–¼ÌA‚»‚ÌŒã‚Ƀpƒ‰ƒ[ƒ^‚ª“n‚³‚ê‚邯Šú‘Ò‚µ‚Ä‚¢‚Ü‚·BABAP ƒCƒ“ƒXƒ^ƒ“ƒXƒƒ\ƒbƒh‚̃IƒvƒVƒ‡ƒ“‚łȂ¢ƒCƒ“ƒ^ƒtƒF[ƒXƒpƒ‰ƒ[ƒ^‚Ì‚»‚ꂼ‚ê‚ɂ‚¢‚ÄAƒpƒ‰ƒ[ƒ^–¼‚¨‚æ‚ÑŽÀۂ̃pƒ‰ƒ[ƒ^‚ðƒRƒ“ƒ}‚Å‹æØ‚Á‚½ƒyƒA‚ÅŽw’è‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ç‚̃yƒA‚Í”CˆÓ‚̇˜‚ÅŽw’è‚Å‚«‚Ü‚·BƒIƒvƒVƒ‡ƒ“‚̃pƒ‰ƒ[ƒ^A‚Ü‚½‚Í’Êí‚Ì ABAP ‚̒ljÁ EXPORTING AIMPORTING ACHANGING ARETURNING ‚ðŽw’è‚·‚é•K—v‚Í‚ ‚è‚Ü‚¹‚ñB
· ŒÄ‚Ño‚³‚ꂽ ABAP ƒƒ\ƒbƒh‚̃Cƒ“ƒ^ƒtƒF[ƒX‚Ì’†‚Å“n‚³‚ꂽ‘Sƒpƒ‰ƒ[ƒ^‚ÍA–¼Ì‚ð’Zk‚µ‚È‚¢‚ÅŽw’è‚·‚é•K—v‚ª‚ ‚è‚Ü‚·BANY ‚Ü‚½‚Í STANDARD TABLE ‚Ȃǂ̔ėpƒ^ƒCƒv‚ÍŽg—p‚Å‚«‚Ü‚¹‚ñB
· ŒÄ‚Ño‚³‚ꂽƒƒ\ƒbƒh‚ÍAƒoƒbƒNƒOƒ‰ƒEƒ“ƒhˆ—‚ª—LŒø‚Å‚ ‚é•K—v‚ª‚ ‚è‚Ü‚·B‚‚܂èAƒ†[ƒU‚Ƃ̃Cƒ“ƒ^ƒ‰ƒNƒVƒ‡ƒ“‚ð—\‘z‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B
· ŒÄ‚Ño‚³‚ꂽƒƒ\ƒbƒh‚ÍAÅ‘å‚Å 32 ŒÂ‚̃pƒ‰ƒ[ƒ^‚ðŽó‚¯•t‚¯‚Å‚«‚Ü‚·B‚±‚ê‚Íeinvokef ƒƒ\ƒbƒh‚Ì 65 ŒÂ‚̈ø”‚ɑΉž‚µ‚Ä‚¢‚Ü‚·B
· ƒƒ\ƒbƒhŒÄ‚Ño‚µ‚̓VƒXƒeƒ€ƒtƒB[ƒ‹ƒh SY-SUBRC ASY-MSGV1 to SY-MSGV4 ‚É”½‰f‚³‚ê‚é‚Ì‚ÅAƒƒ\ƒbƒhŽ©g‚Ì’†‚Å‚±‚ê‚ç‚̃tƒB[ƒ‹ƒh‚ɃAƒNƒZƒX‚µ‚½‚èAƒXƒNƒŠƒvƒg‚ÌŽÀsŒã‚ɃAƒNƒZƒX‚µ‚Ä‚àˆÓ–¡‚Í‚ ‚è‚Ü‚¹‚ñB
· ƒƒ\ƒbƒh‚̃Cƒ“ƒ^ƒtƒF[ƒX‚Å RAISING ‚ðŽg—p‚µ‚Ä“`’B‚³‚ꂽƒNƒ‰ƒXƒx[ƒX‚Ì—áŠO‚Í JavaScript ‚ł͈—‚Å‚«‚¸AƒXƒNƒŠƒvƒg‚ðI—¹‚³‚¹‚Ü‚·B‚½‚¾‚µA‚±‚ê‚ç‚Í ABAP ‚Ì’†‚Ì TRY ƒuƒƒbƒN‚ł͈—‚Å‚«‚Ü‚·BJavaScript ‚Å‚ÍA•W€“I—áŠO‚ðˆ—‚Å‚«‚Ü‚·B
einvokef ‚Ì–ß‚è’l‚ÍAŒÄ‚Ño‚³‚ꂽƒƒ\ƒbƒh‚Ì RETURNING ƒpƒ‰ƒ[ƒ^‚ÅŽ©“®“I‚É“ü—Í‚³‚ê‚Ü‚·BRETURNING ƒpƒ‰ƒ[ƒ^‚̃^ƒCƒv‚ªŠî–{ƒf[ƒ^Œ^‚Ìê‡A‚±‚ꂪ ABAP ƒƒ\ƒbƒh‚ÌŽÀÛ‚Ì–ß‚è’l‚ɂȂè‚Ü‚·B‚µ‚½‚ª‚Á‚Ä‚±‚Ìê‡A•K‚¸‚µ‚à RETURNING ƒpƒ‰ƒ[ƒ^‚̈ø”‚ðŽw’è‚·‚é•K—v‚Í‚ ‚è‚Ü‚¹‚ñBRETURNING ƒpƒ‰ƒ[ƒ^‚̃^ƒCƒv‚ª•¡‡ƒf[ƒ^Œ^‚©ARETURNING ƒpƒ‰ƒ[ƒ^‚ª‚È‚¢ê‡A'invoke' ‚Ì–ß‚è’l‚Í jsval_void ‚Éݒ肳‚ê‚Ü‚·B‚»‚Ì‚½‚ß•¡‡ RETURNING ƒpƒ‰ƒ[ƒ^‚ðŽw’è‚·‚éꇂÍAˆø”‚ðŽw’è‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B

report DEMO_JAVA_SCRIPT_BIND_METH_RET.
class COUNTER definition.
public section.
methods: SET importing VALUE(SET_VALUE) type
I,
INCREMENT,
GET
returning VALUE(GET_VALUE) type I.
private section.
data COUNT type I.
endclass.
class COUNTER implementation.
method SET.
COUNT = SET_VALUE.
endmethod.
method INCREMENT.
COUNT = COUNT + 1.
endmethod.
method GET.
GET_VALUE = COUNT.
endmethod.
endclass.
data OREF type ref to COUNTER.
data RESULT type I.
data SOURCE type STRING.
data JS_PROCESSOR type ref to CL_JAVA_SCRIPT.
data GET_VALUE type STRING.
start-of-selection.
JS_PROCESSOR = CL_JAVA_SCRIPT=>CREATE( ).
JS_PROCESSOR->BIND( exporting
NAME_OBJ = 'abap'
NAME_PROP
= 'Ref'
changing DATA =
OREF ).
create object OREF.
concatenate
'var start_value = 10;
'
'var result = 0;
'
'abap.Ref.invoke("set", "set_value", start_value
); '
'for (var i = 0; i < 5;
i++) '
' { '
' abap.Ref.invoke("increment"); '
' } '
'result=abap.Ref.invoke("get" ); '
* 'result=abap.Ref.invoke("get", "get_value", result
); '
into SOURCE separated by
CL_ABAP_CHAR_UTILITIES=>CR_LF.
JS_PROCESSOR->COMPILE(
exporting
SCRIPT_NAME
= 'COUNT.JS'
SCRIPT =
SOURCE ).
JS_PROCESSOR->EXECUTE(
exporting
SCRIPT_NAME = 'COUNT.JS').
GET_VALUE = JS_PROCESSOR->GET( NAME = 'result').
RESULT = OREF->GET( ).
write / GET_VALUE.
write / RESULT.
‚±‚Ì—á‚Å‚ÍAƒ[ƒJƒ‹ƒNƒ‰ƒX COUNTER ‚ÌABAP ƒIƒuƒWƒFƒNƒg‚ÍAJavaScript ƒIƒuƒWƒFƒNƒg abap.Ref ‚É OREF ŽQƕϔ‚ðŽg—p‚µ‚ăoƒCƒ“ƒh‚³‚ê‚Ü‚·BJavaScript ‚Í ABAP ƒƒ\ƒbƒh SET AINCREMENT (5 ‰ñ) A‚¨‚æ‚Ñ GET ‚ð einvokef ƒƒ\ƒbƒh‚ðŽg—p‚µ‚ČĂÑo‚µ‚Ü‚·BABAP ‚Ì GET ƒƒ\ƒbƒh‚ðŒÄ‚Ño‚·ê‡ARESULTING ƒpƒ‰ƒ[ƒ^ GET_VALUE ‚̓Oƒ[ƒoƒ‹•Ï”Œ‹‰Ê‚É–ß‚è’l‚Æ‚µ‚Ä“n‚³‚ê‚Ü‚·Bˆø”‚ðŽw’è‚·‚éƒRƒƒ“ƒg‚³‚ꂽs‚àA“¯ˆê‚ÌŒø‰Ê‚Å‚·B‚½‚¾‚µAABAP ƒƒ\ƒbƒh‚Ì RETURNING ƒpƒ‰ƒ[ƒ^‚Ì‚½‚ßAˆø”ƒŠƒXƒg‚Í—]•ª‚Å‚·B
result ‚Í JavaScript ƒRƒ“ƒeƒLƒXƒg‚©‚ç“ǂݎæ‚ç‚ê‚ÄAABAP •Ï” GET_VALUE ‚ɃNƒ‰ƒX CL_JAVA_SCRIPT ‚Ì GET ƒƒ\ƒbƒh‚ðŽg—p‚µ‚Ä“n‚³‚ê‚Ü‚·B‚³‚ç‚ÉAƒvƒƒOƒ‰ƒ€‚Í ABAP ‚Ì’†‚Å ABAP ƒƒ\ƒbƒh GET ‚ðŒÄ‚Ño‚µ‚Ä ABAP •Ï” RESULT ‚É“ü—Í‚µ‚Ü‚·BJavaScript ‚ÌŒ‹‰Ê‚Ì’l‚Æ ABAP ‚Ì RESULT ‚Í“¯ˆê‚Å‚·B
Šî–{ RETURNING ƒpƒ‰ƒ[ƒ^ˆÈŠO‚̃pƒ‰ƒ[ƒ^A‚‚܂蕡‡ RETURNING ƒpƒ‰ƒ[ƒ^‚Ü‚½‚Í IMPORTING EXPORTING ƒpƒ‰ƒ[ƒ^ACHANGING ƒpƒ‰ƒ[ƒ^‚ðŽó‚¯“n‚µ‚·‚éê‡A“K؂Ȉø”‚ðŽw’è‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B
Note:
· ŽÀۂ̃pƒ‰ƒ[ƒ^‚¨‚æ‚ÑŒ`Ž®“Iƒpƒ‰ƒ[ƒ^‚̃^ƒCƒv‚ÍAŒÝŠ·«‚ª‚ ‚é•K—v‚ª‚ ‚è‚Ü‚·B
· ”’lAƒŠƒeƒ‰ƒ‹ ( •¶Žš—ñ) A‚Ü‚½‚Í’Pƒ‚È”’l‚©•¶Žš—ñ‚̊܂܂ê‚Ä‚¢‚é JavaScript •Ï”‚ðŽÀۂ̃pƒ‰ƒ[ƒ^‚Æ‚µ‚ÄŽw’è‚·‚éê‡A‚»‚ê‚Í’l‚Å“n‚³‚ê‚ÄA’蔂̂悤‚Ɉµ‚í‚ê‚Ü‚·B‚±‚ê‚ç‚̃pƒ‰ƒ[ƒ^‚ÍAABAP ƒƒ\ƒbƒh‚Ì EXPORTING ACHANGING ARETURNING ƒpƒ‰ƒ[ƒ^‚ɉe‹¿‚³‚ê‚Ü‚¹‚ñB‚±‚ê‚ÍAJavaScript ‚©‚ç‚Ì ABAP ƒƒ\ƒbƒhŒÄ‚Ño‚µ‚Ì“Á«‚ł͂ ‚è‚Ü‚¹‚ñB‚±‚ê‚͂܂½AJavaScript ŠÖ”‚̌ĂÑo‚µ‚É‚à“K—p‚³‚ê‚Ü‚· ( Œãq‚Ì—áDEMO_JAVA_SCRIPT_BIND_METH_VAL ‚ðŽQÆ) BABAP •Ï”‚ª’Pƒ‚È’l‚ðŽ‚Â JavaScript •Ï”‚ɃoƒCƒ“ƒh‚³‚ê‚Ä‚¢‚邯A“¯‚¶‚±‚Æ‚ª“K—p‚³‚ê‚Ü‚·B
·
JavaScript
•Ï”‚ÉŽQƂɂæ‚è’l‚ð“n‚·‚É‚ÍA•¡‡ JavaScript
•Ï”A‚‚܂èƒNƒ‰ƒXƒvƒƒpƒeƒB‚ðŽg—p‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B
CL_JAVA_SCRIPT
ƒNƒ‰ƒX‚É‚æ‚è쬂³‚ꂽƒRƒ“ƒeƒLƒXƒg‚É‚ÍA’è‹`ς݃Nƒ‰ƒX
SAPAbapMethParam
‚ª‚ ‚è‚Ü‚·B‚±‚Ì‚½‚ßA‚±‚ê‚ɂͳŠm‚É 1
‚‚̊î–{‘®« (
•¶Žš—ñƒ^ƒCƒv)
‚ª‚ ‚è‚Ü‚·B‚±‚Ì‘®«‚̂ǂê‚àŒÄ‚Ño‚µ‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·‚ªA–¼‘O evaluef
‚ð‚¨§‚ß‚µ‚Ü‚·B‚±‚̃Nƒ‰ƒX‚̃IƒuƒWƒFƒNƒg‚Ì쬌ã‚ÍAŠî–{’l‚ð“n‚·‚½‚߂ɂ»‚Ì’Pˆê‘®«‚ðŽg—p‚Å‚«‚Ü‚·(DEMO_JAVA_SCRIPT_BIND_METH_REF
‚Ì—á‚ðŽQÆ)
B‚±‚ÌŽg—p‚Í ABAP
ƒƒ\ƒbƒhŒÄ‚Ño‚µ‚ɧŒÀ‚³‚ê‚Ü‚¹‚ñBJavaScript
‹@”\‚É‚à“K—p‚Å‚«‚Ü‚· (
—áDEMO_JAVA_SCRIPT_BIND_METH_VAL
‚ðŽQÆ)
B
‚Ü‚½ŽQÆ‚ð“n‚·‚½‚ßAƒoƒCƒ“ƒh‚³‚ꂽ•¡‡ ABAP
ƒf[ƒ^ƒIƒuƒWƒFƒNƒg‚ÌJavaScript
“™‰¿‚̃vƒƒpƒeƒB‚ðŽg—p‚Å‚«‚Ü‚·B‚±‚Ìê‡A’l‚ð“n‚·Û‚Ƀ^ƒCƒv‚Ɍ݊·«‚ª‚ ‚邱‚Æ‚ð‚Ó‚½‚½‚ÑŠm”F‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B

report DEMO_JAVA_SCRIPT_BIND_METH_VAL.
class C_ABAP definition.
public section.
methods SET_VALUE exporting P_ABAP type I.
endclass.
class C_ABAP implementation.
method SET_VALUE.
P_ABAP = 111.
endmethod.
endclass.
data OREF type ref to C_ABAP.
data RESULT type I.
data SOURCE type STRING.
data JS_PROCESSOR type ref to CL_JAVA_SCRIPT.
data GET_VALUE type STRING.
start-of-selection.
JS_PROCESSOR = CL_JAVA_SCRIPT=>CREATE( ).
JS_PROCESSOR->BIND( exporting
NAME_OBJ = 'abap'
NAME_PROP
= 'Ref'
changing DATA =
OREF ).
create object OREF.
concatenate
'var
result_abap_val = 0; '
'var
result_js_val = 0; '
'var result_abap_ref = new
SAPAbapMethParam(0); '
'var result_js_ref = new
SAPAbapMethParam(0); '
'var result_abap_ref_prop =
0 '
'var result_js_ref_prop =
0 '
'function set_value_val(p_js) { p_js = 666
}; '
'function set_value_ref(p_js) { p_js.value = 666
}; '
'abap.Ref.invoke("set_value", "p_abap", result_abap_val
);'
'set_value_val(result_js_val); '
'abap.Ref.invoke("set_value", "p_abap", result_abap_ref
);'
'set_value_ref(result_js_ref); '
'result_abap_ref_prop =
result_abap_ref.value; '
'result_js_ref_prop =
result_js_ref.value; '
into SOURCE separated by
CL_ABAP_CHAR_UTILITIES=>CR_LF.
JS_PROCESSOR->COMPILE(
exporting
SCRIPT_NAME
= 'VALUES.JS'
SCRIPT =
SOURCE ).
JS_PROCESSOR->EXECUTE(
exporting
SCRIPT_NAME = 'VALUES.JS').
GET_VALUE = JS_PROCESSOR->GET( NAME =
'result_abap_val').
write: / 'result_abap_val' , 40
GET_VALUE.
GET_VALUE = JS_PROCESSOR->GET( NAME =
'result_js_val').
write: / 'result_js_val' , 40
GET_VALUE.
GET_VALUE = JS_PROCESSOR->GET(
NAME
= 'result_abap_ref_prop').
write: / 'result_abap_ref.value' , 40
GET_VALUE.
GET_VALUE = JS_PROCESSOR->GET(
NAME
= 'result_js_ref_prop').
write: / 'result_js_ref.value' , 40
GET_VALUE.
‚±‚Ì—á‚Å‚ÍAƒ[ƒJƒ‹ƒNƒ‰ƒX C_ABAP ‚ÌABAP ƒIƒuƒWƒFƒNƒg‚ÍAJavaScript ƒIƒuƒWƒFƒNƒg abap.Ref ‚É OREF ŽQƕϔ‚ðŽg—p‚µ‚ăoƒCƒ“ƒh‚³‚ê‚Ü‚·BJavaScript ‚Å‚ÍAresult_abap_val ‚Æ js_abap_val ‚Æ‚¢‚¤ 2 ŒÂ‚Ì’Pƒ•Ï”‚ª’è‹`‚³‚ê‚Ä‚¨‚èA“¯Žž‚ɃNƒ‰ƒXSAPAbapMethParam ‚Ì 2 ŒÂ‚̃IƒuƒWƒFƒNƒgresult_abap_ref ‚Æ result_js_ref ‚ª’è‹`‚³‚ê‚Ä‚¢‚Ü‚·B‚³‚ç‚ÉAset_value_val ‚Æ set_value_ref ‚Æ‚¢‚¤ 2 ŒÂ‚Ì JavaScript ŠÖ”‚à’è‹`‚³‚ê‚Ä‚¢‚Ü‚·B
ABAP ƒƒ\ƒbƒh SET_VALUE ‚¨‚æ‚Ñ JavaScript ŠÖ”‚ÍA•ʂ̈ø”‚ð•t‚¯‚ČĂÑo‚³‚ê‚Ü‚·Bˆø”‚É“n‚³‚ꂽ’l‚ÍAABAP ƒvƒƒOƒ‰ƒ€‚Ì GET ƒƒ\ƒbƒh‚ðŽg—p‚µ‚ă`ƒFƒbƒN‚³‚ê‚Ü‚·BGET ‚̓IƒuƒWƒFƒNƒg‚Ì‘®«‚ɃAƒNƒZƒX‚Å‚«‚È‚¢‚½‚ßASAPAbapMethParam ƒNƒ‰ƒX‚̃IƒuƒWƒFƒNƒg‚Ì evaluef ƒvƒƒpƒeƒB‚ÍA•â••Ï”‚ÉŠ„‚è“–‚Ä‚ç‚ê‚Ü‚·B
ƒvƒƒOƒ‰ƒ€‚ÍAresult_abap_val ‚Æ js_abap_val ‚ªƒƒ\ƒbƒh‚Ü‚½‚ÍŠÖ”‚̌ĂÑo‚µ‚ɉe‹¿‚³‚ê‚È‚¢‚±‚Æ‚ðŽ¦‚µ‚Ä‚¨‚èASAPAbapMethParam ƒNƒ‰ƒX‚Ì evaluee ‘®«‚É’l‚ð“n‚·‚Ì‚ª‰Â”\‚È‚±‚Æ‚ðŽ¦‚µ‚Ü‚·B
ƒƒ\ƒbƒh’è‹`‚Å EXCEPTIONS ‚ðŽg—p‚µ‚Ä錾‚³‚êAJavaScript ‚Å RAISE ‚ðŽg—p‚µ‚ăƒ\ƒbƒh“à‚ňø‚«‹N‚±‚³‚ꂽ•W€“I—áŠO‚ðˆ—‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚»‚̂Ƃ«JavaScript ‚ÍI—¹‚µ‚Ü‚¹‚ñB‚±‚Ì•û–@‚Å—áŠO‚ðˆ—‚·‚邽‚ßAƒIƒvƒVƒ‡ƒ“‚̃pƒ‰ƒ[ƒ^EXCEPTION ( ‘å•¶Žš‚É‚µ‚Ĉø—p•„‚ň͂Þ) ‚ÆŽÀۂ̃pƒ‰ƒ[ƒ^‚ðŽw’è‚·‚é•K—v‚ª‚ ‚è‚Ü‚·B‚±‚ê‚ÍA’è‹`ς݃Nƒ‰ƒXSAPAbapMethParam ‚̃Cƒ“ƒXƒ^ƒ“ƒX‚Å‚·B

report DEMO_JAVA_SCRIPT_BIND_METH_EXC.
class C1 definition.
public section.
methods TEST exceptions EXC.
endclass.
class C1 implementation.
method TEST.
raise exc.
endmethod.
endclass.
data OREF type ref to C1.
data SOURCE type STRING.
data JS_PROCESSOR type ref to CL_JAVA_SCRIPT.
data RESULT type STRING.
start-of-selection.
JS_PROCESSOR = CL_JAVA_SCRIPT=>CREATE( ).
JS_PROCESSOR->BIND( exporting
NAME_OBJ = 'abap'
NAME_PROP
= 'Ref'
changing DATA =
OREF ).
create object OREF.
concatenate
'var except = new
SAPAbapMethParam(); '
'abap.Ref.invoke("test", "EXCEPTION", except );'
'except.value; '
into SOURCE separated by
CL_ABAP_CHAR_UTILITIES=>CR_LF.
JS_PROCESSOR->COMPILE(
exporting
SCRIPT_NAME
= 'TEST.JS'
SCRIPT =
SOURCE ).
RESULT = JS_PROCESSOR->EXECUTE('TEST.JS').
write / result.
‚±‚Ì—á‚Å‚ÍAƒ[ƒJƒ‹ƒNƒ‰ƒX C1 ‚ÌABAP ƒIƒuƒWƒFƒNƒg‚ÍAJavaScript ƒIƒuƒWƒFƒNƒg abap.Ref ‚É OREF ŽQƕϔ‚ðŽg—p‚µ‚ăoƒCƒ“ƒh‚³‚ê‚Ü‚·BJavaScript ‚Å‚ÍAƒNƒ‰ƒX SAPAbapMethParam ‚̃IƒuƒWƒFƒNƒg eexceptf ‚ª’è‹`‚³‚ê‚Ä‚¢‚Ü‚·B
ABAP ƒƒ\ƒbƒh‚Ì TEST ‚Í JavaScript ‚Ì’†‚ŌĂÑo‚³‚êA—áŠO EXC ‚ªˆ—‚³‚ê‚Ü‚·Bƒƒ\ƒbƒhŒÄ‚Ño‚µ‚ÌŒãAexcept.value ƒvƒƒpƒeƒB‚Í EXC ‚Ì’l‚ɂȂè‚Ü‚·B
ƒƒ\ƒbƒh’è‹`‚Å RAISING ‚ðŽg—p‚µ‚Ä錾‚³‚êAJavaScript ‚Å RAISE EXCEPTION ‚ðŽg—p‚µ‚ăƒ\ƒbƒh“à‚ňø‚«‹N‚±‚³‚ꂽƒNƒ‰ƒXƒx[ƒX‚Ì—áŠO‚͈—‚Å‚«‚Ü‚¹‚ñB‚»‚ê‚ÍALAST_CONDITION_CODE ‚¨‚æ‚Ñ LAST_ERROR_MESSAGE ‘®«‚É’l‚ð“ü—Í‚µ‚È‚¢‚Å JavaScript ‚ðI—¹‚³‚¹‚Ü‚·B‘ã‚í‚è‚ÉAƒXƒNƒŠƒvƒg‚ð TRY ƒuƒƒbƒN‚ÅŽÀs‚·‚邱‚Æ‚ÅACATCH ‚ðŽg—p‚µ‚Ä—áŠO‚ðˆ—‚Å‚«‚Ü‚·B

report DEMO_JAVA_SCRIPT_BIND_METH_CX.
class C1 definition.
public section.
data ATTR type
STRING.
methods TEST raising CX_SY_ZERODIVIDE.
endclass.
class C1 implementation.
method TEST.
raise exception type
CX_SY_ZERODIVIDE.
ATTR = 'Hello World!'.
endmethod.
endclass.
data OREF type ref to C1.
data SOURCE type STRING.
data JS_PROCESSOR type ref to CL_JAVA_SCRIPT.
data RESULT type STRING.
data EXCREF type ref to CX_ROOT.
data TEXT type STRING.
start-of-selection.
JS_PROCESSOR = CL_JAVA_SCRIPT=>CREATE( ).
JS_PROCESSOR->BIND( exporting
NAME_OBJ = 'abap'
NAME_PROP
= 'Ref'
changing DATA =
OREF ).
create object OREF.
concatenate
'abap.Ref.invoke("test");'
'abap.Ref.attr; '
into SOURCE separated by
CL_ABAP_CHAR_UTILITIES=>CR_LF.
JS_PROCESSOR->COMPILE(
exporting
SCRIPT_NAME
= 'TEST.JS'
SCRIPT =
SOURCE ).
try.
RESULT = JS_PROCESSOR->EXECUTE('TEST.JS').
write /
JS_PROCESSOR->LAST_ERROR_MESSAGE.
write / RESULT.
catch CX_ROOT into EXCREF.
TEXT = EXCREF->GET_TEXT( ).
message TEXT type 'I'.
endtry.
—áŠO‚ª”¶‚·‚邯 JavaScript ‚ÍI—¹‚µA—áŠO‚Í CATCH ƒuƒƒbƒN“à‚ň—‚³‚ê‚Ü‚·B