Scopo
Questa funzione salva il documento nello stato attuale sul database. Nota: se il documento è in stato cancellato, allora il salvataggio ne causa la cancellazione dal database.
Sintassi
boolean OK = False // Salvataggio OK?
//
OK := Documento.SaveToDB(numero livelli, rivalidazione)
//
OK := Documento.SaveToDB(numero livelli, rivalidazione)
Argomenti
| Numero Livelli | Parametro opzionale intero che specifica quali sotto-documenti devono essere salvati. Per default TUTTI i sotto-documenti modificati vengono salvati ed è bene non modificare questa impostazione. |
| Rivalidazione | Parametro opzionale booleano con valore di default True. Se impostato a False, non effettua la rivalidazione del documento prima del salvataggio. Normalmente la rivalidazione è consigliata. |
Valore di ritorno
Viene ritornato True se il documento è stato salvato correttamente, False altrimenti. In questo caso è possibile utilizzare le funzioni di gestione degli errori per estrarre gli errori avvenuti.
Procedura di salvataggio
La procedura di salvataggio viene effettuata con i seguenti passi:
- Vengono impostate le proprietà di correlazione fra documenti e sotto-documenti in modo da soddisfare i vincoli di Foreign Key del database.
- Se è stata richiesta la rivalidazione allora il documento viene rivalidato. Se ci sono errori, la procedura di salvataggio termina e ritorna False.
- Se nel database in cui il documento deve salvarsi non è stata ancora aperta una transazione, essa viene aperta ora.
- Viene notificato l'evento di BeforeSave a tutti i documenti e sotto-documenti in fase di salvataggio con parametro fase = 0 che significa PRE-SAVE. L'evento viene notificato a tutti, anche se essi non sono stati modificati.
- Viene notificato l'evento di BeforeSave a tutti i documenti e sotto-documenti in fase di salvataggio con parametro fase = 1 che significa INSERTING. L'evento viene notificato a tutti, anche se essi non sono stati modificati. Dopo la notifica, i documenti in stato inserito vengono effettivamente inseriti nel database.
- Viene notificato l'evento di BeforeSave a tutti i documenti e sotto-documenti in fase di salvataggio con parametro fase = 2 che significa UPDATING. L'evento viene notificato a tutti, anche se essi non sono stati modificati. Dopo la notifica, i documenti in stato aggiornati vengono effettivamente aggiornati nel database.
- Viene notificato l'evento di BeforeSave a tutti i documenti e sotto-documenti in fase di salvataggio con parametro fase = 3 che significa DELETING. L'evento viene notificato a tutti, anche se essi non sono stati modificati, con ordine invertito rispetto ai passi precedenti, cioè dai figli verso i padri. Dopo la notifica, i documenti in stato cancellato vengono effettivamente cancellati dal database.
- Viene notificato l'evento di AfterSave a tutti i documenti e sotto-documenti in fase di salvataggio. Dopo la notifica il documento viene reso in stato originale chiamando la SetOriginal ed impostando la proprietà Loaded a True. In questa fase i sotto-documenti cancellati vengono rimossi definitivamente dalle collection che li contengono.
- Se non ci sono stati errori e questa proceduta aveva aperto la transazione sul database, allora essa viene confermata (commit). Se ci sono stati errori invece essa viene annullata (rollback).
Note
- Il framework DO suppone che i sotto-documenti di documenti cancellati vengano eliminati automaticamente dal database tramite relazioni di tipo Delete Cascade. Se questo non può essere fatto è conveniente modificare lo stato dei sotto-documenti nell'evento di BeforeSave fase PRE-SAVE in modo da attivare la cancellazione esplicita dei sotto-documenti quando il documento padre è in stato cancellato. Vedi anche la funzione IsDeleted utile in questo contesto.
- Quando un pannello DO master salva il documento o la collection chiama internamente questa funzione.
Ultima modifica: 12/01/2023 / Validità: da 6.5.2680
funzione