Skip to Content
0
Former Member
Jan 19, 2011 at 12:50 PM

RSU5_SAPI_BADI- cx_sy_dyn_call_illegal_type Exception

116 Views

HI,

I'm trying to enhance datasource with BADI

method IF_EX_RSU5_SAPI_BADI~DATA_TRANSFORM.

DATA: ls_oltpsource TYPE rsaot_s_osource,

lv_data TYPE REF TO data,

lv_method TYPE seocmpname.

FIELD-SYMBOLS: <lt_data> TYPE STANDARD TABLE.

  • check BW system

*check checkbw_system( ) = 'X'.

Case i_datasource.

When '0FI_GL_14'.

  • check if any data is extracted*

CHECK c_t_data IS NOT INITIAL.

CALL FUNCTION 'RSA1_SINGLE_OLTPSOURCE_GET'

EXPORTING

i_oltpsource = i_datasource

i_objvers = 'A'

IMPORTING

e_s_oltpsource = ls_oltpsource

EXCEPTIONS

no_authority = 1

not_exist = 2

inconsistent = 3

OTHERS = 4.

IF sy-subrc <> 0.

EXIT.

ENDIF.

  • create data for Extract Structure

CREATE DATA lv_data TYPE TABLE OF (ls_oltpsource-exstruct).

ASSIGN lv_data->* TO <lt_data>.

ASSIGN c_t_data TO <lt_data>.

  • get method name for datasource

lv_method = i_datasource.

IF lv_method(1) = '0' or

lv_method(1) = '2'.

  • shift by one character as methods can't start with a number

SHIFT lv_method.

ENDIF.

  • check method is implemented

  • check_method_exists( lv_method ) = 'X'.

try.

CALL METHOD (lv_method)

EXPORTING

i_datasource = i_datasource

i_updmode = i_updmode

i_t_select = i_t_select

i_t_fields = i_t_fields

CHANGING

c_t_data = <lt_data>

c_t_messages = c_t_messages.

CATCH cx_root.

endtry.

endcase.

endmethod.

When i'm trying to debug its throwing exception cx_sy_dyn_call_illegal_type.

Any idea?