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