销售订单修改BAPI_SALESORDER_CHANGE 示例 - 海边星
【原创】 销售订单修改BAPI_SALESORDER_CHANGE 示例
栏目:BAPI  作者:在海边看星星  阅读:(1292)

该示例主要用于做增强字段的修改,其他标准字段增加对应结构即可

  DATA: lt_return    TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE,
        lt_ext       TYPE STANDARD TABLE OF bapiparex WITH HEADER LINE,
        lt_extx      TYPE STANDARD TABLE OF bapiparex WITH HEADER LINE,
        ls_headerx   TYPE bapisdh1x,
        ls_header_ex TYPE zssale_header_ex.
  DATA: l_msg(220),
        l_string          TYPE string,
        l_valuepart1(240),
        l_field(20).

  FIELD-SYMBOLS: <fs_alv>   TYPE typ_alv,
                 <fs_field> TYPE any.

  DATA: lt_alv TYPE STANDARD TABLE OF typ_alv WITH HEADER LINE.

  lt_alv[] = gt_alv[].
  DELETE lt_alv WHERE sel = ''.

  IF lt_alv[] IS INITIAL.
    MESSAGE '请选择需要修改的行!' TYPE 'S' DISPLAY LIKE 'E'.
    EXIT.
  ENDIF.

  LOOP AT lt_alv.

    IF lt_alv-type = 'E'.
      lt_alv-msg = '该数据仍存在错误信息,请修正后再导入!'  && lt_alv-msg.
    ELSE.

      CLEAR: lt_return[],lt_return,lt_ext[],lt_ext,lt_extx[],lt_extx,
             ls_header_ex,lt_alv-msg.

      ls_header_ex-vbeln = lt_alv-vbeln.
      ls_header_ex-zqhz  = lt_alv-zqhz.
      lt_ext-structure = 'ZSSALE_HEADER_EX'.
      lt_ext-valuepart1 = ls_header_ex.
      APPEND lt_ext.
      CLEAR: ls_header_ex,lt_ext.

*      ls_bape_vbakx-vbeln = lt_alv-vbeln.
*      ls_bape_vbakx-zqhz  = 'X'.
*      lt_extx-structure = 'BAPE_VBAKX'.
*      lt_extx-valuepart1 = ls_bape_vbakx.
*      APPEND lt_extx.
*      CLEAR: ls_bape_vbakx,lt_extx.

      ls_headerx-updateflag = 'U'.

      CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
        EXPORTING
          salesdocument    = lt_alv-vbeln
          order_header_inx = ls_headerx
        TABLES
          return           = lt_return[]
          extensionin      = lt_ext[]
*         extensionex      = lt_extx[]
        .
      LOOP AT lt_return WHERE type CA 'EAX'.
        CALL FUNCTION 'MESSAGE_TEXT_BUILD'
          EXPORTING
            msgid               = lt_return-id
            msgnr               = lt_return-number
            msgv1               = lt_return-message_v1
            msgv2               = lt_return-message_v2
            msgv3               = lt_return-message_v3
            msgv4               = lt_return-message_v4
          IMPORTING
            message_text_output = l_msg.
        lt_alv-msg = lt_alv-msg && l_msg && ';'.
      ENDLOOP.
      IF sy-subrc = 0.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        lt_alv-type = 'E'.
        lt_alv-sicon = c_red.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        lt_alv-type = 'S'.
        lt_alv-sicon = c_green.
        lt_alv-msg = '修改成功!'.
      ENDIF.
    ENDIF.

    LOOP AT gt_alv ASSIGNING <fs_alv> WHERE vbeln = lt_alv-vbeln
                                        AND sel = 'X'.
      <fs_alv>-type = lt_alv-type.
      <fs_alv>-sicon = lt_alv-sicon.
      <fs_alv>-msg = lt_alv-msg.
    ENDLOOP.

使用增强字段还需要在如下结构中增加对应的增强字段

image.png

之后在BADI   ES_BADI_SD_SALES_BAPI     方法  MOVE_EXTENSIONIN  下增加如下代码

    DATA: ls_header_ex TYPE zssale_header_ex,
          ls_ext       TYPE bapiparex.

    "抬头
    READ TABLE it_extensionin INTO ls_ext WITH KEY structure = 'ZSSALE_HEADER_EX'.
    IF sy-subrc = 0.
      ls_header_ex = ls_ext-valuepart1.

      IF ls_header_ex-zzlj IS NOT INITIAL.
        cs_vbakkom-zzlj = ls_header_ex-zzlj.
        cs_vbakkomx-zzlj = 'X'.
      ENDIF.

      IF ls_header_ex-zqhz IS NOT INITIAL.
        cs_vbakkom-zqhz = ls_header_ex-zqhz.
        cs_vbakkomx-zqhz = 'X'.
      ENDIF.
    ENDIF.




我的评论
昵称
邮箱
域名
  记住 通知博主
验证码

  联系我们

微信扫一扫

 登录  打赏

  随机文章