Skip to Content
0
Nov 10, 2014 at 05:24 PM

Badi on Customer master data - Set/get values in new dynpro

158 Views

Hi all!

i'm implementing a new sub-dynpro on Customer master data (XD...) using the BAdIs CUSTOMER_ADD_DATA_CS and CUSTOMER_ADD_DATA

i also created a new function group with its nice dynpro and i see all in my XD02 transaction.

Now, i've to implement the logic for SET and GET data in the custom dynpro.

For getting the data i'm using DYNP_VALUES_READ FM and it works great.

i implemented also SET method with DYNP_VALUES_UPDATE FM and, dumbly enough, i thought it would works. WRONG! Data are not displayed at all.

In a previous implementation i used some ZSET.. and ZGET... function in the same function group of our dynpro but since BAdI are Object Oriented i was trying to avoid it.

Any suggestion?

A snippet of my code

class ZCL_IM_ADD_DATA_CS (for badi CUSTOMER_ADD_DATA_CS)

Method GET_DATA (and it works)

DATA: lt_dynvals TYPE dynpread_tabtype,
ls_dynvals TYPE dynpread.
CLEAR: ls_dynvals, lt_dynvals[], e_value.
ls_dynvals-fieldname = 'KNVV-ZZCUST1'.
APPEND ls_dynvals TO lt_dynvals.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = 'SAPLZKNVV'
dynumb = '0900'
TABLES
dynpfields = lt_dynvals
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc <> 0.

ENDIF.
CLEAR ls_dynvals.
READ TABLE lt_dynvals INTO ls_dynvals WITH KEY fieldname = i_field.
IF sy-subrc = 0.

SHIFT ls_dynvals-fieldvalue LEFT DELETING LEADING space.
s_knvv-zzcust1 = ls_dynvals-fieldvalue
ENDIF.

Method SET_DATA (and NOT works)

DATA: lt_dynvals TYPE dynpread_tabtype,
ls_dynvals TYPE dynpread.
CLEAR: ls_dynvals, lt_dynvals[], e_value.
ls_dynvals-fieldname = 'KNVV-ZZCUST1'.

ls_dynvals-fieldvalue = s_knvv-zzcust1
APPEND ls_dynvals TO lt_dynvals.
CALL FUNCTION 'DYNP_VALUES_UPDATE'
EXPORTING
dyname = 'SAPLZKNVV'
dynumb = '0900'
TABLES
dynpfields = lt_dynvals
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
undefind_error = 7
OTHERS = 8.
IF sy-subrc <> 0.

ENDIF.

Any suggestion?