[genropy] Re: Problema su trigger_onUpdated

  • From: Luigi Renna <luigi@xxxxxxxxxxxxx>
  • To: genropy@xxxxxxxxxxxxx
  • Date: Fri, 11 Nov 2016 11:02:14 +0100

Chiarissimo, velocissimo e cortese come sempre.

Grazie di tutto.


Il 10/11/2016 21:33, Giovanni Porcari ha scritto:

Il giorno 10 nov 2016, alle ore 20:45, Luigi Renna <luigi@xxxxxxxxxxxxx> ha 
scritto:

Questo trigger_onUpdated mi da questo errore, le stesso nel trigger_onInserted 
funziona perfettamente, dove sbaglio.

RuntimeError: maximum recursion depth exceeded while calling a Python object

     def trigger_onUpdated(self, recordSocio=None, old_record=None):
         pkey = recordSocio['id']
         if recordSocio['tiposocio'] == 'F':
             ordinamento = recordSocio['denominazione']
         elif recordSocio['tiposocio'] == 'G':
             ordinamento = recordSocio['rappresentante_legale']
         else:
             pass
         with self.recordToUpdate(pkey) as record:
             record['ordinamento'] = ordinamento


Di norma si preferisce usare i trigger onUpdating e onInserting perchè 
avvengono PRIMA della scrittura effettiva.

Nel tuo caso potresti fare :

def trigger_onInserting(self, record):
         self.setOrdinamento()

def trigger_onUpdating(self, record, old_record=None):
         self.setOrdinamento()

def setOrdinamento(record):
     if record['tiposocio'] == 'G'
         record['ordinamento'] = record['rappresentante_legale']
     else :
         record['ordinamento'] = record['denominazione']

Cioè sia il trigger_onInserting che il trigger_onUpdating chiamano un metodo che
definisci nella table stessa e che sistema il campo 'ordinamento' prima che il 
record venga scritto.

Se usi i trigger in 'ed' invece di quelli in 'ing' ti posizioni dopo e allora 
devi fare una seconda scrittura.
Ovviamente, nel tuo caso, questa seconda scrittura innescava di nuovo il 
trigger. E via dicendo.




Se infece foessi creare una formulaColumn che contenga il valore del campo 
denominazione o rappresentate legale al variare del campo persona giurdica è 
possibile?
Grazie

Hai intuito correttamente. Per fare quello che desideri potresti non creare la 
colonna reale 'ordinamento ma scrifere:

tbl.formulaColumn('ordinamento', """CASE WHEN $tiposocio ='G' THEN 
$rappresentante_legale
                                          ELSE $denominazione
                                     END""", name_long ='Ordinamento')


Spero ti sia tutto chiaro. Nel caso chiedi pure.



Ciao

G





Other related posts: