Load From DB

procedura copia link

Scopo

Questa procedura carica il documento ed eventualmente anche i sotto-documenti dal database, ricostruendo così in memoria l'immagine del documento salvata sul database.

Per operare questa funzione utilizza le proprietà valorizzate del documento come filtri di caricamento, quindi, normalmente si valorizzano le proprietà che si riferiscono alla Primary Key della tabella in cui il documento è memorizzato. Tuttavia, se la PK non è completamente definita verranno utilizzate tutte le proprietà valorizzate del documento.

Se la procedura non trova nemmeno un documento, oppure ne trova più di uno, verranno lanciate delle eccezioni, quindi è conveniente utilizzare questa procedura all'interno di un costrutto TRY/CATCH.

Sintassi

Documento.LoadFromDB(numero livelli)

Argomenti

Numero Livelli E' un parametro opzionale intero che specifica quanti livelli di sotto-documenti devono essere caricati. Se si indica ZERO verrà caricato solo il documento e non le sue collection. Se si indica ONE verranno caricate le collection di primo livello e così via. Il valore predefinito è 9999, quindi se si lascia vuoto il parametro tutto il documento verrà caricato a meno delle collection transient.

Eccezioni

Possono essere lanciate delle eccezioni se il documento specificato (identificato dalle proprietà valorizzate del documento) non viene trovato nel database, oppure se ne si trova più di uno.

Esempio di codice

// ***************************
// Test procedura LOAD FROM DB
// ***************************

public void Ordini.LoadFromDB()
{
  string idord = "" // 
  Ordine o = new()  // L'ordine da caricare
  // 
  // Chiedo il numero dell'ordine

  idord := InputBox(MSG Scrivi Numero)
  if ToString(idord) = Empty String
  {
    // Se non inserito, ritorno
    return
  }
  // 
  // Specifico la PK (il documento era vuoto, se no era meglio usare la CLEAR)

  o.Idordine := ToInteger(idord)
  // 
  // Carico il documento e le righe, potrebbe dare errore

  o.LoadFromDB(ONE)
  // 
  // Attacco il documento al pannello

  Ordine.Document := o
  Ordine.Layout := Form
}
  • Prima di utilizzare questa procedura è opportuno resettare il documento usando il metodo Clear e poi valorizzarne le proprietà che specificano cosa caricare dal database, solitamente si usa la chiave primaria.
  • Se il documento è in stato Inserted, esso non viene caricato, la procedura ritorna subito e viene inserito un messaggio nel debug.
  • Se il documento era già stato caricato (proprietà Loaded = True), allora non viene nuovamente caricato, tuttavia potrebbero essere caricati i suoi sotto-documenti che magari prima non lo erano stati.
  • Le Collection Transient del documento non vengono mai caricate da questa procedura. E' possibile caricarle da Visual Code tramite il metodo LoadCollectionFromDB. I pannelli o gli alberi DO possono effettuare il caricamento delle collection Transient.
  • L'esecuzione della procedura avviene cronologicamente in queste fasi:
    • Prima di eseguire le operazioni di caricamento viene notificato l'evento di BeforeLoad al documento, così esso può personalizzare il proprio metodo di caricamento.
    • Se la PK è completamente definita, allora viene usata quella come filtro, altrimenti verranno utilizzate tutte le proprietà valorizzate.
    • Potrebbero essere aggiunte ulteriori clausole di filtro se il documento ha alcuni servizi documentali attivi, quali il servizio domini o la cancellazione logica.
    • Durante il caricamento del documento tutti gli eventi congelabili vengono sospesi.
    • Dopo aver impostato tutti i valori delle proprietà, il documento viene reso originale, chiamando internamente la procedura SetOriginal.
    • Dopo aver caricato il documento si passa al caricamento dei sotto-documenti (vedi LoadCollectionFromDB per sapere come), e al termine, se il documento è effettivamente stato caricato, viene notificato l'evento di AfterLoad al documento.
  • Attenzione: durante le sessioni di sincronizzazione lato server (OnSynchronize, OnSyncQuery, OnResyncClient, GetLock e ReleaseLock) e quindi in tutti gli eventi che vengono notificati durante la richiesta, questo metodo non genera eccezione in caso di documento non trovato. Per verificare il corretto caricamento del documento è possibile utilizzare la proprietà Loaded.
  • Attenzione: dalla versione 13.0 la nota precedente non è più vera per le query remote.

Ultima modifica: 22/09/2021 / Validità: da 6.5.2680