Vin/Geoff,
OK it's been a while since my last post - but I think I can help with this one…maybe
We used the hook route on;
HR_PERSON_ABSENCE_BK1.CREATE_PERSON_ABSENCE_B
HR_PERSON_ABSENCE_BK2.UPDATE_PERSON_ABSENCE_B
and here's a sample from our exception block which uses registered custom message;
EXCEPTION
WHEN e_overlap_error THEN
hr_utility.set_message (20010,'XXPER_88888_SSP_ABS_OVERLAP');
hr_utility.raise_error;
WHEN e_asg_overlap_error THEN
hr_utility.set_message (20010,'XXPER_88889_ASG_ABS_OVERLAP');
hr_utility.raise_error;
WHEN OTHERS THEN
hr_utility.set_message (20010,'XXPER_88899_ORACLE_ERROR');
hr_utility.set_message_token ('PROCEDURE',g_package||'.'||lv_proc);
hr_utility.set_message_token ('LOCATION',g_location );
hr_utility.set_message_token ('ORA_MESG',SQLERRM);
hr_utility.raise_error;
END check_for_overlap_ins;
These errors appear at the top of the page just like the standard ones (lovely job).
I think the only words of wisdom I can offer is watch out for any approval hierarchy shenanigans records end up in the transaction tables and it can all get a bit messy.
HTH
Jay