currentTrigger¶
Ogni trigger mette a disposizione il metodo hook currentTrigger
, che permette di eseguire operazioni di controllo in merito alla tabella, al record, o a un eventuale Trigger genitore.
Supponiamo per esempio di avere una tabella fattura
e una fattura_riga
, esattamente come in Sandbox. Grazie al trigger_onDeleted
sarà possibile innescare il ricalcolo del totale della fattura in caso di cancellazione di una riga:
def trigger_onDeleted(self,record=None):
self.aggiornaFattura(record)
Tuttavia, in caso di cancellazione di una fattura, la presenza di un meccanismo di cancellazione di tipo cascade andrebbe a innescare anche questo trigger, che però andrebbe in errore, non essendoci più una fattura da aggiornare. Ecco che sfruttando il metodo hook currentTrigger
possiamo intervenire e imporre un controllo:
def trigger_onDeleted(self,record=None):
if self.currentTrigger.parent:
return
self.aggiornaFattura(record)
Se quindi verrà individuato un parent
, ovvero il trigger in questione verrà innescato da un altro trigger genitore (in questo caso quello della tabella fattura), richiederemo di non eseguire alcuna operazione.
Suggerimento
Si noti che per avere un parent non è necessario definire un trigger_
nella tabella genitore, in quanto verrà comunque innescato il trigger standard (che non esegue alcuna operazione).
Oltre a parent
, il currentTrigger
ci permette di esplorare anche la table e il record:
def trigger_onDeleting(self,record=None):
if self.currentTrigger.table == 'fatt.fattura':
return
self.aggiornaFattura(record)
Autore della sezione: Davide Paci