I’ve noticed that data grid refresh behavior seems to break when multiple users are working with the same object simultaneously. I’d like to know if there’s a best practice for minimizing the inconsistency between database and data-grid/data-view objects in this scenario. Some specific use cases are below. All of the changes I mention below are performing a commit and a refresh in client.
Case 1: Two UI Users
I have an application with a single page that contains a data grid that populates with Agent objects. This data grid contains the New, Edit and Save buttons that are automatically generated on creation of the data grid widget.
I’m going to log in to the app from two browsers, Browser 1 and Browser 2.
I log in to the app on Browser 1 and create an agent named “Adam.” Now when I open Browser 2 and edit the name of this agent to be “Brad” the grid on Browser 1 still shows “Adam” (Note: the refresh time on the data grid is set to 0). When I open the Agent_NewEdit page for this agent in Browser 1, the data view shows the agent name to be “Brad.” When I close the Agent_NewEdit page in Browser 1 by clicking the Cancel or Save button, the data grid shows the updated name of “Brad.”
Case 2: One UI User and One REST Service User
I log in and create an agent named “Chuck.” There’s another application that calls a published REST service in my app, which changes the agent’s name to “Derrick.” The data grid still shows the agent’s name to be “Chuck.” When I open the Agent_NewEdit page the data view still shows the agent’s name as “Chuck.” When I press cancel from this page, the data grid shows the agent has the name “Derrick.” Opening the Agent_NewEdit page again, the agent still has the name “Chuck.”
A refresh Time of 0 means that the grid is not doing any automated refresh. If you want the grid to refresh itself, you need to set it up. This always results in a new retrieve (every x seconds).
The refresh mechanism you are describing (UI is refreshed because of a user interaction) does always only work for the user that executed the action.
Your application seems to use data from the cache instead of retrieving it from the database again. You could avoid this by using a microflow to open the Agent_NewEdit page. Within this microflow you can retrieve your object from the database and pass it to the page.