English
Instant Developer Foundation Documentazione
  • Reference Librerie
  • Document Orientation
  • ID Document
  • Data Base

Get Lock

funzione copia link

Scopo

Questa funzione consente di prendere un lock sul documento da Visual Code. Può essere utile per verificare se un documento può essere modificato prima di farlo all'interno di un algoritmo in memoria tenendo conto anche che se il lock non può essere preso, il documento comunque rifiuterà le modifiche.

Sintassi

boolean b = 0     // Lock preso?
// 
b := Documento.GetLock(numero livelli, info utente, info lock)

Argomenti

Numero Livelli E' un paramento opzionale intero che di solito viene lasciato vuoto o impostato a 9999. Se il documento non supporta i lock, allora il sistema risale la catena dei documenti padre in memoria per vedere se qualcuno di essi gestisce il locking. Questo parametro pone un limite a questo controllo, tuttavia è buona norma controllare tutta la catena dei padri anche perchè l'operazione è istantanea.
Info Utente E' un parametro opzionale di tipo stringa che è possibile usare per inviare al sistema di gestione dei locking le informazioni sull'utente e sulla procedura in corso. Normalmente viene lasciato vuoto perchè il sistema di gestione dei lock è in grado di recuperare queste informazioni in autonomia.
Info Lock E' un parametro di output di tipo stringa. Se valorizzato deve quindi essere impostato usando una variabile String. Se il lock non può essere preso, il sistema di gestione del locking scrive in questa variabile le informazioni su chi sta modificando il documento.

Valore di ritorno

Viene ritornato True se il lock è stato preso, False altrimenti. La proprietà Locked ci ricorda se il documento è già stato prenotato per la modifica o meno.

Note

  • Per far sì che la gestione dei lock sia effettiva occorre impostare il servizio di Document Locking sulla classe che implementa il documento (o uno dei suoi padri), poi creare una classe Document Helper e gestire gli eventi GetLock e ReleaseLock della stessa.
  • Se un documento ha già un lock questa funzione ritorna True senza fare ulteriori operazioni.
  • Se nè il documento nè alcuno dei suoi padri gestisce il locking, la funzione ritorna True perchè non ci sono problemi di locking in questo caso.
  • I pannelli DO usano questa funzione per controllare se un documento può essere modificato dall'utente e la chiamano non appena l'utente comincia a modificare i dati.
  • Se un documento è in stato Inserted questa funzione ritorna True senza fare ulteriori operazioni. In questo stato infatti nessun'altra sessione applicativa è a conoscenza dell'esistenza del documento e quindi non c'è bisogno di prendere il lock.

Esempio di codice

// ****************************
// Called when a form is loaded
// ****************************

event Prodotto2.Load()
{
  Prodotto p = new() // What data will you store here?
  // 
  // Carico il prodotto...

  p.Id := ONE
  p.LoadFromDB(??)
  // 
  // Se posso modificare il prodotto...

  if p.GetLock(??, ??, ??)
  {
    p.BeginTransaction()
    // 
    ... Eseguo le modifiche sul prodotto ...
    {
    }
    // 
    // Concludo e salvo

    p.EndTransaction()
    p.SaveToDB(??, ??)
    // 
    // E rilascio il lock

    p.ReleaseLock(??)
  }
}

Nell'esempio di codice viene esemplificata la procedura di modifica di un documento che tiene conto del locking. Il documento avrebbe comunque rifiutato le modifiche se non poteva essere bloccato.

Ultima modifica: 11/01/2023 / Validità: da 8.0.3560

Vedi Anche

  • Get Lock (evento)
  • Locked (proprietà)
  • Release Lock (evento)
  • Inserted (proprietà)
  • Scarica il progetto EsempiAM.zip

Hai trovato utile l'articolo?

Grazie per il feedback!

Ti serve altro aiuto?

Consulta il Forum