Abap 不使用命名参数调用动态方法
我动态调用一个类的方法,如下所示:Abap 不使用命名参数调用动态方法,abap,Abap,我动态调用一个类的方法,如下所示: CALL METHOD (gc_zcl_mapping_methods)=>(<ls_import_params>-attr_logic_method) EXPORTING iv_dats = <lv_value> RECEIVING rv_timestamp = <ls_import_params>-attr_value. 我的目标是省略参数名,是否有正确的语法?不幸的是,您必须为
CALL METHOD (gc_zcl_mapping_methods)=>(<ls_import_params>-attr_logic_method)
EXPORTING
iv_dats = <lv_value>
RECEIVING
rv_timestamp = <ls_import_params>-attr_value.
我的目标是省略参数名,是否有正确的语法?不幸的是,您必须为返回的参数和其他参数命名 完整的动态调用在下面的 对于示例代码,将给出以下代码:
DATA(ptab) = VALUE abap_parmbind_tab(
( name = 'IV_DATS'
kind = cl_abap_objectdescr=>exporting
value = REF #( <lv_value> ) )
( name = 'RV_TIMESTAMP'
kind = cl_abap_objectdescr=>receiving
value = REF #( <ls_import_params>-attr_value ) ) ).
DATA(etab) = VALUE abap_excpbind_tab( ).
CALL METHOD (gc_zcl_mapping_methods)=>(<ls_import_params>-attr_logic_method)
PARAMETER-TABLE ptab
EXCEPTION-TABLE etab.
动态版本(另外,接收参数在运行时动态确定,但通常不需要,因为其名称在编译时已知):
DATA(rtti_类)=CAST cl_abap_objectdescr(
cl\u abap\u typedescr=>通过名称(“\CLASS=”和&“cl\u abap\u语法\u消息”)描述。
数据(方法)=rtti_类->方法[名称='LONG_TEXT_EXISTS']。
数据(返回参数)=方法参数[parm\u kind=cl\u abap\u objectdescr=>返回]。
数据(返回参数名称)=返回参数名称。
断言返回_参数_name='P_RESULT'。“出口
value=REF#('E'))
(名称='P_编号'
种类=cl\u abap\u objectdescr=>导出
值=参考(1))
(名称='P_LTXTTAB'
种类=cl\u abap\u objectdescr=>导出
值=REF#(ltxttab))
(名称=返回参数名称
种类=cl\u abap\u objectdescr=>接收
value=REF#(result)))。
数据(etab)=值abap\U excpbind\U选项卡(
(名称='MESSAGE\u NOT\u FOUND'值=1))。
调用方法('CL\u ABAP\u语法\u消息')=>('LONG\u TEXT\u EXISTS')
参数表ptab
异常表etab。
为什么不创建所有可能的参数名并使其成为可选的?当然除了返回之外,返回是不可能的
DATA(ptab) = VALUE abap_parmbind_tab(
( name = 'IV_DATS'
kind = cl_abap_objectdescr=>exporting
value = REF #( <lv_value> ) )
( name = 'RV_TIMESTAMP'
kind = cl_abap_objectdescr=>receiving
value = REF #( <ls_import_params>-attr_value ) ) ).
DATA(etab) = VALUE abap_excpbind_tab( ).
CALL METHOD (gc_zcl_mapping_methods)=>(<ls_import_params>-attr_logic_method)
PARAMETER-TABLE ptab
EXCEPTION-TABLE etab.
DATA(rtti_class) = CAST cl_abap_objectdescr(
cl_abap_typedescr=>describe_by_name( '\CLASS=' && gc_zcl_mapping_methods ) ).
DATA(method) = rtti_class->methods[ name = <ls_import_params>-attr_logic_method ].
DATA(returning_parameter) = method-parameters[ parm_kind = cl_abap_objectdescr=>returning ].
DATA(returning_parameter_name) = returning_parameter-name.
DATA(result) = VALUE sychar01( ).
DATA(ltxttab) = VALUE rslinltab( ( kind = 'E' numb = 1 param = 'MSGID' value = 'MESSAGEGY9' )
( kind = 'E' numb = 1 param = 'PRAGMA' value = '##DUMMY' ) ).
cl_abap_syntax_message=>long_text_exists(
EXPORTING
p_kind = 'E'
p_number = 1
p_ltxttab = ltxttab
RECEIVING
p_result = result
EXCEPTIONS
message_not_found = 1 ).
DATA(rtti_class) = CAST cl_abap_objectdescr(
cl_abap_typedescr=>describe_by_name( '\CLASS=' && 'CL_ABAP_SYNTAX_MESSAGE' ) ).
DATA(method) = rtti_class->methods[ name = 'LONG_TEXT_EXISTS' ].
DATA(returning_parameter) = method-parameters[ parm_kind = cl_abap_objectdescr=>returning ].
DATA(returning_parameter_name) = returning_parameter-name.
ASSERT returning_parameter_name = 'P_RESULT'. " <=== just for the demo
DATA(ptab) = VALUE abap_parmbind_tab(
( name = 'P_KIND'
kind = cl_abap_objectdescr=>exporting
value = REF #( 'E' ) )
( name = 'P_NUMBER'
kind = cl_abap_objectdescr=>exporting
value = REF #( 1 ) )
( name = 'P_LTXTTAB'
kind = cl_abap_objectdescr=>exporting
value = REF #( ltxttab ) )
( name = returning_parameter_name
kind = cl_abap_objectdescr=>receiving
value = REF #( result ) ) ).
DATA(etab) = VALUE abap_excpbind_tab(
( name = 'MESSAGE_NOT_FOUND' value = 1 ) ).
CALL METHOD ('CL_ABAP_SYNTAX_MESSAGE')=>('LONG_TEXT_EXISTS')
PARAMETER-TABLE ptab
EXCEPTION-TABLE etab.