紧随这篇博客,我们将逐步详细地介绍一个利用SAP S/4HANA Cloud三系统来做开发扩展的案例。
这个案例是关于对标准销售订单应用程序做定制化,添加一个名为“BU Section”的自定义字段。然而,销售订单上的自定义字段在最后一个名为“自定义字段(Custom Fields)”的标签页上。人们往往会忘记维护这个字段的值。所以我们需要将这个自定义字段设置为必填项。
如下图所示,我们使用应用自定义字段来创建一个像下面这样的自定义字段:
自定义字段BU Section
如果我们没有输入该字段的值,而直接保存销售订单时,系统会提示我们字段BU Section是必输项。
提示自定义字段为必填
我们检查跟销售领域相关的扩展部分,找到了增强点ES_SD_SLS_EXTEND。在该增强点下面,有一个BAdl叫SD_SLS_FIELDPROP_ITEM,这个BAdl是专门用来检查销售订单行项目上的一些字段属性的,因此我们决定使用该BAdl来完成我们的业务逻辑。
在ADT工具里面,具体的路径如下:
Release Objects > Enhancements > SD > SD-SLS > SD-SLS-EXT > Enhancements Spots
找到相关的BAdl
首先,我们新建一个包。同时,我们可以把这个包放到收藏夹里,方面我们之后使用和查找。
创建一个新的包
然后,右键该包,选择New -> Other ABAP Repository Object -> BAdl Enhancement Implementation:
BAdl增强实现
输入名字和描述,然后选择Browser:
输入ES_SD_SLS_EXTEND,然后查找, 点击OK.
找到增强点
打开上一步中创建的BAdl增强实现,选择“Add BAdl Implementation”, 点击“Browser”, 查找然后选择 SD_SLS_FIELDPROP_ITEM, 点击OK.
选择BAdl
输入你的BAdl实现的名称,然后点击Add:
右击上面创建的包,选择新建 -> 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.
选中复选框 “Active Implementation”, 然后激活. 消息“The implementation will be called” 意味着BAdl实现已被激活。
激活BAdl
与关键用户扩展(Key-User Extensibility)相比,使用开发扩展来做自定义逻辑的扩展可以想以前一样做代码调试,这对于开发来说会特别方便。
接下来,我会展示一下如何在开发扩展里做代码调试。
对于你想要做代码调试的系统,你需要确保你的用户有以下的业务目录:
当在ADT工具里连接好了系统,找到你需要调试的代码,在你想要的代码行设置断点,如下图所示:
在代码里设置断点
打开管理销售订单App,点击修改销售订单,然后你就可以看到系统停在了加载页面。
如果我们打开ADT工具,我们可以看到debug模式已经被激活。自定义字段YY1_BUSECTION_SDI的必填属性已经从空被改为了X。
页面依然在加载中:
当我们点击F8继续,我们可以看到程序会跳过该断点,debug模式结束,页面加载成功:
页面加载成功
希望该案例能让你了解如何利用开发扩展和ADT工具来做自定义逻辑的扩展,尤其是可以做代码调试,这是以前两系统扩展所做不到的。