我们将发布一系列在 SAP S/4HANA Cloud, public edition 的 ABAP 环境中的开发案例。在我们开始之前,您可以阅读这篇 Blog 来了解我们这一系列的全部案例,希望我们的 Blog 可以为您在公有云三系统的探索中带来一些有价值的洞察。接下来就让我们开始吧!
仓库同事在收货时,基于货物分拣及收货的实际情况,希望传递收货信息比如内物破损、产品效期异常等信息至 QA 质检人员,此时仓库人员会在收货过账时填写备注至收货过账产生的物料凭证的抬头文本字段,此字段不会通过标准功能从收货物料凭证传递至收货自动生成的检验批,希望通过开发途径实现这一业务需求。
前台条件:物料主数据质量试图需要激活相应的检验类型,同时QM模块的配置需完善。
在基于Purchase Document来创建Material Document时候,会在选中的Item上自动生成一个Inspection Lot,自动创建的Inspection Lot的Short Text为空。想要将一些信息传递给下游,所以在创建Inspection Lot的时候,调用BADI来修改Short Text。
使用 Post Goods Receipt for Purchase Document APP,在创建 Material Document 时在Note字段填写的内容,反映到自动创建的 Inspection Lot 上。
创建 Material Document
使用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
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
首先创建一个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。
打开上一步创建的第一个增强实施,点击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。
右键创建的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.
将Active Implementation勾选上,保存,点击上方菜单栏的🕯激活,下方出现The implementation will be called代表已完成BAdI增强激活。
BAdI 增强实施 – MMIM_GR4XY_CHECK_DATA
BAdI 增强实施 – QPL1_INSPLOT_CHANGE
以上就是本篇开发案例的全部内容。希望该案例能让你更了解如三系统开发拓展的流程,希望您有所收获!
如果您对本文有任何的建议和想法,欢迎在评论区提出,期待与您一起交流。如果本文对您有任何帮助,欢迎您关注我的个人账号,期待我们在下一篇博文再见!