Skip to Content
Technical Articles
Author's profile photo Abhishek Sharma

How to use Side Effects in ABAP RAP (Restful Application Programming) Model

Hello,

In this beginner blog post we are going to see how we can use Side Effects in ABAP Restful Application Programming Model.

 

Ref: https://help.sap.com/docs/ABAP_PLATFORM/468a97775123488ab3345a0c48cadd8f/18b17bdd49d1436fa9172cbb01e26544.html

 

 

What is Side Effects :

When user makes a change to a field on UI, and this change effect the content of other field, this behavior is called Side Effect.

 

Annotation to Implement Side Effects:

Some more annotation properties are available but for this demo we are only using below 2 Annotations properties.

 

Source properties Properties on which you want to trigger Side Effect behavior. Source properties are responsible to trigger Determination on action (on modify)
Target properties Properties you want to manipulate as a result of Side Effects. Target properties contains fields which are updated or modified as result of Determination.

 

Implement Determination logic:

Implementing Determination Logic to update Salary based on Role. The problem statement is – when user change Role from Teacher <-> Professor then Salary should be updated without refresh of full page.

Above requirement can be achieved by using Side Effects to update dependent field.

 

1- In behavior Definition file added Determination with method name changeSalary and action “on modify” with source property as Role.

Determination changeSalary will be triggered as soon as Role property is changed.

 

 

Create Service API V4

2- To create Service API V4 to use in Fiori Application. Create new Service Binding.

 

Once created Activate and Publish Local Service Endpoints.

 

 

3- Now we are going to create Fiori Application where we will be using this V4 API.

 

Create New Fiori Application using Template

 

 

 

 

 

 

 

Select Service created in previous steps.

 

 

Click Next. Select main Entity

 

 

Create Module and fill all required Information and click on Finish.

 

 

Once Module is ready. Open Annotations Folder and then Annotations.xml file

Update below SideEffects annotation to file.

 

<Annotations Target=".....">
<Annotation Term="Common.SideEffects">
     <Record>
        <PropertyValue Property="SourceProperties">
           <Collection>
              <PropertyPath>Role</PropertyPath>
           </Collection>
        </PropertyValue>
        <PropertyValue Property="TargetProperties">
           <Collection>
              <PropertyPath>Salary</PropertyPath>
           </Collection>
        </PropertyValue>
    </Record>                    
</Annotation>
</Annotations>

 

To add namespace click on QuickFix option.

 

 

Click on Availablable option to add Namespace for SideEffects Annotation.

 

 

Everything is done. Now run the Application.

Application is loaded.

 

For Role teacher Salary is 10,000

Change Role to Professor and Hit ENTER, Salary will be updated

 

 

Conclusion:

If requirement is to update some of the properties depending on value of other property on UI, SideEffects annotation can be used.

 

Benefit of using Side Effects :

  1. When updating 1 or 2 fields on UI based on values of other field does not need full page to be refreshed.
  2. Can be Implemented quickly by using Annotation called SideEffects.
  3. Performance Improvement, since we are not refreshing full page to refresh single dependent field.
  4. Side Effects can be Implemented in Fiori Elements

 

Thanks-

Abhishek

 

Assigned Tags

      2 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Matt Dion
      Matt Dion

      Hi Abhishek Sharma

      Nice job documenting this process! Please note that this process will likely change in the near future. It is on the roadmap for Q1 2023 to support side effect annotations in the behavior definition.

      Regards,

      Matt

      Author's profile photo Abhishek Sharma
      Abhishek Sharma
      Blog Post Author

      Thanks much for info Matt Dion

       

      Thanks-