🎓beginner⏱15 min.SAP BTP ABAP EnvironmentBeginnerABAP DevelopmentSAP Business Technology Platform
You will learn
✔How to define dynamic instance feature control
✔How to implement dynamic instance feature control
✔How to preview and test enhanced travel app In the previous exercise, you’ve defined and implemented different instance-bound actions for the BO entity Travel. In the present exercise, you will implement the dynamic instance feature control for some of the standard and non-standard operations of the Travel entity.
You need to have access to an SAP BTP, ABAP environment, or SAP S/4HANA Cloud, ABAP environment or SAP S/4HANA (release 2022 or higher) system.
For example, you can create free trial user on SAP BTP, ABAP environment.
Make sure, your system has the ABAP flight reference scenario. If your system hasn’t this scenario. You can download it here. The trial systems have the flight scenario included.
Reminder: Do not forget to replace the suffix placeholder ### with your chosen or assigned group ID in the exercise steps below.
About: Dynamic Feature Control
As an application developer you may want to determine based on certain attributes of your business object entity, which fields should be read-only or mandatory or which functionality like update or actions are allowed. As this property is related to an instance of this business object it is called Dynamic Feature Control.
Define the dynamic instance feature control for the standard operations update and delete, the draft action Edit, and the instance action deductDiscount. If implemented in the previous exercise, you’ll also define the dynamic instance feature control for the optional instance actions acceptTravel and rejectTravel.
Open your behavior definitionbehaviordefinitionZRAP100_R_TRAVELTP_### and add the addition ( features : instance ) to the following operations as shown on following code snippet and the screenshot below:
Standard operations update and delete
Draft action Edit
Instance actions acceptTravel, rejectTravel, and deductDiscount
In case you’ve defined and implemented the instance actions acceptTravel and rejectTravel in the previous exercise, then also add the code snippet provided below as shown on the screenshot.
At the top of the behavior definition, set the cursor on BO entity namebdef iconZRAP100_R_TRAVELTP_### and press CTRL+1 to open the Quick Assist view.
Select the entry Add method for operation instance_features of entity zrap100_r_traveltp_### to add the required methods to the local handler class lcl_travel of your behavior poolclass iconZRAP100_BP_TRAVELTP_###.
The result should look like this:
Travel BO Behavior Pool
Check the interface of the method get_instance_features in the declaration part of the local handler class in the behavior poolclass iconZRAP100_BP_TRAVEL_###.
Set the cursor on one of the method name, press F2 to open the ABAP Element Info view, and examine the full method interface.
Travel BO Behavior Pool
Short explanation:
The addition FOR INSTANCE FEATURES after the method name indicates that this method provides the implementation of an instance-based dynamic feature control.
Method signature of the instance method get_instance_features:
IMPORTING parameter keys - a table containing the keys of the instances on which the action must be executed
Implicit IMPORTING parameter requested_features - structure reflecting which elements (fields, standard operations, and actions) of the entity are requested for dynamic feature control by the consumer.
result - used to store the result of the performed
failed - table with information for identifying the data set where an error occurred
reported - table with data for instance-specific messages
Go ahead with the implementation.
Implement dynamic instance feature control
Implement the dynamic instance feature control for the standard operations update and delete, the draft action Edit, and the instance action deductDiscount. If defined in the previous exercise steps, you’ll also implement the dynamic instance feature control for the the instance actions acceptTravel and rejectTravel.
Following dynamic behavior will be implemented in the backend - and shown on the Fiori UI:
If a travel instance has the overall status Accepted (A), then the standard operations update and delete, and the actions Edit and deductDiscount must be disabled for the given instance.
In addition, following toggle behavior (enable/disable) should be implemented:
If the overall status is Accepted (A), then the action acceptTravel must be disabled.
If the overall status is Rejected (X), then the action rejectTravel must be disabled.
Implement the instance feature control method get_instance_features in the implementation part of the local handler class.
The logic consists of the following steps:
Read the relevant data of the transferred travel instances. Only the fields TravelID and OverallStatus are needed to determine the operation state in the present scenario.
Evaluate the conditions and determine the state of the different operations. The COND operator is used inline in the present scenario for the purpose.
Set the result set appropriately.
For that, replace the current method implementation with the code snippet provided below and replace all occurrences of the placeholder ### with your group ID.
You can make use of the F1 Help for more information about the EML statements and other ABAP constructs.
ABAP
*************************************************************************** Instance-based dynamic feature control**************************************************************************METHODget_instance_features." read relevant travel instance data
READENTITIESOFZRAP100_R_TravelTP_###INLOCALMODEENTITYtravelFIELDS(TravelIDOverallStatus)WITHCORRESPONDING#(keys)RESULT DATA(travels)FAILEDfailed." evaluate the conditions, set the operation state, and set result parameter
result=VALUE#(FORtravelINtravels(%tky=travel-%tky%features-%update=COND#(WHENtravel-OverallStatus=travel_status-acceptedTHENif_abap_behv=>fc-o-disabledELSEif_abap_behv=>fc-o-enabled)%features-%delete=COND#(WHENtravel-OverallStatus=travel_status-openTHENif_abap_behv=>fc-o-enabledELSEif_abap_behv=>fc-o-disabled)%action-Edit=COND#(WHENtravel-OverallStatus=travel_status-acceptedTHENif_abap_behv=>fc-o-disabledELSEif_abap_behv=>fc-o-enabled)%action-acceptTravel=COND#(WHENtravel-OverallStatus=travel_status-acceptedTHENif_abap_behv=>fc-o-disabledELSEif_abap_behv=>fc-o-enabled)%action-rejectTravel=COND#(WHENtravel-OverallStatus=travel_status-rejectedTHENif_abap_behv=>fc-o-disabledELSEif_abap_behv=>fc-o-enabled)%action-deductDiscount=COND#(WHENtravel-OverallStatus=travel_status-openTHENif_abap_behv=>fc-o-enabledELSEif_abap_behv=>fc-o-disabled))).ENDMETHOD.
You can either refresh your application in the browser using F5 if the browser is still open - or go to your service binding ZRAP100_UI_TRAVEL_O4_### and start the Fiori elements App preview for the Travel entity set.
You can go ahead and test the logic of the dynamic feature control implemented in the backend.
For example, select a travel instance has the overall status Accepted, and check the state of the Accepted, the Edit, and the Delete buttons. They all shall be disable.
Remember the implemented dynamic BO behavior expected on the UI:
If a travel instance has the overall status Accepted(A) or Rejected(X), then the button Edit, Delete and Deduct Discount must be disabled for the given instance.
In addition, following toggle behavior (enable/disable) should be displayed for both instance actions:
- If the overall status Accepted(A), then the action Accept Travel must be disabled.
- If the overall status Rejected(X), then the action Reject Travel must be disabled
Share feedback on this tutorial or join the conversation in SAP Community.
Submit detailed feedbackDiscuss in Community
Steps
Step 1 of 3
1. Define dynamic instance feature control2. Preview and test the enhanced travel app3. Test yourself
Joule
AI Notice
Joule is an AI assistant. Generative AI may produce inaccurate, incomplete, or biased information. Always verify important details before acting on them.
Conversations are sent to SAP-hosted large language models for processing. Do not include personal data, credentials, or confidential information in your messages.
Joule's responses are based on the SAP tutorial catalog and may not reflect the latest product changes. For authoritative guidance, consult the linked tutorials and official SAP documentation.