It is currently 9 June 2025, 3:09 Advanced search

Cancellazione ed inserimento in collection

Domande e risposte su come utilizzare Instant Developer Foundation al meglio

Cancellazione ed inserimento in collection

Postby g.mandoloni » 23 October 2015, 16:19

Salve,
premetto che sono un nuovissimo utente e sto cercando, in attesa di frequentare il prossimo corso di novembre, di prendere confidenza con il prodotto utilizzando la documentazione online presente sul sito.
Ho realizzato un semplice progetto di studio che contiene un documento master (derivato da una tabella esistente nel db - classica testata ordine - numordine(K), dataOrdine).
Ho creato un documento per il detail (riga ordine - numordine(K), numriga(K), codarticolo).
Ho creato una proprietà (mediante D&D in In.De.) sull'oggetto master come collection di documenti detail (foreign key (NumOrdine) presente e gli oggetti sembrano correttamente collegati).
Creo una nuova videata, trascino D&D l'oggetto TESTATA sulla videata, mi si crea il pannello di gestione delle testate ordini.
Creo un campo vuoto sulla form, vi trascino il documento RIGHE (non la proprietà della classe ma l'oggetto RIGHE come indicato nella documentazione) e correttamente ottengo il pannello per la gestione delle righe del singolo ordine.
Mi sposto sulla griglia delle testate e le righe seguono di conseguenza.
A questo punto abilito le modifiche sulle righe ordine.
Cancello una riga.
SENZA salvare
Inserisco una riga con la stessa chiave appena cancellata
ERRORE di chiave duplicata!!!
Perchè???
Probabilmente sbaglio qualcosa ma non riesco a capire dove.

Se tra la cancellazione e l'inserimento eseguo un salvataggio va tutto bene.

Riuscite a darmi una dritta?
Scusate per lunghezza del post e per il basso livello del quesito ;)
Grazie
Giacomo Mandoloni
g.mandoloni
 
Posts: 3
Joined: 12 October 2015, 8:36

Re: Cancellazione ed inserimento in collection

Postby eurekapv » 23 October 2015, 19:06

Hai fatto tutto correttamente e il problema é dovuto a:
1) Quando elimini le righe di una collection figlia, l'operazione reale sul DB non avviene subito ma quando decidi di salvare tutto il documento
2) Le righe eliminate vengono quindi per un attimo nascoste alla vista
Cosa succede al momento di salvataggio alla collection ?
La collection avrà documenti nuovi, documenti aggiornati, documenti cancellati .....e le operazioni avverranno proprio in questo ordine
- tutti i documenti nuovi vengono inseriti
- tutti i documenti modificati vengono modificati
- tutti i documenti in stato cancellato vengono eliminati fisicamente nel db

Ora é chiaro che il tuo nuovo documento (con la chiave duplicata) viene inserito prima che l'altro record venga cancellato.

Pietro
Alchimisti Lab by Cavallini Pietro
https://www.alchimistilab.it

Image
User avatar
eurekapv
 
Posts: 2450
Joined: 2 November 2010, 22:16
Location: Vigevano

Re: Cancellazione ed inserimento in collection

Postby theguru » 23 October 2015, 20:50

da quello che scrivi non capisco se in effetti stai usando la DO (e quindi i pannelli sono basati su classi) oppure l'approccio DB, e quindi saranno basati su tabelle.
Nel primo caso, visto che stai facendo pratica, spingiti un pochino oltre e comincia ad utilizzare il sistema DO_ID (integrato in inde) per la creazione di PK. ti risolverà molti problemi simili a quello che hai appena descritto, sopratutto quando le cose si complicheranno (multiutenza, sincronizzazione, creazioni e cancellazione sequenziali, etc..)
User avatar
theguru
 
Posts: 972
Joined: 29 January 2014, 13:01

Re: Cancellazione ed inserimento in collection

Postby g.mandoloni » 26 October 2015, 10:03

eurekapv wrote:Hai fatto tutto correttamente e il problema é dovuto a:
1) Quando elimini le righe di una collection figlia, l'operazione reale sul DB non avviene subito ma quando decidi di salvare tutto il documento
2) Le righe eliminate vengono quindi per un attimo nascoste alla vista
Cosa succede al momento di salvataggio alla collection ?
La collection avrà documenti nuovi, documenti aggiornati, documenti cancellati .....e le operazioni avverranno proprio in questo ordine
- tutti i documenti nuovi vengono inseriti
- tutti i documenti modificati vengono modificati
- tutti i documenti in stato cancellato vengono eliminati fisicamente nel db

Ora é chiaro che il tuo nuovo documento (con la chiave duplicata) viene inserito prima che l'altro record venga cancellato.

Pietro



Grazie della risposta...ora è chiaro il perchè dell'errore.
Avevo letto del fatto che gli elementi della collection venissero segnati come deleted e non cancellati realmente.
Mi aspettavo però, poi, che in fase di aggiornamento DB le operazioni venissero eseguite esattamente nell'ordine in cui sono state eseguite.
In questa situazione, infatti, come posso operare in transazione ? Qual è l'approccio corretto per gestire un caso simile?

Giacomo
g.mandoloni
 
Posts: 3
Joined: 12 October 2015, 8:36

Re: Cancellazione ed inserimento in collection

Postby g.mandoloni » 26 October 2015, 10:06

theguru wrote:da quello che scrivi non capisco se in effetti stai usando la DO (e quindi i pannelli sono basati su classi) oppure l'approccio DB, e quindi saranno basati su tabelle.
Nel primo caso, visto che stai facendo pratica, spingiti un pochino oltre e comincia ad utilizzare il sistema DO_ID (integrato in inde) per la creazione di PK. ti risolverà molti problemi simili a quello che hai appena descritto, sopratutto quando le cose si complicheranno (multiutenza, sincronizzazione, creazioni e cancellazione sequenziali, etc..)


Ciao,
sto usando la DO ed i pannelli sono basati su classi.
Credo di avere usato correttamente IN.DE. per creare la proprietà (Righe Ordine) della classe TESTATA che di fatto è una collection (ID_COLLECTION) di CLASSI RIGHE.

Mi sta sfuggendo qualcosa?
grazie e ciao
Giacomo.
g.mandoloni
 
Posts: 3
Joined: 12 October 2015, 8:36

Re: Cancellazione ed inserimento in collection

Postby m.sirri » 5 November 2015, 12:54

Se vuoi possiamo approfondire l'argomento in assistenza.
User avatar
m.sirri
Pro Gamma
Pro Gamma
 
Posts: 8574
Joined: 30 September 2010, 17:01
Location: Ozzano dell'Emilia (BO)


Return to Tips & Tricks - Foundation

Who is online

Users browsing this forum: No registered users and 53 guests

cron