Titolo: Duplicazione RECORD con SUBRECORD
Categoria: Tecniche |
|
Ultimo Aggiornamento: 20/04/13 |
Le nuove versioni di 4D non duplicano piu' i subrecord all'interno del record ed il campo id_added_by_converter non e' editabile, ne avevo necessita' per cui ho fatto questa routine (spero esista un metodo piu' semplice)
Occorre preventivamente creare un set del record da duplicare ed un set del record duplicato (ricordarsi di cancellarli al termine) poi :
DuplicaSubrecords (->[TABLE];->[TABLE]Subrecord;->[TABLE_Subrecord];->[TABLE_Subrecord]id_added_by_converter)
// DUPLICAZIONE SUBRECORDS
$p_TABLErecord:=$1 // Puntatore alla Tabella RECORD
$p_TABLEsubrecord:=$2 // Puntatore al campo SUBRECORD DEL RECORD
$p_TABLENewsubrecord:=$3 // Puntatore alla Tabella NEW SUBRECORD
$p_Id:=$4 // Puntatore al campo id_added_by_converter
$NumeroTABLE:=Table($p_TABLENewsubrecord)
USE SET("OLD") // Richiamo il record originale
QUERY($p_TABLENewsubrecord->;$p_Id->=Get subrecord key($p_TABLEsubrecord->))
$NumeroSubrecords:=Records in selection($p_TABLENewsubrecord->)
If ($NumeroSubrecords>0)
USE SET("NEW") // Richiamo il record copia
For ($i;1;$NumeroSubrecords)
CREATE SUBRECORD($p_TABLEsubrecord->) // Creo l'aggancio al record
End for SAVE RECORD($p_TABLErecord->)
USE SET("OLD")
$NumeroCampi:=Get last field number($p_TABLENewsubrecord)
ARRAY POINTER($p_ElementoCampo;$NumeroSubrecords*$NumeroCampi)
For ($i;1;$NumeroSubrecords)
$P_RECORD:=($i-1)*$NumeroCampi
For ($k;1;$NumeroCampi)
$P_Vettore:=$P_RECORD+$k // Calcolo l'elemento del vettore
$p_ElementoCampo{$P_Vettore}:=Get pointer("$var_"+String($k)) // Associo il puntatore
$p_Campo:=Field($NumeroTABLE;$k) // Puntatore al campo da prelevare
$p_ElementoCampo{$P_Vettore}->:=$p_Campo-> // Momorizzo il valore del campo sulla variabile
End for NEXT RECORD($p_TABLENewsubrecord->)
End for USE SET("NEW")
QUERY($p_TABLENewsubrecord->;$p_Id->=Get subrecord key($p_TABLEsubrecord->))
$NumeroSubrecords:=Records in selection($p_TABLENewsubrecord->)
ON ERR CALL("ErrorIdSubrecord") // Filtra Errore su assegnazione campo id_added_by_converter (Metodo ErrorIdSubrecord VUOTO)
For ($i;1;$NumeroSubrecords)
$P_RECORD:=($i-1)*$NumeroCampi
For ($k;1;$NumeroCampi)
$P_Vettore:=$P_RECORD+$k // Calcolo l'elemento del vettore
$p_Campo:=Field($NumeroTABLE;$k) // Puntatore al campo da assegnare
$p_Campo->:=$p_ElementoCampo{$P_Vettore}-> // Assegno il valore dalla variabile al campo
End for SAVE RECORD($p_TABLENewsubrecord->)
NEXT RECORD($p_TABLENewsubrecord->)
End for UNLOAD RECORD($p_TABLENewsubrecord->)
ON ERR CALL("")
SAVE RECORD($p_TABLErecord->) // Forse non serve
End if
Inviato da: Franco Gallai |
|
Visite: 15902 |
Se accedi con utente e password, puoi aggiungere dei commenti.