%On... callbacks are served and integrated into he OBJECT world and typically don't care about any Trigger.
Triggers live in the SQL TABLE world of your class, with a hand full off %-variables unknown at the Object side
and without an actual instance of object but directly writing to Globals. Take a look to the generated .INT code of your class and see what you have at hands.
I always found it quite ambitious to attempt a common code of both sides when directly changing Objects or Tables.
- for SQL access have Triggers
- for Object access have your %On* methods
Applies only before 2014.1 as pointed out.
But Trigger code doesn't look much better.