Introduzione¶
I trigger sono una serie di metodi di hook che scattano automaticamente alle operazioni di inserimento, modifica o eliminazione di un record:
trigger_onInserting
/trigger_onInserted
trigger_onUpdating
/trigger_onUpdated
trigger_onDeleting
/trigger_onDeleted
Questi metodi vengono eseguiti rispettivamente prima e dopo l’inserimento o modifica del record e ricevono come parametro il record.
I metodi che terminano in «ing» vengono eseguiti prima della scrittura effettiva (l’operazione di insert
, di update
, o di delete
), e tipicamente si usano per effuare controlli o calcolare il valore di colonne in modo automatico secondo la business logic di applicazione. Possono quindi essere usati per:
effettuare controlli su dati da scrivere
modificare i dati da scrivere
effettuare calcoli su dati da scrivere
I metodi che terminano in «ed» vengono invece eseguiti dopo la scrittura (l’operazione di insert
, di update
, o di delete
), e possono innescare operazioni su altre tabelle, ma non su quella dove è definito. Possono quindi essere usati per:
effettuare operazioni su altre tabelle come conseguenza di un inserimento/aggiornamento
Ad esempio, vediamo come usare un trigger_onInserting
per modificare in modo automatico un record in corso di inserimento:
def trigger_onInserting(self, record):
record['description'] = record.get('description') or 'UNKNOWN'
All’inserimento di un record senza il valore “description”, questa verrà settata ad “UNKNOWN”:
unknown_rec = dict()
foo_tbl.insert(unknown_rec)
print (unknown_rec)
{'serial_number': 9, '__ins_ts': datetime.datetime(2020, 5, 25, 18, 22, 38, 312083), '__mod_ts': datetime.datetime(2020, 5, 25, 18, 22, 38, 312137), '__ins_user': None, 'description': 'UNKNOWN', 'iniziale': 'U'}
Autore della sezione: Davide Paci