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