我们将发布一系列在 SAP S/4HANA Cloud, public edition 的 ABAP 环境中的开发案例。在我们开始之前,您可以阅读这篇
Blog 来了解我们这一系列的全部案例,希望我们的 Blog 可以为您在公有云三系统的探索中带来一些有价值的洞察。接下来就让我们开始吧!
1. 场景需求
1.1 案例背景
仓库同事在收货时,基于货物分拣及收货的实际情况,希望传递收货信息比如内物破损、产品效期异常等信息至 QA 质检人员,此时仓库人员会在收货过账时填写备注至收货过账产生的物料凭证的抬头文本字段,此字段不会通过标准功能从收货物料凭证传递至收货自动生成的检验批,希望通过开发途径实现这一业务需求。
1.2 系统操作:
前台条件:物料主数据质量试图需要激活相应的检验类型,同时QM模块的配置需完善。
在基于Purchase Document来创建Material Document时候,会在选中的Item上自动生成一个Inspection Lot,自动创建的Inspection Lot的Short Text为空。想要将一些信息传递给下游,所以在创建Inspection Lot的时候,调用BADI来修改Short Text。
1.2.1 创建 Material Document
使用
Post Goods Receipt for Purchase Document APP,在创建 Material Document 时在Note字段填写的内容,反映到自动创建的 Inspection Lot 上。
创建 Material Document
1.2.2 显示Inspection Log
使用
Display Inspection Log APP,查看自动创建的Inspection Lot中Short Text字段已经设置成Material Document的Note中填写的内容。
*Content from Material Document Note filled into Inspection lot’s short text
显示 Inspection Lot
2 功能实现
2.1 找到Release出来的BAdI
Enhancements Spots MMIM_GR4XY_FIORI
- MMIM_GR4XY_CHECK_DATA Change Header and Item Data in Goods Receipts
在创建Material Document时,将Note字段的值保存起来,留待后续使用。
在
Release Objects >
Enhancements >
MM >
MM-IM >
Enhancements Spots路径下可以找到该BAdI。
BAdI – MMIM_GR4XY_CHECK_DATA
Enhancements Spots QPL1_INSPLOT_CHANGE
- QPL1_INSPLOT_CHANGE Change Inspection Lot Header During Lot Creation
在自动创建Inspection Lot时,将刚才保存起来的Note字段的值,赋值给Short Text。
在
Release Objects >
Enhancements >
QM >
QM-IM >
Enhancements Spots路径下可以找到该BAdI。
BAdI – QPL1_INSPLOT_CHANGE
2.2 定义BAdI增强的实施
首先创建一个
Package,右键选择
ZLOCAL >
New >
ABAP Package。
填写好
Package的
Name和
Description,勾选
Add to favorite packages方便后续查找。点击
Next。
点击
Next >
Finish完成
Package的创建。
新建 ABAP Package
右键新建的
Package,点击
New >
Other ABAP Repository Object。
输入
BAdI进行搜索,选中
BadI Enhancement Implementation并点击
Next。
输入
Name和
Description,然后点击
Enhancement Spot右边的
Browse。
输入
MMIM_GR4XY_FIORI进行搜索并选中,点击
OK。
点击
Next >
Finish 完成第一个BAdI增强实施的创建。
新建 BAdI 增强实施
通过相同的步骤完成对第二个BAdI增强实施的创建,选择
QPL1_CHANGE_AT_CREATE4CLD作为
Enhancement Spot。
2.3 为Material Document上的增强扩展点添加BAdI Definition
打开上一步创建的第一个增强实施,点击
Add BAdI Implementation,在
BAdI Definition右边点击
Browse,搜索并选中
MMIM_GR4XY_CHECK_DATA,点击
OK。
接着填写
BAdI Implementation Name,点击
Add。
添加 BAdI Implementation
完成
BAdI Definition的添加后,会提示我们缺少实施类。
缺少类
通过相同的步骤创建第为第二个增强实施添加
BAdI Definition。选择
BADI_QPL1_CHANGE_AT_CREATE4CLD作为第二个增强实施的
BAdI Definition。
2.4 在ABAP类中自定义实现逻辑
右键创建的
Package,点击
New >
ABAP Class。
输入类的
Name以及
Description后,点击
Next。
点击
Finish完成类的创建。
新建 ABAP 类
在创建的类里,自定义实现逻辑。当
Material Document保存时,用变量存储
Material Document的
Note字段,留待后续使用。
保存,点击上方菜单栏的
🕯激活,使类生效。
CLASS zcl_gr4xy_check_data DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-DATA headertext TYPE string.
INTERFACES if_badi_interface .
INTERFACES if_mmim_gr4xy_check_data .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_GR4XY_CHECK_DATA IMPLEMENTATION.
METHOD if_mmim_gr4xy_check_data~check.
headertext = gr4xy_header-materialdocumentheadertext.
ENDMETHOD.
ENDCLASS.
将刚刚创建的类作为实施类添加给之前创建的
BAdI Implementation。点击
Browse,选择之前创建的
BAdI Implementation,点击
OK。
通过相同的步骤为第二个
BAdI Implementation添加实施类。在创建的类里,自定义实现逻辑。在自动创建
Inspection Lot时,将刚才保存起来的
Note字段值,赋值给
Short Text。
保存,点击上方菜单栏的
🕯激活,使类生效。
CLASS zcl_change_at_create4cld DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_badi_interface .
INTERFACES if_ex_qpl1_change_at_create4cl .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_CHANGE_AT_CREATE4CLD IMPLEMENTATION.
METHOD if_ex_qpl1_change_at_create4cl~execute_change.
* Test BADI in Lot Change during Creation
inspectionlottext = zcl_gr4xy_check_data=>headertext.
ENDMETHOD.
ENDCLASS.
2.5 将BAdI增强激活
将
Active Implementation勾选上,保存,点击上方菜单栏的
🕯激活,下方出现
The implementation will be called代表已完成BAdI增强激活。
BAdI 增强实施 – MMIM_GR4XY_CHECK_DATA
BAdI 增强实施 – QPL1_INSPLOT_CHANGE
3. 结语
以上就是本篇开发案例的全部内容。希望该案例能让你更了解如三系统开发拓展的流程,希望您有所收获!
如果您对本文有任何的建议和想法,欢迎在评论区提出,期待与您一起交流。如果本文对您有任何帮助,欢迎您关注我的个人账号,期待我们在下一篇博文再见!