.. _orm_genropy/triggers/trigger_intro: 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 :ref:`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'} .. sectionauthor:: Davide Paci