Skip to Content
0
Jan 12, 2023 at 09:22 AM

Z-field was not updating using BAPI_MATERIAL_SAVEDATA in mara

107 Views Last edit Jan 12, 2023 at 09:38 AM 3 rev

I am using BAPI_MATERIAL_SAVEDATA to update the value of custom Z field in MARA table .

after executing the program the existing value of the Z field was erased but the new value is not updating.

REPORT  zr_mara_zdcon_update.

TYPES : BEGIN OF ts_input,
  matnr TYPE matnr,
  END OF ts_input.
DATA : lt_input TYPE TABLE OF ts_input WITH HEADER LINE.

SELECT SINGLE matnr FROM mara INTO lt_input
  WHERE zzcust = '30'.

PERFORM update_mara USING lt_input-matnr.
*ENDLOOP.
*&---------------------------------------------------------------------*
*&      Form  update_mara
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM update_mara USING lv_matnr TYPE matnr.

  TABLES:
        bapimathead, "Headerdata
        bapi_mara, "Clientdata
        bapi_marax, "Clientdatax
        bapi_marc, "Plantdata
        bapi_marcx, "Plantdatax
        bapi_makt, "Material description
        bapiparex, "Extensionstruktur
        bapiparexx,
        bapiret2. "Return messages

  DATA:
        bapi_te_mara TYPE bapi_te_mara,
        bapi_te_marax TYPE bapi_te_marax,
        v_file TYPE string.
*to store the output data
  DATA:BEGIN OF lt_material_number OCCURS 0.
          INCLUDE STRUCTURE bapimatinr.
  DATA:END OF lt_material_number.

  DATA:BEGIN OF lt_bapiparex OCCURS 0.
          INCLUDE STRUCTURE bapiparex.
  DATA:END OF lt_bapiparex.

  DATA:BEGIN OF lt_bapiparexx OCCURS 0.
          INCLUDE STRUCTURE bapiparexx.
  DATA:END OF lt_bapiparexx.

  DATA:BEGIN OF lt_return2 OCCURS 0.
          INCLUDE STRUCTURE bapiret2.
  DATA:END OF lt_return2.

  DATA:BEGIN OF lt_return OCCURS 0.
          INCLUDE STRUCTURE bapiret1.
  DATA:END OF lt_return.
  lt_material_number-material = lv_matnr.
  bapimathead-basic_view = 'X'.
*  bapimathead-sales_view = 'X'.
  bapimathead-material = lt_material_number-material.
  bapi_te_mara-material = lt_material_number-material.
  bapi_te_mara-zzcust = '25'.

  bapi_te_marax-material = lt_material_number-material.
  bapi_te_marax-zzcust = 'X'.

  lt_bapiparex-structure = 'BAPI_TE_MARA'.
  lt_bapiparex-valuepart1 = bapi_te_mara.
  lt_bapiparex-valuepart2 = bapi_te_mara.
  APPEND lt_bapiparex.

  lt_bapiparexx-structure = 'BAPI_TE_MARAX'.
  lt_bapiparexx-valuepart1 = bapi_te_marax.
*  lt_bapiparexx-valuepart2 = bapi_te_marax.
  APPEND lt_bapiparexx.

  CALL FUNCTION 'BAPI_MATERIAL_SAVEDATA'
    EXPORTING
      headdata            = bapimathead
      clientdata          = bapi_mara
      clientdatax         = bapi_marax
    IMPORTING
      return              = lt_return2
    TABLES
      extensionin         = lt_bapiparex
      extensioninx        = lt_bapiparexx.

  IF lt_return2-type CA 'EA'.
*--Roll Back changes
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE.
*--Commit
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait   = abap_true
      IMPORTING
        return = lt_return2.
  ENDIF.
  WRITE :'DONE'.
ENDFORM.                    "update_mara