我写了一段ABAP程序,放在我的github上:
https://github.com/i042416/KnowlegeRepository/blob/master/ABAP/S4/ZCREATE_SO.abap
直接执行,可以生成销售订单,即对应的生产订单。

我们知道SAP预留了一个生产订单Update的增强:BAdI definition WORKORDER_UPDATE
在这个增强里,我们可以加入自己的逻辑,在销售订单生成的Production Order保存之际,实现一些自定义逻辑。

那么在SAP传入这个增强的输入参数里,并没有销售订单的ID信息。
如果我们想在这个增强里维护前置销售订单和当前待生成的Production Order关联关系,应该如何拿到前置销售订单ID呢?
看这个调用栈:

在调用函数CO_61_ORDER_POST前,通过SET PARAMETER ID将销售订单的ID保存到SAP shared memory共享内存里了:
L_CALLER = VBAK-VBELN.
SET PARAMETER ID 'COC' FIELD L_CALLER.

那么我们按照同样的思路,在增强实现里用关键字
GET PARAMETER ID将共享内存里的销售订单ID重新取出即可。
DATA: lv_id type VBAK-VBELN.
GET PARAMETER ID 'COC' FIELD lv_id.
补充:其实在BAdI增强的输入参数里,是有这个前置销售订单ID的,在字段KDAUF_AUFK里:

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

网友评论