E anche stavolta per la serie "Non riesco a capire perché ogni tanto succede e ogni tanto no", mi trovo con una classe figlia con i campi della FK verso il padre non valorizzati.
Ho una gerarchia master-detail semplice, classi DO create trascinando tabella, collection figli creata trascinando classe figlia su padre, tutto nella norma...
Non ho una videata perché devo fare questa operazione in batch, quindi non ho provato se "a mano" funziona.
Da codice richiamo una funzione a cui passo i dati di testa e una collection di righe (per intenderci tipo l'evasione di un ordine).
- creo la testa valorizzando tutti i dati che mi servono (compresi i campi della chiave primaria composta, eh, qui non ho DocID purtroppo), debuggando ho avuto la certezza che tutto fosse valorizzato come dovrebbe.
- ciclo foreach sulla collection di origine, istanzio una classe detail per ogni record e la aggiungo alla collection del padre nel seguente modo:
- Code: Select all
foreach doc in coll
var figlio = new()
figlio.init()
padre.dettaglio.add(figlio)
figlio.beginTransaction()
figlio.prop1 = doc.prop1
...
figlio.validate(1,0)
E ottengo "il campo xyz non può essere null" per ogni campo della FK verso il padre.
Devo gestirli su onAddChild come ho dovuto fare in altre occasioni (ma non tutte!)?
Ovviamente già provato a disattivare freezeEvents sia su master che su detail e cambiare validazione da 1 a 0, spostato anche l'add sulla collection dentro e fuori transazione...
Sono abbastanza sicuro che il framework lo faccia da solo, solo che non so quando lo fa, probabilmente su beforeSave perché fino a quel momento la chiave può ancora cambiare e quindi deve propagarla ai figli nel momento giusto.
Solo che ho la necessità di validare tutto prima di tentare di salvare.
PS: stessa cosa sta succedendo al collega, lì lavora con DocID