Scopo
Restituisce una copia dell'intero documento. Questa funzione viene usata, ad esempio, dai pannelli basati su documenti (DO) quando l'utente clicca sul comando Duplica (Shift+F7).
Sintassi
Copia := Documento.Duplicate(max levels, parent collection, flag copy)
Argomenti
Max Levels | Parametro opzionale intero che specifica il numero di livelli che devono essere duplicati. Se vale ZERO allora verrà copiato solo il documento e non quelli contenuti nelle sue collection; se vale UNO allora verra duplicato anche il contenuto delle collection del documento; se vale 9999, valore di default, verranno duplicati tutti i livelli della gerarchia documentale. |
Parent Collection | Parametro opzionale che specifica la collection a cui deve essere aggiunto il documento duplicato. Se lasciata vuota, il duplicato non verrà aggiunto a nessuna collection. |
Flag Copy | Parametro opzionale booleano con valore di default falso. Se valorizzato a True, allora verrà aggiunta la scritta (copia) alla proprietà descrittiva più lunga nel documento duplicato. Le proprietà descrittive sono quelle che derivano da campi del database che hanno il flag "Describe Row" attivo. |
Copy Private | Parametro opzionale booleano con valore di default falso. Se valorizzato a True indica se occorre copiare anche le proprietà private. |
Copy Object | Parametro opzionale booleano con valore di default falso. Se valorizzato a True indica se occorre copiare anche le proprietà di tipo oggetto. |
Valore di ritorno
Viene ritornato il documento duplicato.
Esempio di codice
// ***************************************************
// Fired when a panel command is about to be executed.
// ***************************************************
event Ordini.RigaOrdine.OnCommand(
int Command // Command issued
inout boolean Cancel // Set to TRUE to cancel the command
)
{
// Voglio gestire io la duplicazione della riga
if Command = Duplicate
{
RigaOrdine r = null // La riga da duplicare
//
Cancel := True
r := RigaOrdine.Document
//
// Se c'è la riga...
if NOT(r IS Null Object)
{
RigaOrdine nuova = null // La riga duplicata
//
// La duplico, inserendo il nuovo documento nella mia stessa collection, cioè avendolo
// come mio fratello
nuova := r.Duplicate(C9999, r.ParentCollection(), ??)
}
}
}
// Fired when a panel command is about to be executed.
// ***************************************************
event Ordini.RigaOrdine.OnCommand(
int Command // Command issued
inout boolean Cancel // Set to TRUE to cancel the command
)
{
// Voglio gestire io la duplicazione della riga
if Command = Duplicate
{
RigaOrdine r = null // La riga da duplicare
//
Cancel := True
r := RigaOrdine.Document
//
// Se c'è la riga...
if NOT(r IS Null Object)
{
RigaOrdine nuova = null // La riga duplicata
//
// La duplico, inserendo il nuovo documento nella mia stessa collection, cioè avendolo
// come mio fratello
nuova := r.Duplicate(C9999, r.ParentCollection(), ??)
}
}
}
- Se il documento originale non era ancora stato caricato del tutto in memoria, allora verrà duplicata solo la parte caricata.
- Il documento duplicato ed i suoi sotto-documenti vengono tutti posti in stato Inserted e sono così pronti per essere salvati, e quindi inseriti, sul database.
- Per ogni documento che supporta il servizio di identificazione documentale, il DocID viene rigenerato in modo da essere sempre univoco. In questi casi, quindi, non è necessario preoccuparsi della gestione delle chiave primarie del documento duplicato.
- Al momento del salvataggio, le relazioni fra i nuovi documenti vengono comunque rigenerate in modo da soddisfare le relazioni (Foreign Key) fra i vari sotto-documenti appena copiati.
- Dopo aver duplicato ogni oggetto appartenente alla gerarchia, viene notificato l'evento di OnDuplicate al documento copiato in modo da poter gestire eventuali modifiche programmatiche.
- Attenzione: la funzione duplicate NON copia proprietà di tipo oggetto (pubbliche o private) e NON copia proprietà private di qualunque tipo esse siano. In versione 22.0 sono stati aggiunti i parametri CopyPrivate e CopyObject che permettono di indicare al sistema se effettuare o meno la copia delle proprietà private e/o di tipo oggetto.
Ultima modifica: 03/01/2022 / Validità: da 6.5.2680