Hi everyone,
I want to raise my concern about the management of concurrency and open the debate.
I think that this lurks behind nice debates in this forum, such as the impossibility of sequentially number records with confidence, ‘ghost’ changing rows values and many others.
Coping with its results is a reason why AppSheet has not achieved to be “no-code”. It differentiates the true experts from the advanced users.
The problem: “Last sync wins”
-
two users open the same record, in two different moments:
let’s say an invoice, User A opens it with status OK and User B opens it with status “to process” (one step behind) -
User A decides to pay it and after that, User B decides to authorize it. Invoice is paid and then changed to be paid again.
That a typical sync changes the full record is partly to blame to this behaviour.
UnOfficial Solution (using a partial slice)
With a Form that points to a Slice, which only has some columns, AppSheet changes behaviour connecting to the server.
The JSON sent only contains those columns. Hence AppSheet engine ‘tells’ the background data-persistency platform: “Just Update these 3 cells, don’t touch the rest of the row”
More: Actions and in-line edits do the same.
ToDo (AppSheet Team please):
I did not find any documentation in AppSheet describing this.
Loosing the No-Code essence
Solving the concurrence problem, common to all multiuser database applications, is, in AppSheet obscure and little documented beyond the community.
I think it is something AppSheet has to solve: Either document it prominently to all users, or ideally, implement a native mecanism (maybe a field in colums and forms) that maybe by default all forms’ fields are sent but perhaps by alternate behavior only changing columns are.
New users don’t have easy access to this information.
Note: I am not supporting record-locking!