Vous êtes sur le site Web historique de la documentation de 4D. Les documentations sont progressivement déplacées vers developer.4d.com

Accueil

 
4D v20 R7
OB Copier

OB Copier 


 

OB Copier ( objet {; résoudrePtrs | {; option {; grouperAvec}}} ) -> Résultat 
Paramètre Type   Description
objet  Objet, Champ objet in Objet structuré
résoudrePtrs  Booléen in Vrai = résoudre les pointeurs, Faux ou omis = ne pas les résoudre
option  Entier long in ck shared: return a shared object,
ck resolve pointers: resolve pointers before copying
grouperAvec  Collection, Objet in Collection ou objet partagé(e) à grouper avec l'objet résultant
Résultat  Objet in 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.

  • Première syntaxe : OB Copier(objet{; resoudrePtrs})

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).

 

  • Deuxième syntaxe :  OB Copier(objet{; option{; grouperAvec}})

S'il est passé, le paramètre option peut contenir l'une des constantes suivantes (ou les deux) :

optionDescription
ck resolve pointersSi 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 sharedPar 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 : 

  • OB Copier peut être utilisée avec un objet sélection d'entité. Par défaut, si ck shared est omis, une sélection d'entité non partageable est retournée. Si ck shared est passé, une sélection d'entité partageable est retournée. Dans ce contexte, l'option grouperAvec est inutile car une sélection d'entité n'a pas d'identifiant de verrouillage.
  • Le même principe s'applique aux sélections d'entités stockées à l'intérieur des propriétés de objet. Cependant, la commande est optimisée lorsque ck shared est passé et qu'une sélection d'entité imbriquée est partageable: la même référence de sélection d'entité est retournée dans l'objet résultant.
  • Les objets datastore, dataclass et entity ne sont pas copiables. Si la commande OB Copier est appelée avec eux, une valeur Null est retournée.

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



Voir aussi  

OB Lire
Objets partagés et collections partagées

 
PROPRIÉTÉS 

Produit : 4D
Thème : Objets (Langage)
Numéro : 1225
Nom intl. : OB Copy

Commande(s) éligible(s) à l'exécution dans un process préemptif

 
PAGE CONTENTS 
 
HISTORIQUE 

Créé : 4D v14
Modifié : 4D v15
Modifié : 4D v18 R3
Modifié : 4D v18 R5

 
UTILISATION DE L'ARTICLE

4D - Langage ( 4D v20 R7)