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.... :neutral: Read Further ... :smile:
~~ How do I do it ?
How about a CRUD Operation : Let's say an Update !
Code Snippet
data: ls_header type ihttpnvp.
ls_header-name = 'Cache-Control'.
ls_header-value = 'no-cache, no-store'.
APPEND ls_header TO ct_headers.
ls_header-name = 'Pragma'.
ls_header-value = '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 !! :neutral: 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 ! :smile: :cool:
4. Navigate to your DPC Ext implementation and Locate the CORE_SRV_RUNTIME~READ_ENTITY Implementation.
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_header-name = 'Cache-Control'.
ls_header-value = 'no-cache, no-store'.
APPEND ls_header TO ct_headers.
ls_header-name = 'Pragma'.
ls_header-value = '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 ! :cool:
7. Navigate to your DPC Ext implementation and Locate the CORE_SRV_RUNTIME~EXEC_SERVICE_OPERATION Implementation.
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_header-name = 'Cache-Control'.
ls_header-value = 'no-cache, no-store'.
APPEND ls_header TO ct_headers.
ls_header-name = 'Pragma'.
ls_header-value = '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. :lol:
You can access your UI5 OData application on Internet Explorer without pondering over - Why the Data was not getting updated ? !!! :cool:
Thank you for spending time on this space. Glad if it helped you !! :smile:
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
38 | |
25 | |
17 | |
13 | |
7 | |
7 | |
7 | |
7 | |
6 | |
6 |