[genropy] Re: Trigger onXXXing, come si ferma l'operazione?

  • From: Giovanni Porcari <giovanni.porcari@xxxxxxxxx>
  • To: genropy <genropy@xxxxxxxxxxxxx>
  • Date: Fri, 25 Nov 2016 10:26:44 +0100


Il giorno 25 nov 2016, alle ore 10:07, Massimo Masson <max@xxxxxxxxxxxxxxx> 
ha scritto:

Se avessi bisogno di interrompere l'operazione di on[Insert|Updat|Delet]ing, 
in modo che ad esempio al verificarsi di una condizione NON si proceda con la 
creazione/modifica/cancellazione, cosa devo fare nel trigger?



La cosa migliore è sollevare un'eccezione.

def trigger_onInserting(self,record):
    if record['foo'] > 33:
        raise self.exception('protect_update',record=record,
                                 msg='!!Foo value is %(foo)s and exceed max 
value 33')


i tipi di eccezione predefiniti li trovi in gnr.sql.gnrsqltable :

EXCEPTIONS = {'save': GnrSqlSaveException,
              'delete': GnrSqlDeleteException,
              'protect_update': GnrSqlProtectUpdateException,
              'protect_delete': GnrSqlProtectDeleteException,
              'protect_validate': GnrSqlProtectValidateException,
              'business_logic':GnrSqlBusinessLogicException,
              'standard':GnrSqlStandardException,
              'not_existing_column':GnrSqlNotExistingColumnException}

Quindi :
raise self.exception('protect_update',record=record,
                                 msg='!!Foo value is %(foo)s and exceed max 
value 33')

Significa che verrà lanciata un eccezione GnrSqlProtectUpdateException con un 
messaggio
parametrico che può includere campi del record stesso (in questo caso ad 
esempio 'foo').

Nota che il messaggio passa nel record di localizzazione e diventa un avviso 
per l'utente.


In realtà, invece di intervenire nel trigger esistono anche la possibilità di 
definire dei metodi specifici del tipo 'protect_'
Ovvero protect_insert, protect_update, protect_delete.

Quindi nel caso di prima avresti potuto fare:

def protect_insert(self,record):
    if record['foo'] > 33:
        raise self.exception('protect_update',record=record,
                                 msg='!!Foo value is %(foo)s and exceed max 
value 33')


Se hai altre domande chiedi pure


Ciao

G
 




Other related posts: