Actually another way of doing this would be to create a new BTE function module instead. You can control the timing so that the function module will only fire once upon save if you configure the correct event timing.
To find out more on how to use this do a search here on CRMV_EVENT or run that transaction code in your system and click on "read this information".
For a bigger hint you would target:
Transaction Category - BUS20001 - or specific category that you need.
Execution TIme - 78 Before Saving
Object - ORDERADM_H
Event - BEFORE_SAVE
Attribute <*>
or perhaps
Execution TIme 88
Object ORDERADM_H
Event - INIT
or even:
Execution time - immediately
Object ORDERADM_H
Event AFTER_Create
In either case the call callback would be of type C call once per transaction
I would do an CRMV_EVENT_TRACE to figure out where to put this, but that's my best ideas.
Take care,
Stephen