Mutiple users interfering with each others actions

Hi,

I have an order entry system and actions that allow a user to bulk change delivery dates for orders.

I have a reference table which the user can edit to select the new chosen delivery date. Once that has been selected they then click an action button to change the select orders delivery dates to the new one.

Is there a commonly used way of stopping another user from changing/interfering with the new chosen date in the time it takes the original user to select the new date and implement it on the relevant rows.

Thanks

Phil

In short: no. Because AppSheet is a distributed app, each user has no visibility into the actions of other users until a sync occurs.

1 Like

Hi @Phil_Waite
Would it be feasible to have the users do the orders at different times of the day?

Could you add another action button that would solely be used to mark via formatting rules that the record(s) are being updated?

You would select and sync it immediately before you make any changes and then select the same button or another one to show that you done and out of the system.

1 Like

I have an idea that I have absolutely zero idea if it will work.

But, you could try adding a column called CheckedOut with an initial value of TRUE. We want that column to reset to initial value if the row is edited. Then use an action to set all of CheckedOut to FALSE. You can then use this column to try and prevent multiple people from opening it. And then as an action, once the form is saved, set CheckedOut to FALSE again.

Of course, this is all assuming it works the way I think it does in my head. I don’t know if Reset on Edit works with bulk actions.

If that doesn’t work you could try using one of the change tracking expressions to try and limit simultaneous edits.


I’ve never used them myself, so I don’t have any ideas on how you could use it.

1 Like

Hi,

I have added another column to the reference table and an action to change the row to “STOP” when the form is opened.

I’m trying to stop the form being opened by using an expression in the “Show if” section but the following describes what expressions can be used.

“This formula is not evaluated in the context of a row, so column values are not available.”

What can be used in this section if column values aren’t allowed?

thanks

Hi @Phil_Waite,

Could you please add, if any user can update any orders or are specific orders assigned to specific users basedon say useremail in the Orders table?

Also is the reference table where delivery dates are set a single row kind of the table? Do all the users set the delivery date in one and the same row in the reference table that is used in action?

To answer your question, while you can’t use row related info for the Show_If of a view, you can read from other tables.

What I would do for this use case is create a utility table or use one you might already have. Add to it a row property with your STOP info. Then in the view Show_If, you can perform a LOOKUP() in the utility table to determine if the view can be shown or not.

Thanks John,

Hi Suvrutt,

Any user can change any order and order date they are not assigned to an individual user.

At the moment they all use the same row in the reference table. I had thought about assigning them each their own row to select dates.

I I was to do this what is the best way of the app knowing which user is opening the form?

Thanks

Phil

Hi @Phil_Waite,

Please explore if following workaround helps.

You may wish to have a user reference table called say UserNames with structure something like below

ID UserName UserEmail Delivery Date
1 ABC abc@abctest.com 12/31/2019
2 GHJ ghj@ghjtest.com 12/20/2019

And in action that sets the delivery datesin the Orders table you may have the expression under “Set The Values of some columns in this row” something like below

ANY(SELECT(UsersNames[Delivery Date],[UserEmail]=USEREMAIL()))

This will ensure the delivery date settings of two users are not mixed as each user is assigned a his own row for the delivery date setting.

Your slice or security filter expression on the table UserNames for each user’s row displayed in a detail view where the user sets the delivery date ( using quick edit column in a detail view) may be something like [UserEmail]=uSEREMAIL()

Hi Suvrutt,

Thank you. I have done something similar.

I have given each user their own row in the reference table as below

Unique Id User Id Change Delivery Date To
1 Hilary@listersbrewery.com 11/12/2019
99a30955 phil@listersbrewery.com 01/12/2019

The Action below changes the delivery date to the corresponding row based on USEREMAIL().

Delivery Date = LOOKUP(USEREMAIL(), “Reassign Order Date”, “User Id”, “Change Delivery Date To”)

Another action creates a new row in the table if there isn’t one for the current user with this condition in the action to prevent duplicates.

NOT(IN(USEREMAIL(),Reassign Order Date[User ID]))

This works fine. I also have actions and workflow set up so that clicking one “change date” action button takes the user directly to reassign table/view for them to select the date. When they press save we return the previous view and the date is changed.

The problem I have now is that while the expression works to select the correct row based on USEREMAIL() to make the date change, I can’t get the view of the reference table to show the correct row in the view.

I have this as the LINKTOVIEW but it only ever shows the first row in the table even though the expression looks fine.

LINKTOFILTEREDVIEW(“Reassign Order Delivery Date”, [User Id ] = USEREMAIL())

As things stand only row with unique id “1” shows (and I’m phil@listersbrewery.com not Hilary)

Thanks

Phil

Hi @Phil_Waite,

Based on your description, I presume you are using the LINKTOFILTEREDVIEW(“Reassign Order Delivery Date”, [User Id ] = USEREMAIL()) expression to take the user from “Orders” equivalent table to the reference table to set the delivery date. As such, this action exists in “Orders” equivalent table.

I do not intrinsically find anything incorrect in your above expression. I tested it in a test app and an exact equivalent expression in action works for me.

Edit: Just in case it helps, request you to take a look at the test app that I put together

The app is called “LINKTOFILTEREDVIEW Demo” at SG Portfolio

HI Suvrutt,

I had row key in the view set to row “1”.

Removed and problem solved.

Thanks

Phil

1 Like

Hi @Phil_Waite,

Thank you for the update. Very good to know you got the solution. May we know if you are now using multi row reference table and if it works well in multi user environment.

Hi Suvrutt,

Yes it did! I seem to have lost the reference table view. I keep being taken to a new form to create a new row in the table rather than the filtered row by USEREMAIL().

In the end I have made the User Id in the reference table the KEY and added USEREMAIL to the “single row in the form to be edited” and that brings it up.

Oddly I have another reference table for “next Call” which works and shows the correct view.

Thanks

Phil

Thank you @Phil_Waite for the update.