I am building an application with a similar requirement. Here is what
I did.
I created a form that sets the "Navigation buttons" property of the
form to NO. Then I set up the form with my own buttons that are to be
used to UNDO data entry, CANCEL the form, or SAVE the data.
When the form first loads, the UNDO and SAVE buttons are set ENABLED =
FALSE. Only the CANCEL button is set ENABLED = TRUE.
As soon as a user makes an entry into any field, then I set ENABLED =
TRUE for the UNDO button. This is done with a line of code in the
"FORM_OnDirty" event.
I identified / determined the fields that are required for the users
to enter.
I created a function called DataOK() as Boolean.
Then in the "OnChange" event for each field I make a call to DataOK.
What this function does is it checks the values entered into each
required field. If any required field is NULL, EMPTY, or has an
invalid entry, then it returns FALSE. It returns TRUE only if there
is a valid entry in each of the required fields.
Then, still in the OnChange event for each field, if DataOK = TRUE, I
set ENABLED = TRUE for the SAVE button. Otherwise I set ENABLED =
FALSE (in case they changed a previously-valid entry). So when all
fields are valid then DataOK = TRUE and the SAVE button is enabled for
them to click on it to save the record.
Then if a user clicks on the SAVE button, in the SAVE_Click event I do
the additional data activities (such as generating the next unique
sequential record identifier, in this case a document reference) and I
save the record.
It sounds like maybe a lot of work and maybe there's an easier way to
do it, but this works pretty well for this application.
Hope this helps.