Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Execute function module from Custom Table Value?

former_member194669
Active Contributor
0 Likes
1,409

Hi,

I have custom table with following field


FUNNAME        CHAR    1000

That contains records like the following


CALL FUNCTION 'ZMATF' EXPORTING MATNR = P_MATNR IMPORTING MATDESCRIPTION = V_MATERIALDESC.
CALL FUNCTION 'Y_CHECK_EXIT' EXPORTING USEREXIT = 'EFNDTAXWAR' IMPORTING EXECUTE  =  EXECUTE TABLES I_ZA01   =  I_ZA01.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING WAIT = 'X'.
CALL FUNCTION 'RS_TABLE_LIST_CREATE' EXPORTING TABLE_NAME = TABNAME.

My requirement is according some of the user conditions i need to select entry from this table and execute the corresponding function module

I tried to use GENERATE SUBROUTINE POOL itab NAME name. But this have limitation of 36 subroutine pools for one program.

Any info highly appreciated.

aRs

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
944

If you can put the name of the FM in a variable and the parameters and exceptions in separate internal tables, then you can call the function modules using the statement:

<b>call function NAME 
  parameter-table 
    PARA_TAB 
  exception-table 
    EXCP_TAB.</b>

See a small example:
Example
type pools ABAP. 

data NAME type STRING value `READ_SPFLI_INTO_TABLE`. 

data PARA_TAB type ABAP_FUNC_PARMBIND_TAB. 
data PARA_LINE like line of PARA_TAB. 

data EXCP_TAB type ABAP_FUNC_EXCPBIND_TAB. 
data EXCP_LINE like line of EXCP_TAB. 

data CARRIER type SPFLI-CARRID. 
data JTAB type SPFLI_TAB. 

CARRIER = 'XYZ'. 
PARA_LINE-NAME = 'ID'. 
PARA_LINE-KIND = ABAP_FUNC_EXPORTING. 
get reference of CARRIER into PARA_LINE-VALUE. 
append PARA_LINE to PARA_TAB. 

PARA_LINE-NAME = 'ITAB'. 
PARA_LINE-KIND = ABAP_FUNC_IMPORTING. 
get reference of JTAB into PARA_LINE-VALUE. 
append PARA_LINE to PARA_TAB. 

EXCP_LINE-NAME = 'NOT_FOUND'. 
EXCP_LINE-VALUE = 1. 
insert EXCP_LINE into table EXCP_TAB. 

EXCP_LINE-NAME = 'OTHERS'. 
EXCP_LINE-VALUE = 4. 
insert EXCP_LINE into table EXCP_TAB. 

call function NAME 
  parameter-table 
    PARA_TAB 
  exception-table 
    EXCP_TAB. 

case SY-SUBRC. 
  when 1. 
    message id SY-MSGID type SY-MSGTY number SY-MSGNO. 
  when 2. 
    message E888(SABAPDOCU) with 'Error in  function module'. 
endcase.

REgards,

Ravi

3 REPLIES 3
Read only

Former Member
0 Likes
944

Hi..

you can do like this..

get all the FM Names from Dbase and place in Itab where ur

itab is having FM name and Position.

now read the FM name u want...and find position from ITAB.

ur ITAB is

FM_NAME POSITION

Now using following stmt...u can assign number to the subroutine. write all the FMs in different subroutines...go through this...

<b>perform n OF subr1 subr2 ...</b>

n OF subr1 subr2 ...

This statement selects a subroutine subr in the same program from a list. The list subr1 subr2 ... can contain up to 256 subroutines specified directly. For n, you must specify a numeric data object that contains a number between 1 and the number of subroutines specified when executed. The system calls the subroutine subr, for which the list item i is contained in n. You cannot specify parameter_list for this variant and you can only call subroutines without a parameter interface.

Read only

former_member194669
Active Contributor
0 Likes
944

I could not able understand what your are suggesting. Can please explain little bit more on this?

aRs

Read only

Former Member
0 Likes
945

If you can put the name of the FM in a variable and the parameters and exceptions in separate internal tables, then you can call the function modules using the statement:

<b>call function NAME 
  parameter-table 
    PARA_TAB 
  exception-table 
    EXCP_TAB.</b>

See a small example:
Example
type pools ABAP. 

data NAME type STRING value `READ_SPFLI_INTO_TABLE`. 

data PARA_TAB type ABAP_FUNC_PARMBIND_TAB. 
data PARA_LINE like line of PARA_TAB. 

data EXCP_TAB type ABAP_FUNC_EXCPBIND_TAB. 
data EXCP_LINE like line of EXCP_TAB. 

data CARRIER type SPFLI-CARRID. 
data JTAB type SPFLI_TAB. 

CARRIER = 'XYZ'. 
PARA_LINE-NAME = 'ID'. 
PARA_LINE-KIND = ABAP_FUNC_EXPORTING. 
get reference of CARRIER into PARA_LINE-VALUE. 
append PARA_LINE to PARA_TAB. 

PARA_LINE-NAME = 'ITAB'. 
PARA_LINE-KIND = ABAP_FUNC_IMPORTING. 
get reference of JTAB into PARA_LINE-VALUE. 
append PARA_LINE to PARA_TAB. 

EXCP_LINE-NAME = 'NOT_FOUND'. 
EXCP_LINE-VALUE = 1. 
insert EXCP_LINE into table EXCP_TAB. 

EXCP_LINE-NAME = 'OTHERS'. 
EXCP_LINE-VALUE = 4. 
insert EXCP_LINE into table EXCP_TAB. 

call function NAME 
  parameter-table 
    PARA_TAB 
  exception-table 
    EXCP_TAB. 

case SY-SUBRC. 
  when 1. 
    message id SY-MSGID type SY-MSGTY number SY-MSGNO. 
  when 2. 
    message E888(SABAPDOCU) with 'Error in  function module'. 
endcase.

REgards,

Ravi