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

Dynamic Function Module Calling - CX_SY_DYN_CALL_PARAM_MISSING Exception

Former Member
0 Likes
1,888

Hi there,

I'm trying to call dynamically a function module using the following statement:


  DATA: lt_parmbind         TYPE abap_func_parmbind_tab,
        lt_excbind          TYPE abap_func_excpbind_tab,
        ls_parmbind         TYPE abap_func_parmbind,
        ls_excbind          TYPE abap_func_excpbind.

.....

    CALL FUNCTION my_function_module_name
        PARAMETER-TABLE
          lt_parmbind
        EXCEPTION-TABLE
          lt_excbind.

I get the following error message:

Error analysis                                                                      
    An exception occurred that is explained in detail below.                        
    The exception, which is assigned to class 'CX_SY_DYN_CALL_PARAM_MISSING', was   
     not caught in                                                                  
    procedure "DEBUG_FM" "(METHOD)", nor was it propagated by a RAISING clause.     
    Since the caller of the procedure could not have anticipated that the           
    exception would occur, the current program is terminated.                       
    The reason for the exception is:                                                
    When calling the function module "/NYH/AGIB_BCA_GET_ACCOUNTS", one of the       
     parameters                                                                     
    needed according to the interface description was not specified.                                                                                
This parameter was "I_PARTNER".

But the table lt_parmbind does contain a structure with ls_parmbind-name = "I_PARTNER".

Someone has an idea about the problem?

Any help would be greatly appreciated, thank you.

9 REPLIES 9
Read only

former_member199581
Active Participant
0 Likes
1,372

I think you must check the value in lt_parmbind-value.

If the value is initial, then the reference is not catched in field and the system misses the parameter.

Hope this helps,

Roby.

Read only

0 Likes
1,372

Hi Roberto,

thank you for your quick answer.

Here are the values for the relevant row.

VALUE[Fref]: ->123240

TABLES_WA[Fref]:

KIND:20

NAME: I_PARTNER

Perhaps is the WA field? Do you have an idea on how to fill it?

Read only

0 Likes
1,372

The field VALUE must contains the reference to the data object, not the data object itself:

You must set the value like this:

GET REFERENCE OF <your_variable> INTO lt_parmbind-value.

The content from debugger must appear like this:

with a numeric value instead of "initial".

Let me know!

Read only

0 Likes
1,372

Hi Roberto,

I tried that sintax, and my understanding is that in the VALUE filed I have a reference to the actual parameter.

However in the debugger, before the statement

INSERT ls_parmbind INTO TABLE lt_parmbind.

the structure ls_parmbind has these values:

-


Component

Val.Ty.

Val.

Technical Type.

-


VALUE

-->

123240

REF TO \TYPE=BU_PARTNER

TABLES_WA

Fref.

KIND

20

I(4)

NAME

I_PARTNER

C(30)

-


Read only

0 Likes
1,372

And it still don't work I suppose...

I'll try and let you know

Read only

0 Likes
1,372

Exactly, I still get the same error.

Thank you for helping!

Read only

0 Likes
1,372

Sorry man, but I can't get the function module you're using in my system...

Could you please post the source code? I need to check it out to help you..

Read only

0 Likes
1,372

Hi Roberto,

here is the code of the method that dynamically calls the function module.

What happens is that I have the parameters name, value and type stored for each Function Module in the in the internal table mt_log_pd (these fields are string type).

I populate the table for the dynamic calling by looping at mt_log_pd: I guess that the problem is in the value assignment.

DATA: ls_log_pd           LIKE LINE OF mt_log_pd,
        lt_log_pd           LIKE mt_log_pd,
        lt_parmbind         TYPE abap_func_parmbind_tab,
        lt_excbind          TYPE abap_func_excpbind_tab,
        ls_parmbind         TYPE abap_func_parmbind,
        ls_excbind          TYPE abap_func_excpbind,
        lr_dyn_ref          TYPE REF TO data.

  FIELD-SYMBOLS: <l_fs_par_value> TYPE ANY.

*----------------------------------------------------------------------*
  "Populate the parameter tab
  LOOP AT mt_log_pd INTO ls_log_pd WHERE functmdl = i_functmdl.
    IF ls_log_pd-parent_field = 0 AND ls_log_pd-param_kind <> 2.
      "Name
      ls_parmbind-name  = ls_log_pd-param_name.
      "Kind
      CASE ls_log_pd-param_kind.
        WHEN 1. "Importing
          ls_parmbind-kind  = abap_func_importing.
        WHEN 2. "Exporting
          ls_parmbind-kind  = abap_func_exporting.
        WHEN 3. "Changing
          ls_parmbind-kind  = abap_func_changing.
        WHEN 4. "Tables
          ls_parmbind-kind  = abap_func_tables.
        WHEN OTHERS.
          "exception
      ENDCASE.
      "Value
      CREATE DATA lr_dyn_ref TYPE (ls_log_pd-param_ass_type).
      ASSIGN lr_dyn_ref->* TO <l_fs_par_value>.
      <l_fs_par_value> = ls_log_pd-param_value.
      GET REFERENCE OF <l_fs_par_value> INTO ls_parmbind-value.
      "GET REFERENCE OF <l_fs_par_value> INTO ls_parmbind-tables_wa.
      "ls_parmbind-value = lr_dyn_ref.
      INSERT ls_parmbind INTO TABLE lt_parmbind.
    ENDIF.
  ENDLOOP.

*----------------------------------------------------------------------*
  "Execute the Function Module
  CALL FUNCTION i_functmdl
    PARAMETER-TABLE
      lt_parmbind
    EXCEPTION-TABLE
      lt_excbind.

Read only

0 Likes
1,372

Just one thing that could help...

The field ls_parmbind-value is assigned to the reference of <l_fs_par_value>, that is assigned inside the loop cycle.

When the dynamic calling is performed, may be the case that elements of table lt_parmbind have references to variables that don't exist anymore.

Could this be the cause of the error message? If so, do you have any suggestion to solve the problem?