紧随这篇
博客,我们将逐步详细地介绍一个利用SAP S/4HANA Cloud三系统来做开发扩展的案例。
1. 案例背景:
这个案例是关于对标准销售订单应用程序做定制化,添加一个名为“BU Section”的自定义字段。然而,销售订单上的自定义字段在最后一个名为“自定义字段(Custom Fields)”的标签页上。人们往往会忘记维护这个字段的值。所以我们需要将这个自定义字段设置为必填项。
如下图所示,我们使用应用自定义字段来创建一个像下面这样的自定义字段:
自定义字段BU Section
如果我们没有输入该字段的值,而直接保存销售订单时,系统会提示我们字段BU Section是必输项。
提示自定义字段为必填
2. 实现细节:
2.1 找到相关的BAdl
我们检查跟销售领域相关的扩展部分,找到了增强点
ES_SD_SLS_EXTEND。在该增强点下面,有一个BAdl叫
SD_SLS_FIELDPROP_ITEM,这个BAdl是专门用来检查销售订单行项目上的一些字段属性的,因此我们决定使用该BAdl来完成我们的业务逻辑。
在ADT工具里面,具体的路径如下:
Release Objects >
Enhancements >
SD >
SD-SLS >
SD-SLS-EXT >
Enhancements Spots
找到相关的BAdl
2.2 创建BAdl增强
首先,我们新建一个包。同时,我们可以把这个包放到收藏夹里,方面我们之后使用和查找。
创建一个新的包
然后,右键该包,选择New -> Other ABAP Repository Object -> BAdl Enhancement Implementation:
BAdl增强实现
输入名字和描述,然后选择Browser:
输入
ES_SD_SLS_EXTEND,然后查找, 点击OK.
找到增强点
2.3 创建BAdl定义
打开上一步中创建的BAdl增强实现,选择“Add BAdl Implementation”, 点击“Browser”, 查找然后选择
SD_SLS_FIELDPROP_ITEM, 点击OK.
选择BAdl
输入你的BAdl实现的名称,然后点击Add:
2.4 在ABAP类中实现自定义逻辑
右击上面创建的包,选择新建 -> ABAP类,输入类的名称和描述,点击Next:
新建ABAP类
在该类中,实现以下逻辑。把自定义字段BUSection设为必填项:
CLASS zcl_sls_fieldprop_item DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES if_badi_interface .
INTERFACES if_sd_sls_fieldprop_item .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_SLS_FIELDPROP_ITEM IMPLEMENTATION.
METHOD if_sd_sls_fieldprop_item~set_field_prop.
loop at field_properties assigning field-symbol(<fs_field_properties>).
if salesdocument-salesorganization = 'your sales org value'.
if <fs_field_properties>-field_name = 'YY1_BUSECTION_SDI'.
<fs_field_properties>-mandatory = 'X'.
endif.
endif.
endloop.
ENDMETHOD.
ENDCLASS.
2.5 激活BAdl实现
选中复选框 “Active Implementation”, 然后激活. 消息“The implementation will be called” 意味着BAdl实现已被激活。
激活BAdl
3.在开发扩展里做代码调试
与关键用户扩展(Key-User Extensibility)相比,使用开发扩展来做自定义逻辑的扩展可以想以前一样做代码调试,这对于开发来说会特别方便。
接下来,我会展示一下如何在开发扩展里做代码调试。
3.1 增加需要的业务目录
对于你想要做代码调试的系统,你需要确保你的用户有以下的业务目录:
- SAP_A4C_BC_DEV_SUP_PC — Development – Analysis and Support
- SAP_A4C_BC_DEV_OBJ_DIS_PC — Development – Development Objects Display
3.2 在代码里设置断点
当在ADT工具里连接好了系统,找到你需要调试的代码,在你想要的代码行设置断点,如下图所示:
在代码里设置断点
3.3 运行程序并调试
打开管理销售订单App,点击修改销售订单,然后你就可以看到系统停在了加载页面。
如果我们打开ADT工具,我们可以看到debug模式已经被激活。自定义字段
YY1_BUSECTION_SDI的必填属性已经从空被改为了X。
页面依然在加载中:
当我们点击F8继续,我们可以看到程序会跳过该断点,debug模式结束,页面加载成功:
页面加载成功
希望该案例能让你了解如何利用开发扩展和ADT工具来做自定义逻辑的扩展,尤其是可以做代码调试,这是以前两系统扩展所做不到的。