Skip to Content

Disabling Cache for CRUD/FI OData scenarios for a UI5 Application on Internet Explorer

This Blog attempts to make its audience understand the way to disable the cache content for UI5 Applications using SAP Netweaver Gateway/OData. It should be noted that there are mechanisms to disable the cache in a UI5 development environment but the blog focusses on disabling them using SAP Netweaver Gateway Implementation.

Understanding the Scenario – I’m Curious πŸ˜•

Q: What is the need to disable the CACHE in a UI5 Application that consumes OData Services ?

A: While performing a specific change/functionality in a UI5 application, it is desired that the Application loads fresh data from the backend and does not display stale/unchanged data.

Q: When does this happen ?

A: Specifically, When an OData service is called to perform an UPDATE operation, A Read is not enforced to fetch the updated DATA.

Q: So Why use GATEWAY/OData to disable cache on a service layer, Why not UI5 environment on an application layer ? πŸ˜•

A: UI5 applications are browser specific applications. For some of the browsers: IE, Firefox – The browser engine does not force a cache READ and has its limitations when trying to READ the data after an update is performed.

Q: Is this a restriction on only CRUD Services ?

A: This behaviour is exhibited for CRUD and Function Import/Non CRUD Operations as well.

Q: Is this a common development to adapt for for all the browsers ?

A: IE specifically, Firefox and Chrome are scenario centric.

Feeling contented…. 😐 Read Further … πŸ™‚

~~ How do I do it ?

  • Ok, Let’s get down to some Business. What OData scenario am I looking at ?

          How about a CRUD Operation : Let’s say an Update !

      

  1. Navigate to your DPC Ext Implementation and locate the CORE_SRV_RUNTIME~READ_ENTITYSET Implementation.
  2. Redefine the method by clicking on the icon as shown in the snapshot./wp-content/uploads/2014/05/1_462384.png
  3. Copy the code from below into the redefined method !

 

Code Snippet

data: ls_header type ihttpnvp.

ls_headername = ‘Cache-Control’.

ls_headervalue = ‘no-cache, no-store’.

APPEND ls_header TO ct_headers.

ls_headername = ‘Pragma’.

ls_headervalue = ‘no-cache’.

APPEND ls_header TO ct_headers.

CALL METHOD SUPER->/IWBEP/IF_MGW_CORE_SRV_RUNTIME~READ_ENTITYSET

    EXPORTING

      iv_entity_name                = iv_entity_name

      iv_source_name              = iv_source_name

      is_paging                          = is_paging

      it_order                               = it_order

      it_filter_select_options  = it_filter_select_options

      is_request_details           = is_request_details

    CHANGING

      ct_headers                         = ct_headers

      cr_entityset                       = cr_entityset     .

Looks Simple ? Does it solve my problem…….? πŸ˜•

Wait !! 😐 This is a READ ENTITYSET Implementation.

What if the Data that I’m trying to update is expected from an Entity and not an Entity Set ??  πŸ˜• πŸ˜•    .

As every problem has a solution so does this one !  πŸ™‚ 😎

4. Navigate to your DPC Ext implementation and Locate the CORE_SRV_RUNTIME~READ_ENTITY Implementation.

/wp-content/uploads/2014/05/2_462385.png

5. Redefine the method by clicking on the icon in the first snapshot as shown above.

6. Next, copy the code from below into the redefined method !

Code Snippet

data: ls_header type ihttpnvp.

ls_headername = ‘Cache-Control’.

ls_headervalue = ‘no-cache, no-store’.

APPEND ls_header TO ct_headers.

ls_headername = ‘Pragma’.

ls_headervalue = ‘no-cache’.

APPEND ls_header TO ct_headers.

CALL METHOD SUPER->/IWBEP/IF_MGW_CORE_SRV_RUNTIME~READ_ENTITY

   EXPORTING

     iv_entity_name       = iv_entity_name

     iv_source_name     = iv_source_name

     is_request_details  = is_request_details

   CHANGING

     ct_headers            = ct_headers

     cr_entity               = cr_entity.


Hmmm…..What If I’m calling a Function Import Service to update the Data ? Does the above Read Entity/Read Entity Set implementation takes care of the behaviour as well ? πŸ˜•

Not Really. We need to implement something more now ! 😎

7. Navigate to your DPC Ext implementation and Locate the CORE_SRV_RUNTIME~EXEC_SERVICE_OPERATION Implementation.

/wp-content/uploads/2014/05/3_462422.png

8. Redefine the method by clicking on the icon in the first snapshot as shown above..

9. Copy the code from below into the redefined method !

Code Snippet

data: ls_header type ihttpnvp.

ls_headername = ‘Cache-Control’.

ls_headervalue = ‘no-cache, no-store’.

APPEND ls_header TO ct_headers.

ls_headername = ‘Pragma’.

ls_headervalue = ‘no-cache’.

APPEND ls_header TO ct_headers.

CALL METHOD SUPER->/IWBEP/IF_MGW_CORE_SRV_RUNTIME~EXEC_SERVICE_OPERATION

   EXPORTING

     iv_action_name     = iv_action_name

     iv_return_type     = iv_return_type

     iv_multiplicity    = iv_multiplicity

     is_request_details = is_request_details

   CHANGING

     ct_headers         = ct_headers

     cr_data            = cr_data.

10. Lastly, Remember to activate all the implementations.

That’s it. That’s all you need to implement. πŸ˜†

You can access your UI5 OData application on Internet Explorer without pondering over – Why the Data was not getting updated ? !!! 😎

Thank you for spending time on this space. Glad if it helped you !! πŸ™‚

20 Comments
You must be Logged on to comment or reply to a post.