There are simple (maybe) ways to handle both your needs.
The “maybe” is that both require PA keys, not PF keys.
The difference is that PA keys are acted upon before data is transferred from the screen, while PF keys transfer data before acting on the key.
There is a little known Natural “goodie”, %R. If you equate this Terminal Command to a PA key, you now have a RESET of all the screen values.
Why is this so good? You can have a PA key set to %R, with, of course, suitable instructions on the map how to invoke a PA key (may be necessary depending on the terminal emulator you use).
The user accidently re-enters a set of data they have already processed. All the user has to do is hit the appropriate PA key before hitting either enter or a PF key, and presto, the screen is back to the way it was when first displayed.
Now for the Cancel (which I presume is escape back to the program) function.
In your program make a PA key program sensitive, say PA3.
In the PF key processing rule in the Map, code:
IF *PF-KEY = ‘PA3’
Now run the program; enter 11111 into an N2.2 field; hit PA3; you will be back in your program.