1. Case Background:
This case is about customizing the Sales Order standard App, adding a custom field called “BU Section”. However, the custom fields on Sales Order are on the last tab “Custom Fields”. People tends to forget maintaining the value of this field. So we need to make this custom field mandatory.
As you can see below, we use App Custom Fields to create a custom field like below:
When we saving the sales order without entering the custom field, an error message pops up:
2. Implementation Details:
2.1 Find the released BAdl
We check the sales Extensibility part, find the enhancement spot ES_SD_SLS_EXTEND, and under the enhancement spot, there is a BAdl called SD_SLS_FIELDPROP_ITEM, which can set the sales item field properties.
Detailed path is like below:
Release Objects > Enhancements > SD > SD-SLS > SD-SLS-EXT > Enhancements Spots
2.2 Create BAdl Enhancement Implementation
First, we create a package, and we add it to favorite packages for further look-up.
Then, right-click the package, choose New -> Other ABAP Repository Object -> BAdl Enhancement Implementation:
Enter Name and Description, and choose Browser:
Enter ES_SD_SLS_EXTEND and search, click OK.
2.3 Create BAdl Definition
Open the BAdl Enhancement Implementation created from last step, Click “Add BAdl Implementation”, click on “Browser”, search and choose SD_SLS_FIELDPROP_ITEM, click OK.
Enter your BAdl Implementation Name, and click on Add:
2.4 Customizing implementation logic in ABAP class
Right-click the package, choose New -> ABAP Class, enter the class name and description, click on Next.
In the class, implement the logic like below. Set the custom field BUSection as a mandatory field.
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 Activate the BAdl Implementation
Click on the checkbox “Active Implementation”, then activate. The message “The implementation will be called” means the BAdl implementation has been activated.
3. Debug in Developer Extensibility
Easy to debug is one of the advantage to implement the BAdls in Developer Extensibility compared to Key-User Extensibility.
Here I will illustrate the steps how to debug in Developer Extensibility.
3.1 Add required Business Catalog
For the system you want to debug, you need to make sure your user has roles which contain the following Business Catalogs:
- SAP_A4C_BC_DEV_SUP_PC — Development – Analysis and Support
- SAP_A4C_BC_DEV_OBJ_DIS_PC — Development – Development Objects Display
3.2 Set Breakpoint in the code
After connecting the system in ADT, find the code you want to debug, and set the breakpoint properly, like the example below:
3.3 Run the program and debug
Open the APP Manage Sales Orders, click to change a sales order, you can see the system stops on loading page.
If we go back to ADT, we can see the debug mode has been activated. And the custom field YY1_BUSECTION_SDI’s mandatory property has changed from blank to X.
Now the page is still loading:
We click F8 to proceed, then the debug mode ends, and the page has been loaded successfully: