Hi Simon,
The CANCEL button only clears the buffer value of the screen and reverts back to the values currently in the database.
You should use the revert method of the bol core to revert an entity to DB values. This is the standard method :
lr_core ?= cl_crm_bol_core=>get_instance( ).
lr_transaction ?= lr_core->get_transaction( ).
lr_transaction->revert( ).
/Hasan