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