Как обновить поля Z с помощью BAPI_OUTB_DELIVERY_CHANGE, используя EXTENSION2 - PullRequest
0 голосов
/ 27 ноября 2018

Как обновить поля Z с помощью BAPI_OUTB_DELIVERY_CHANGE, используя EXTENSION2.

Я пытался обновить некоторые поля Z в таблице LIKP, используя BAPI для обновления доставок, но после вызова не было внесено никаких изменений.

Кто-нибудь знает об этом?

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Вам необходимо добавить BAPI_COMMIT после функционального модуля BAPI.

0 голосов
/ 08 декабря 2018

Я нашел BAdI - SMOD_V50B0001.Я сделал реализацию расширения и в методе EXIT_SAPLV50I_010 (пользовательский выход BAPI для изменений в исходящей доставке) установил следующий код.

METHOD if_ex_smod_v50b0001~exit_saplv50i_010.

CONSTANTS: lc_vbkok    TYPE char5  VALUE 'VBKOK',           "Enhance the structure for more z fields in LIKP
           lc_vbpok    TYPE char5  VALUE 'VBPOK',           "Enhance the structure for more z fields in LIPS
           lc_cs_vbkok TYPE char8  VALUE 'CS_VBKOK'.

DATA: lv_item TYPE posnr_vl.
FIELD-SYMBOLS: <lfs_fieldname> TYPE any.

LOOP AT extension2 INTO DATA(lw_extension2).

  CASE lw_extension2-param.
      "As a structure in row 0
    WHEN lc_vbkok. "Fields for LIKP
        ASSIGN (lc_cs_vbkok) TO FIELD-SYMBOL(<lfs_vbkok>).
        IF <lfs_vbkok> IS ASSIGNED.
          ASSIGN COMPONENT lw_extension2-field OF STRUCTURE <lfs_vbkok> TO <lfs_fieldname>.
          IF <lfs_fieldname> IS ASSIGNED.
            <lfs_fieldname> = lw_extension2-value.
          ENDIF.
        ENDIF.

      "As a table from row 1 to n
    WHEN lc_vbpok. "Fields for LIPS
        MOVE lw_extension2-row TO lv_item.
        READ TABLE ct_vbpok ASSIGNING FIELD-SYMBOL(<lfs_vbpok>) WITH KEY posnr_vl = lv_item.
        IF sy-subrc = 0.
          ASSIGN COMPONENT lw_extension2-field OF STRUCTURE <lfs_vbpok> TO <lfs_fieldname>.
          IF <lfs_fieldname> IS ASSIGNED.
            <lfs_fieldname> = lw_extension2-value.
          ENDIF.
        ENDIF.

  ENDCASE.

ENDLOOP.

ENDMETHOD.

Усовершенствуйте структуры VBKOK, а также LIKP со структурами appen, чтобы добавить новые поля z ​​иулучшить структуру VBPOK, а также LIPS для той же цели.

Также взгляните на программу LV50LF01 и потребуется реализация дополнительной точки улучшения для сохранения значений.

После этого подумайтечто я понял.

METHOD m_update_delivery.

DATA: lw_header_data    TYPE bapiobdlvhdrchg,
      lw_header_control TYPE bapiobdlvhdrctrlchg,
      lw_extension2     TYPE bapiext.

DATA: li_extension2 TYPE TABLE OF bapiext,
      li_return     TYPE TABLE OF bapiret2.

DATA: lv_delivery TYPE bapiobdlvhdrchg-deliv_numb.

lw_header_data-deliv_numb = p_w_output-delivery.
lw_header_control-deliv_numb = p_w_output-delivery.
lv_delivery = p_w_output-delivery.

lw_extension2-param = 'VBKOK'.
lw_extension2-field = 'ZZEXIDV'.

lw_extension2-value = p_w_output-value.
APPEND lw_extension2 TO li_extension2.

" Call BAPI to update delivery
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
  EXPORTING
    header_data    = lw_header_data
    header_control = lw_header_control
    delivery       = lv_delivery
  TABLES
    extension2     = li_extension2
    return         = li_return.

READ TABLE li_return INTO DATA(lw_return)
                     WITH KEY type = c_e.
IF sy-subrc <> 0.
  COMMIT WORK AND WAIT.
ENDIF.

ENDMETHOD.
...