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
Solved! Go to Solution.
HI Suvrutt,
I had row key in the view set to row โ1โ.
Removed and problem solved.
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.
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
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.
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.
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.
User | Count |
---|---|
43 | |
29 | |
24 | |
21 | |
13 |