[genropy] Re: Problema su trigger_onUpdated

  • From: Giovanni Porcari <giovanni.porcari@xxxxxxxxx>
  • To: genropy <genropy@xxxxxxxxxxxxx>
  • Date: Thu, 10 Nov 2016 21:33:18 +0100


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: