Vous êtes sur le site Web historique de la documentation de 4D. Les documentations sont progressivement déplacées vers developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
OB Copier
|
OB Copier ( objet {; résoudrePtrs | {; option {; grouperAvec}}} ) -> Résultat | ||||||||
Paramètre | Type | Description | ||||||
objet | Objet, Champ objet |
![]() |
Objet structuré | |||||
résoudrePtrs | Booléen |
![]() |
Vrai = résoudre les pointeurs, Faux ou omis = ne pas les résoudre | |||||
option | Entier long |
![]() |
ck shared: return a shared object, ck resolve pointers: resolve pointers before copying |
|||||
grouperAvec | Collection, Objet |
![]() |
Collection ou objet partagé(e) à grouper avec l'objet résultant | |||||
Résultat | Objet |
![]() |
Copie de objet | |||||
La commande OB Copier retourne un objet contenant une copie complète des propriétés, sous-objets et valeurs de objet.
Si objet contient des valeurs de type pointeur, par défaut la copie contient également les pointeurs. Vous pouvez cependant résoudre les pointeurs au moment de la copie : pour cela, passez Vrai dans le paramètre résoudrePtrs. Dans ce cas, chaque pointeur présent comme valeur dans objet sera évalué au moment de la copie et sa valeur dépointée sera utilisée.
Note : Si les propriétés de objet sont des objets partagés ou des collections partagées, elles sont transformées en objets ou collections standard (non partagés) dans la copie. Utilisez la deuxième syntaxe si vous souhaitez retourner des éléments partagés (voir ci-dessous).
S'il est passé, le paramètre option peut contenir l'une des constantes suivantes (ou les deux) :
option | Description |
ck resolve pointers | Si l'objet d'origine contient des valeurs de type pointeur, par défaut la copie contient également les pointeurs. Toutefois, vous pouvez résoudre les pointeurs au moment de la copie, en passant ck resolve pointers. Dans ce cas, chaque pointeur contenu dans l'objet est évalué lors de la copie et sa valeur déréférencée est utilisée. |
ck shared | Par défaut, OB Copier retourne un objet standard (non partagé), même si la commande s'applique à un objet partagé. Passez la constante ck shared pour créer un objet partagé. Dans ce cas, vous pouvez utiliser le paramètre grouperAvec pour associer l'objet partagé avec un(e) autre collection/objet (voir ci-sessous). |
Le paramètre grouperAvec vous permet de désigner une collection ou un objet auquel/à laquelle l'objet résultant sera associé.
Notes :
Vous souhaitez dupliquer un objet contenant des valeurs simples :
C_OBJET($Object)
C_TEXTE($JsonString)
TABLEAU OBJET($arraySel;0)
TOUT SELECTIONNER([Product])
Tant que(Non(Fin de selection([Product])))
OB FIXER($Object;"id";[Product]ID_Product)
OB FIXER($Object;"Product Name";[Product]Product_Name)
OB FIXER($Object;"Price";[Product]Price)
OB FIXER($Object;"Tax rate";[Product]Tax_rate)
$ref_value:=OB Copier($Object) //copie directe
AJOUTER A TABLEAU($arraySel;$ref_value)
//le contenu de $ref_value est identique à celui de $Object
ENREGISTREMENT SUIVANT([Product])
Fin tant que
//le contenu de $ref_value
$JsonString:=JSON Stringify tableau($arraySel)
Vous dupliquez un objet contenant des pointeurs (première syntaxe) :
C_OBJET($ref)
OB FIXER($ref;"name";->[Company]name) //objet avec pointeurs
OB FIXER($ref;"country";->[Company]country)
TABLEAU OBJET($sel;0)
TABLEAU OBJET($sel2;0)
TOUT SELECTIONNER([Company])
Tant que(Non(Fin de selection([Company])))
$ref_comp:=OB Copier($ref) // copie sans évaluation des pointeurs
//$ref_comp={"name":"->[Company]name","country":"->[Company]Country"}
$ref_comp2:=OB Copier($ref;Vrai) //copie avec évaluation des pointeurs
//$ref_comp={"name":"4D SAS","country":"France"}
AJOUTER A TABLEAU($sel;$ref_comp)
AJOUTER A TABLEAU($sel2;$ref_comp2)
ENREGISTREMENT SUIVANT([Company])
Fin tant que
$Object:=JSON Stringify tableau($sel)
$Object2:=JSON Stringify tableau($sel2)
// $Object = [{"name":"","country":""},{"name":"","country":""},...]
// $Object2 = [{"name":"4D SAS","country":"France"},{"name":"4D, Inc","country":"USA"},{"name":"Catalan","country":"France"}...]
Nous souhaitons copier l'objet standard (non partagé) $person dans l'objet partagé $sharedObject. Pour ce faire, nous devons créer une copie partagée de l'objet ($sharedObject).
C_OBJET($person;$copy;$sharedObject)
C_TEXTE($text)
$text:=Document vers texte(Dossier 4D(Dossier Resources courant)+"person.txt")
$person:=JSON Parse($text) //$person est un objet standard
$sharedObject:=Creer objet partage()
$copy:=OB Copier($person;ck shared) //$copy est un objet partagé
//Il peut alors être inséré dans $sharedObject
Utiliser($sharedObject)
$sharedObject.person:=$copy
Fin utiliser
$obj contient un pointeur (propriété "name") sur le champ "name" de l'enregistrement courant.
C_OBJET($obj;$objWithPtr;$sharedObjWithPtr)
$obj:=Creer objet()
//$obj est un objet avec un pointeur
OB FIXER($obj;"name";->[Persons]name)
TOUT SELECTIONNER([Persons])
//Il existe maintenant un enregistrement courant sur la table [Persons] donc [Persons]name est rempli
//
// Si nous voulons copier $obj comme objet standard avec évaluation des pointeurs
// Nous faisons comme suit :
$objWithPtr:=OB Copier($obj;Vrai)
//
// Si nous voulons copier $obj comme objet partagé avec évaluation des pointeurs
// Nous faisons comme suit :
$sharedObjWithPtr:=OB Copier($obj;ck resolve pointers+ck shared)
Nous souhaitons copier $sharedObj dans $sharedColl. Etant donné qu'ils appartiennent à différents groupes partagés, une copie directe pourrait générer une erreur. Nous devons effectuer une copie de $sharedObj et désigneR $sharedColl comme étant un groupe partagé de la copie.
C_OBJET($sharedObj;$objCopy)
C_COLLECTION($sharedColl)
//$sharedObj appartient à un groupe partagé
$sharedObj:=Creer objet partage("lastname";"Smith";"address";Creer objet partage("city";"New York"))
//$sharedColl appartient à un autre groupe partagé
$sharedColl:=Creer collection partagee(Creer objet partage("lastname";"Brown"))
$objCopy:=OB Copier($sharedObj;ck shared;$sharedColl)
//$objCopy est maintenant dans le même groupe partagé que $sharedColl
//$objCopy peut alors être inséré dans $sharedColl sans erreur
Utiliser($sharedColl)
$sharedColl.push($objCopy)
Fin utiliser
Produit : 4D
Thème : Objets (Langage)
Numéro :
1225
Nom intl. : OB Copy
Créé : 4D v14
Modifié : 4D v15
Modifié : 4D v18 R3
Modifié : 4D v18 R5
4D - Langage ( 4D v20 R7)