1. 程式人生 > 其它 >摘抄——使用bapi[BAPI_SALESORDER_CHANGE]修改add-on欄位

摘抄——使用bapi[BAPI_SALESORDER_CHANGE]修改add-on欄位

要將增強欄位一併append到如下四個表/結構中:

如果增強欄位在銷售訂單抬頭(vbak)上

  • VBAKKOZ
  • VBAKKOZX
  • BAPE_VBAK
  • BAPE_VBAKX

在行專案(vbap)上:

  • VBAPKOZ
  • VBAPKOZX
  • BAPE_VBAP
  • BAPE_VBAPX

在運貨計劃行(VBEP)上:

  • VBEPKOZ
  • BEPKOZX
  • BAPE_VBEP
  • BAPE_VBEPX

11-08今天做了一個測試,實際操作了一下append進去ABAP中,然後通過BAPI去修改欄位

TABLE VBAP

STR BVPE_VBAP

STR BVPE_VBAPX

STR VBAPKOZ

STR VBAPKOZX

程式碼如下

DATA:
  LV_SALESDOCUMENT    TYPE BAPIVBELN-VBELN,
  LW_ORDER_HEADER_IN  TYPE BAPISDH1,
  LW_ORDER_HEADER_INX TYPE BAPISDH1X,
  LIT_ORDER_ITEM_IN   TYPE STANDARD TABLE OF BAPISDITM,
  LW_ORDER_ITEM_IN    TYPE BAPISDITM,
  LIT_ORDER_ITEM_INX  TYPE STANDARD TABLE OF BAPISDITMX,
  LW_ORDER_ITEM_INX   TYPE BAPISDITMX,
  LIT_EXTENSIONIN     TYPE STANDARD TABLE OF BAPIPAREX,
  LW_EXTENSIONIN      TYPE BAPIPAREX,
  LW_BAPE_VBAP        TYPE BAPE_VBAP,                                 "BAPI インタフェース: テーブル VBAP 拡張
  LW_BAPE_VBAPX       TYPE BAPE_VBAPX,                                "BAPI チェックボックス: テーブル VBAP 拡張
  LIT_RETURN          TYPE STANDARD TABLE OF BAPIRET2.

************** SO ORDER*********************
LV_SALESDOCUMENT = LV_VBELN.

************** HEADER  *********************
*LW_ORDER_HEADER_IN-DOC_DATE = '20191106'.

************** HEADERX  ********************
LW_ORDER_HEADER_INX-UPDATEFLAG = 'U'.
*LW_ORDER_HEADER_INX-DOC_DATE = ABAP_TRUE.

************** ITEM_IN *********************
LW_ORDER_ITEM_IN-ITM_NUMBER = LV_POSNR.
LW_ORDER_ITEM_IN-TARGET_QTY = '2'.
LW_ORDER_ITEM_IN-PYMT_METH = '3'.
APPEND LW_ORDER_ITEM_IN TO LIT_ORDER_ITEM_IN.

************** ITEM_INX ********************
LW_ORDER_ITEM_INX-ITM_NUMBER = LV_POSNR.
LW_ORDER_ITEM_INX-UPDATEFLAG = 'U'.
LW_ORDER_ITEM_INX-TARGET_QTY = ABAP_TRUE.
LW_ORDER_ITEM_INX-PYMT_METH = ABAP_TRUE.
APPEND LW_ORDER_ITEM_INX TO LIT_ORDER_ITEM_INX.

LW_BAPE_VBAP-VBELN = LV_VBELN.
LW_BAPE_VBAP-POSNR = LV_POSNR.
LW_BAPE_VBAP-ZNNZZ = '123456'.
LW_BAPE_VBAP-ZNSZZ = 'ZNSZZ'.
LW_BAPE_VBAP-ZORZZ = '001'.

LW_BAPE_VBAPX-VBELN = LV_VBELN.
LW_BAPE_VBAPX-POSNR = LV_POSNR.
LW_BAPE_VBAPX-ZNNZZ = ABAP_TRUE.
LW_BAPE_VBAPX-ZNSZZ = ABAP_TRUE.
LW_BAPE_VBAPX-ZORZZ = ABAP_TRUE.
*LW_BAPE_VBAPX-FSH_SEASON_YEAR = ABAP_TRUE.

CALL METHOD CL_EEWA_CONVERT=>CONVERT_BAPIPAREX_IN
  EXPORTING
    PAR_STRUCTNAME   = 'BAPE_VBAP'
    PAR_DATA         = LW_BAPE_VBAP
  CHANGING
    PAR_BAPIPAREXTAB = LIT_EXTENSIONIN.

CALL METHOD CL_EEWA_CONVERT=>CONVERT_BAPIPAREX_IN
  EXPORTING
    PAR_STRUCTNAME   = 'BAPE_VBAPX'
    PAR_DATA         = LW_BAPE_VBAPX
  CHANGING
    PAR_BAPIPAREXTAB = LIT_EXTENSIONIN.

CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
  EXPORTING
    SALESDOCUMENT    = LV_SALESDOCUMENT
    ORDER_HEADER_IN  = LW_ORDER_HEADER_IN
    ORDER_HEADER_INX = LW_ORDER_HEADER_INX
  TABLES
    RETURN           = LIT_RETURN
    ORDER_ITEM_IN    = LIT_ORDER_ITEM_IN
    ORDER_ITEM_INX   = LIT_ORDER_ITEM_INX
    EXTENSIONIN      = LIT_EXTENSIONIN.

LOOP AT LIT_RETURN ASSIGNING FIELD-SYMBOL(<LW_RETURN>).


ENDLOOP.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
* EXPORTING
*   WAIT          =
* IMPORTING
*   RETURN        =
  .


這次還遇到了一個非常有意思的問題。剛開始沒辦法修改成功(return的東message都是成功),最後通過查詢資料發現,構造VBAPKOZX的型別必須使用char1去定義,如果和其他一樣用char,長度1,沒法識別。
https://answers.sap.com/questions/1691488/bapisalesorderchange-extensionin-not-working.html
時代拋棄你時,連招呼都不打一聲