Enterprise Resource Planning Blogs by SAP
Get insights and updates about cloud ERP and RISE with SAP, SAP S/4HANA and SAP S/4HANA Cloud, and more enterprise management capabilities with SAP blog posts.
cancel
Showing results for 
Search instead for 
Did you mean: 
Vincent_Zhu
Product and Topic Expert
Product and Topic Expert
0 Kudos
紧随这篇博客,我们将逐步详细地介绍一个利用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工具来做自定义逻辑的扩展,尤其是可以做代码调试,这是以前两系统扩展所做不到的。