Recently, @ta-aoki and I had a discusssion during Office Hours that I thought would be useful to raise here for feedback as a product suggestion. This topic revolves around data validation.
Consider the following scenario: I want to make an App that simply retrieves some contact information about a person from a Tulip Table (e.g. email address, phone, name) and allows me to edit this information. I make some text input widgets and tie their source directly to the Record Placeholder fields.
Perhaps I want to add some data validation - such as enforcing a proper email address format of âx@y.z
â. However, two issues occur:
- Iâm unable to actually affect change due to the validation rule running unless that change happens in a Trigger somewhere.
- Currently, data validation runs on every input to the text input widget, so the validation will kick on every intermediate keystroke before I have the full input.
Both of these issues lead me to believe that I instead need to make the text input widgets have an intermediate variable as their source, and then I need a button somewhere else that checks the validation status of the input before âcommittingâ it to the table.
However, this has its own problems - now I need 2n Triggers for n inputs, as each input needs both a âpull from table recordâ and a âpush to table recordâ trigger! My app is now becoming much more sluggish and hard to manage.
My suggestion: Data validation rules need to, in some cases (perhaps as an option), be able to:
- Only run when the data entry is completed - such as when the input field is de-focused. This will allow us to avoid the âfalse positivesâ that throw when weâre in the middle of typing an entry.
- When triggered, revert or block the data entry. This will allow us to tie the Input Widget to the Table directly with the knowledge that the Table data is still âcleanâ because of the validation rule.
(Note - basically, what this is asking is for us (Tulip) to âin-houseâ the have-an-intermediate-variable-holding-the-old-input-state process)
Have you ran into this issue? Would this be helpful for you? Have you seen it done a different way? Let us know!