09-11-2007 10:41 AM
Hi,
is it possible to call method provides in parameter to macro ?
From the call of my macro i provide object instancied and the name of my method. In my macro i wanted to do : CALL METHOD &1->&2 but it don't work.
I provided you my code which does not function :
REPORT z_erca_test.
----
CLASS lcl_ee_data DEFINITION
----
CLASS lcl_ee_data DEFINITION.
PUBLIC SECTION.
METHODS:
get_data_list,
get_data_list_suisse.
ENDCLASS. "lcl_ee_data DEFINITION
----
CLASS lcl_ee_data IMPLEMENTATION
----
CLASS lcl_ee_data IMPLEMENTATION.
METHOD get_data_list.
WRITE 'Default'.
ENDMETHOD. "get_data_list
METHOD get_data_list_suisse.
WRITE 'Suisse'.
ENDMETHOD. "get_data_list_suisse
ENDCLASS. "lcl_ee_data IMPLEMENTATION
*----
DEFINE MACRO
DEFINE launch.
data: l_method type string.
l_method = 'get_data_list'.
concatenate l_method &2 into l_method separated by '_'.
write l_method.
call method &1->&2.
END-OF-DEFINITION.
*----
START-OF-SELECTION.
DATA : l_ee TYPE REF TO lcl_ee_data.
CREATE OBJECT l_ee.
launch l_ee 'suisse'.
09-11-2007 10:57 AM
Hi,
partly...
From the ABAP documentation:
+Using the standard ABAP parenthesis semantics you can call methods dynamically.
· Calling an instance method meth:
CALL METHOD ref->(f)
· Calling a static method meth:
CALL METHOD class=>(f)
CALL METHOD (c)=>meth
CALL METHOD (c)=>(f)
· Calling a user-defined method meth:
CALL METHOD (f)
CALL METHOD ME->(f)
+
Regards,
Gianpietro
09-11-2007 10:57 AM
Hi,
partly...
From the ABAP documentation:
+Using the standard ABAP parenthesis semantics you can call methods dynamically.
· Calling an instance method meth:
CALL METHOD ref->(f)
· Calling a static method meth:
CALL METHOD class=>(f)
CALL METHOD (c)=>meth
CALL METHOD (c)=>(f)
· Calling a user-defined method meth:
CALL METHOD (f)
CALL METHOD ME->(f)
+
Regards,
Gianpietro
09-11-2007 11:12 AM
09-11-2007 12:10 PM
So it will work,
remark that uppercase ist necessary
define launchd.
data:
l_method type string.
l_method = 'GET_DATA_LIST'.
concatenate l_method &2 into l_method separated by '_'.
write l_method.
call method &1->(l_method).
end-of-definition.
and after
launchd l_ee 'SUISSE'.
Regards,
Gianpietro
09-11-2007 11:12 AM
Hi,
call method &1->&2.
This syntax is not possible - because the compiler wont know whether u r accessing public or private method. So when u ll actually call the macro .. it will give u a syntax error.
hope it helps.