通过BAPI_PO_CREATE1创建明细上带有删除标记的PO

项目上碰到一个通过BAPI创建PO的需求,因为有增强会将不带删除标记的数据同步至其他系统,要等后续业务更新,将删除标记去掉之后,这张PO才能发送出去,所以需要创建出来的PO明细上打上删除标记,而标准BAPI中有标准逻辑做了限制:

​​​​​​​

后续也有很多关于删除标记的逻辑,所以标准BAPI是不能实现这个功能的,需要先创建,再去更改,连续调用BAPI时可能会有数据库提交不及时的问题,接口调用会影响效率,所以将标准BAPI复制一份出来,添加自定义逻辑,来实现这一需求,具体实现如下:

1.复制标准BAPI:

创建函数组ZXXPO_1001

将标准BAPI所在函数组TOP中的代码copy过来

FUNCTION-POOL ZXXPO_1001.                   "MESSAGE-ID ..
* includes
INCLUDE: mm_messages_mac,                   "macros for messages
         fbgenmac.

* tables
TABLES: comsrv.  "1963020

* type-pool
TYPE-POOLS:
  szadr, mmcnt, abap, mmtyp.

* types
TYPES:

* address
BEGIN OF mepoheaderaddrzav,
  ebeln  TYPE mepoheader-ebeln,
  strzav TYPE szadr_addr1_complete,
END OF mepoheaderaddrzav,

BEGIN OF mepoitemaddrzav,
  ebeln  LIKE mepoitem-ebeln,
  ebelp  LIKE mepoitem-ebelp,
  strzav TYPE szadr_addr1_complete,
  kunnr  TYPE ekunnr,                                       "1333377
  emlif  TYPE emlif,                                        "1333377
  lblkz  TYPE lblkz,                                        "1333377
  addrtype   TYPE char1,
END OF mepoitemaddrzav,

tab_mepoitemaddrzav TYPE if_ex_me_bapi_po_create_01=>type_t_address," STANDARD TABLE OF mepoitemaddrzav,

BEGIN OF gty_addr_mapping_entry,
  ref_ebelp TYPE ebelp,
  ebelp TYPE ebelp,
END OF gty_addr_mapping_entry,

gty_addr_mapping TYPE SORTED TABLE OF gty_addr_mapping_entry WITH UNIQUE
 KEY ref_ebelp ebelp,

* conditions
*    extends KOMV with field change_id
komv_bapi     TYPE mmpur_konv_ext,                          "1012433
tab_komv_bapi TYPE STANDARD TABLE OF mmpur_konv_ext,

* document management
*    extends EREVITEM with field activity
BEGIN OF erevitem_bapi.
        INCLUDE TYPE erevitem.
TYPES:     activity TYPE dcm_activity,
END OF erevitem_bapi.

*  extens MMPA with field DELETE_IND
TYPES: BEGIN OF mmpa_bapi.
        INCLUDE TYPE mmpa.
TYPES:  delete_ind TYPE eloek,
       END OF mmpa_bapi,
tab_mmpa_bapi TYPE STANDARD TABLE OF mmpa_bapi.

* Tables for accounting in service po
DATA:    BEGIN OF acc_tab OCCURS 30.
        INCLUDE STRUCTURE ueskn.
DATA:    END OF acc_tab.

TYPES: mmpur_acc_tab TYPE STANDARD TABLE OF ueskn INITIAL SIZE 1.

* partner type for BAPI
TYPES gty_partner TYPE STANDARD TABLE OF bapimepopartner WITH DEFAULT KEY.

* definition of types for serial number handling
TYPES: BEGIN OF gty_serno,
        ebelp TYPE mepoitem-ebelp,
        etenr TYPE meposchedule-etenr,
        loekz TYPE mepoitem-loekz,
        serno TYPE gernr,
        uii   TYPE uii_char72,           "EHP604 IUID
        uid   TYPE guid,
       END OF gty_serno,
*  define table type for serial number handling
       gty_t_serno TYPE STANDARD TABLE OF gty_serno.

TYPES: BEGIN OF gty_sernox,
        ebelp_key TYPE mepoitem-ebelp,
        etenr_key TYPE meposchedule-etenr,
        ebelp     TYPE mmpur_bool,
        etenr     TYPE mmpur_bool,
        loekz     TYPE mmpur_bool,
        serno     TYPE mmpur_bool,
        uid       TYPE mmpur_bool,
      END OF gty_sernox,
*  define table type for serial number x-bar handling
      gty_t_sernox TYPE STANDARD TABLE OF gty_sernox.


* constants
CONSTANTS:
  c_lenstruc TYPE i VALUE 30.


* global data
DATA:
  cancel_po TYPE mmpur_bool,
  exitflag  TYPE boole.
*--------------------------------------------------------------------*
* local class defitions
*--------------------------------------------------------------------*
* class pre-definitions
CLASS: lcl_bapi_mapping DEFINITION DEFERRED,
       lcl_schedule     DEFINITION DEFERRED,                "1659181
       lcl_account      DEFINITION DEFERRED,
       lcl_condition    DEFINITION DEFERRED,
       lcl_partner      DEFINITION DEFERRED,                "1739367
       lcl_utility      DEFINITION DEFERRED.

* local class definitions
INCLUDE: l2012d01, "class lcl_bapi_conf definition
         l2012d02, "class lcl_bapi_mapping
         l2012d03, "class lcl_utility
         l2012d04, "class lcl_invoice_plan
         l2012d05, "class lcl_serial_no
         l2012d06, "class lcl_partners (SRM 6.0 & GP 2.0)
         l2012d07, "class lcl_downpayments
         l2012d08, "class lcl_memory   "Park&Hold
         l2012d09, "class lcl_schedule "1659181
         l2012d10, "class lcl_account
         l2012d11. "class lcl_condition
*---------------------------------------------------------------------*
* Makro to merge data of &1 and &2 by using &3
*   (copy of bapi_merge_data in LMEPOF8C)
*---------------------------------------------------------------------*

FIELD-SYMBOLS: <comp>  TYPE abap_compdescr,
               <new>   TYPE any,                            "#EC *
               <old>   TYPE any.                            "#EC *
* INCLUDE LZXXPO_1001D...                    " Local class definition

2.复制标准处理form,进行自定义逻辑处理:

pre_processing-->zpre_processing

将如下代码注释掉,避免在这一步清空明细数据:

set_object_attributes-->zset_object_attributes

添加如下代码:

*   Create PO with delete flag
    IF im_aktyp EQ cl_mmpur_constants=>hin.
      IF <ls_item>-loekz = cl_mmpur_constants=>if_mmpur_constants_general~deleted AND
         <ls_itemx>-loekz EQ lo_const->yes.
        ls_item_new-loekz = 'X'.
      ENDIF.
    ENDIF.
*   transport data to model
    l_item->if_purchase_order_item_mm~set_data( ls_item_new ).

创建时通过ITEM-DELETE_IND = ‘X’ 调用复制的BAPI即可创建出带删除标记的PO

以上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeveloperMrMeng

觉得有用的佛系投币哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值