Bismillah
Here I share the example of BAPI_MATERIAL_SAVEDATA usage. I use it to update UoM
DATA:
ls_header TYPE bapimathead,
lt_uom TYPE STANDARD TABLE OF bapi_marm,
lt_uomx TYPE STANDARD TABLE OF bapi_marmx,
ls_return TYPE bapiret2.
SORT t_data BY matnr.
LOOP AT t_data INTO DATA(ls_data_grp) GROUP BY ls_data_grp-matnr.
ls_header-material = ls_data_grp-matnr.
LOOP AT GROUP ls_data_grp INTO DATA(ls_data).
APPEND INITIAL LINE TO lt_uom ASSIGNING FIELD-SYMBOL(<lfs_uom>).
APPEND INITIAL LINE TO lt_uomx ASSIGNING FIELD-SYMBOL(<lfs_uomx>).
<lfs_uom> = VALUE #(
alt_unit = ls_data-meinh
alt_unit_iso = ls_data-meinh
numerator = ls_data-umrez
denominatr = ls_data-umren
length = ls_data-length
width = ls_data-width
height = ls_data-height
unit_dim = ls_data-unit_dim
volume = ls_data-volume
volumeunit = ls_data-volumeunit
gross_wt = ls_data-gross_wt
unit_of_wt = ls_data-unit_of_wt
).
<lfs_uomx> = VALUE #(
alt_unit = 'X'
alt_unit_iso = 'X'
numerator = 'X'
denominatr = 'X'
length = 'X'
width = 'X'
height = 'X'
unit_dim = 'X'
volume = 'X'
volumeunit = 'X'
gross_wt = 'X'
unit_of_wt = 'X'
).
ENDLOOP.
CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
EXPORTING
headdata = ls_header
IMPORTING
return = ls_return
TABLES
unitsofmeasure = lt_uom
unitsofmeasurex = lt_uomx.
IF p_test EQ ''.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDIF.
ENDLOOP.