关于在BAPI_OUTB_DELIVERY_CHANGE中使用EXTENSION1和EXTENSION2

2020-08-30 01:47发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)嗨, 任何人都可以帮我如何在...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

任何人都可以帮我如何在BAPI_OUTB_DELIVERY_CHANGE的EXTENSION1和EXTENSION2中为zfields编码

谢谢

Nethaji。

9条回答
葫芦娃快救爷爷
2020-08-30 02:24

我需要通过BAPI调用更改LIKP中的Z字段,并找到了该线程。

尽管最初的参与者可能已经找到了替代方法,但我希望这可以对其他寻求解决方案的人有所帮助。

这些是我在2013年的发现,如果我错了,请纠正我。 EXTENSION1和EXTENSION2不能用于更改LIKP Z字段。 这些本身不会做任何事情,但是可以导入到BADI IF_EX_SMOD_V50B0001〜EXIT_SAPLV50I_010(因此,在较早的版本中有相应的CMOD)。

但是,这里可用的数据是:

CS_VBKOK

CT_VBPOK

CT_VBSUPCON

EXTENSION1

EXTENSION2

因此,要更改传递标题,只能更改结构CS_VBKOK中的字段。 由于VBKOK没有任何客户附加,因此这是不可能的。 此外,BAPI BAPI_OUTB_DELIVERY_CHANGE始终仅调用WS_DELIVERY_UPDATE,因此BAPI无法对FM进行任何操作。 那么,EXTENSION1/EXTENSION2的目的是什么?

正如我所见,itu2019是一种将数据传输到BADI的便捷方法,因此您可以构建逻辑来操纵任何现有的CS_VBKOK字段。 无论如何,您可以通过内存导出/导入来完成相同的操作。

/END-BAD-NEWS

/BEGIN-GOOD-NEWS

经过反复试验,我设法使用BAPI_OUTB_DELIVERY_CHANGE更改LIKP中的Z字段。 通话之前,我将所需的内容导出到内存ID,然后导入到MV50AFZ1中,BAPI_OUTB_DELIVERY_CHANGE

请参见以下工作示例代码:

调用程序:

&----


*&报告ZTEST_BAPI_DELIVERY_CHANGE

*&

&----


*&

*&

&----


报告ztest_bapi_delivery_change。

数据:gs_bapiobdlvhdrchg类型bapiobdlvhdrchg。

数据:gs_bapiobdlvhdrctrlchg类型bapiobdlvhdrctrlchg。

数据:gs_bapidlvcontrol类型bapidlvcontrol。

data:gt_bapireturn类型的bapiret2标准表。

数据:gs_bapi返回类型为bapiret2。

数据:gs_likp类型likpvb。

数据:ld_zzhuload类型erlkz。

常量:gc_x(1)输入c值" X"。

参数:p_vbeln就像likp-vbeln。

  • 获取相关的LIKP字段

从likp中选择*

进入gs_likp的相应字段

其中vbeln = p_vbeln。

endselect。

  • 填充标题数据-转换为BAPI格式

调用函数" MAP2E_LIKPVB_TO_BAPIOBDLVHDRCH"

导出

likpvb = gs_likp

更改

bapiobdlvhdrchg = gs_bapiobdlvhdrchg。

  • 设置为LIKP Z字段的字段

ld_zzhuload ='X'。

  • 在MV50AFZ1中导入的Memory-ID

将ld_zzhuload导出到内存ID" ZZHULOAD"。

调用函数" BAPI_OUTB_DELIVERY_CHANGE"

导出

header_data = gs_bapiobdlvhdrchg

header_control = gs_bapiobdlvhdrctrlchg

交付= gs_bapiobdlvhdrchg-deliv_numb

techn_control = gs_bapidlvcontrol

表格

return = gt_bapireturn

例外

communication_failure = 1

system_failure = 2

其他= 3。

如果gt_bapireturn []是初始的。

调用函数" BAPI_TRANSACTION_COMMIT"

导出

等待= gc_x。

否则。

在gt_bapireturn循环到gs_bapireturn

其中type ='E'。

消息ID gs_bapireturn-id类型'S'

数字gs_bapireturn-number与

gs_bapireturn-message_v1

gs_bapireturn-message_v2

gs_bapireturn-message_v3

gs_bapireturn-message_v4。

退出。

结束循环。

endif。

MV50AFZ1,格式为USEREXIT_SAVE_DOCUMENT_PREPARE

数据:ld_zzhuload类型erlkz。

如果xlikp-vbtyp ='J'"外向交货

和t180-trtyp ='V'。 "更改

  • 从程序ZZZ导出的内存ID ...

从内存ID" ZZHULOAD"导入ld_zzhuload。

如果sy-subrc是初始的

而不是ld _zzhuload是初始的。

LOOP AT xlikp。

xlikp-zzhuload = ld_zzhuload。

修改xlikp运输zzhuload。

ENDLOOP。

免费的内存ID" ZZHULOAD"。

endif。

endif。

我希望有人会对此有所帮助。 显然,我对功能不承担任何责任

抱歉,格式不正确,标签无法正常工作..

一周热门 更多>