外向交货单增强BADI:LE_SHP_DELIV…

本文介绍如何通过ABAP编程使用BAPI_OUTB_DELIVERY_CREATE_SLS创建外向交货单,并通过增强实现更多自定义字段设置。讨论了使用全局变量进行值传递的方法。
根据销售订单创建外向交货单BAPI

 "参考销售订单创建外向交货单
  CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'
    EXPORTING
      SHIP_POINT               IV_SHIP_POINT
      DUE_DATE                  IV_DUE_DATE
      DEBUG_FLG                IV_DEBUG_FLG
      NO_DEQUEUE            IV_NO_DEQUEUE
    IMPORTING
      DELIVERY                    EV_DELIVERY
      NUM_DELIVERIES       EV_NUM_DELIVERIES
    TABLES
      SALES_ORDER_ITEMS IT_SALES_ORDER_ITEMS
      SERIAL_NUMBERS      IT_SERIAL_NUMBERS
      EXTENSION_IN           IT_EXTENSION_IN
      DELIVERIES                 IT_DELIVERIES
      CREATED_ITEMS         IT_CREATED_ITEMS
      EXTENSION_OUT        IT_EXTENSION_OUT
      RETURN                      ET_RETURN.

暴露出来的字段太少了
有时候业务会提出很多字段

比如很多lips  likp的字段

这个时候就需要在增强里做了

bapi:LE_SHP_DELIVERY_PROC

主要用的方法:
FILL_DELIVERY_HEADER
FILL_DELIVERY_ITEM
CHANGE_DELIVERY_HEADER
CHANGE_DELIVERY_ITEM

我debug的时候, 发现chenge_是都会走的,具体你可以打断点debug试试

另外,打断点,尤其是增强里,强烈建议 用 if 1 = 2 这种,然后打断点
别用break point等硬断点

如果忘记删了,容易有麻烦。


另外,像我这种,掉bapi的时候,需要用增强,那么
各个值的传递,不建议使用ABAP内存或者sap内存

建议使用全局变量,然后封装成FM

全局变量就放着 这个这个fm所在的函数组中就行,只要没重新起进程,这个全局变量跟内存一样能传递
但是只能是call fm,不能submit,submit后就重起进程了。

大致如下:
  "将增强字段值 set到全局 变量
  CALL FUNCTION 'ZFM_SET_DELIVERY_CREATE_EXTENS'
    EXPORTING
      IS_HEAD_BAPI IS_HEADER
    TABLES
      IT_ITEM_BAPI IT_ITEM.


  "参考销售订单创建外向交货单
  CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'


然后在增强里:
METHOD ZIF_EX_BD_LE_DN_PROC~CHANGE_DELIVERY_ITEM.

  "创建外向交货单 增强,修改行项目值
  CALL FUNCTION 'ZFM_DELIVERY_CRET_CHANGE_LIPS'
    CHANGING
      CS_LIPS CS_LIPS.

ENDMETHOD.

修改的时候,注意的是,如果全局变量 gs_likp 里,赋值了,就替换系统里的原值,
如果没赋值,就用原来的值,
这里就用 下面的方法
http://blog.sina.com.cn/s/blog_c0978c9b0102uzm4.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值