Dies ist die alte 4D Dokumentations-Website. Die neue und aktualisierte Dokumentation finden Sie unter developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
OB Copy
|
OB Copy ( Objekt {; ZeigerAuflösen | {; Option {; GruppierenMit}}} ) -> Funktionsergebnis | ||||||||
Parameter | Typ | Beschreibung | ||||||
Objekt | Objekt, Objektfeld |
![]() |
Strukturiertes Objekt | |||||
ZeigerAuflösen | Boolean |
![]() |
Wahr = Zeiger auflösen Falsch oder weggelassen = Zeiger nicht auflösen |
|||||
Option | Lange Ganzzahl |
![]() |
ck shared: als shared object zurückgeben, ck resolve pointers: Zeiger vor dem Kopieren auflösen | |||||
GruppierenMit | Collection, Objekt |
![]() |
Shared collection oder object mit dem Ergebnisobjekt gruppieren | |||||
Funktionsergebnis | Objekt |
![]() |
Kopie von Objekt | |||||
Die Funktion OB Copy gibt ein Objekt zurück, das die vollständige (tiefe) Kopie der Eigenschaften, Unterobjekte und Werte für Objekt enthält.
Enthält Objekt Werte vom Typ Zeiger, enthält die Kopie standardmäßig auch die Zeiger. Sie können jedoch Zeiger beim Kopieren auflösen, wenn Sie im Parameter ZeigerAuflösen Wahr übergeben. In diesem Fall wird jeder in Objekt verfügbare Zeiger beim Kopieren bewertet und sein aufgelöster Wert verwendet.
Hinweis: Sind Eigenschaften von Objekt shared objects oder collections, werden sie in der zurückgegebenen Kopie zu regulären Objekten oder Collections (not shared). Zur Rückgabe von shared objects/collections verwenden Sie die zweite Syntax:
Der optionale Parameter Option kann eine oder beide der nachfolgenden Konstanten enthalten:
option | Beschreibung |
ck resolve pointers | Enthält das ursprüngliche Objekt Werte vom Typ Zeiger, enthält die Kopie standardmäßig ebenfalls Zeiger. Sie können jedoch die Konstante ck resolve pointers übergeben, um Zeiger beim Kopieren aufzulösen. In diesem Fall wird jeder im Objekt verfügbare Zeiger beim Kopieren bewertet und sein aufgelöster Wert verwendet. |
ck shared | OB Copy gibt standardmäßig ein reguläres Objekt (not shared) zurück, selbst bei Anwendung auf ein shared object. Übergeben Sie die Konstante ck shared, um ein shared object zu erstellen. Dann können Sie es über den Parameter mit einer anderen Collection bzw. Objekt gruppieren (siehe unten). |
Mit dem Parameter GruppierenMit können Sie eine Collection oder ein Objekt bestimmen, denen das zurückgegebene Objekt zugeordnet werden soll.
Hinweise:
Ein Objekt mit einfachen Werten duplizieren:
C_OBJECT($Object)
C_TEXT($JsonString)
ARRAY OBJECT($arraySel;0)
ALL RECORDS([Product])
While(Not(End selection([Product])))
OB SET($Object;"id";[Product]ID_Product)
OB SET($Object;"Product Name";[Product]Product_Name)
OB SET($Object;"Price";[Product]Price)
OB SET($Object;"Tax rate";[Product]Tax_rate)
$ref_value:=OB Copy($Object) //direkt kopieren
APPEND TO ARRAY($arraySel;$ref_value)
//der Inhalt von $ref_value ist identisch mit dem Inhalt von $Object
NEXT RECORD([Product])
End while
//Inhalt von $ref_value
$JsonString:=JSON Stringify array($arraySel)
Ein Objekt mit Zeigern duplizieren (erste Syntax):
C_OBJECT($ref)
OB SET($ref;"name";->[Company]name) //Objekt mit Zeigern
OB SET($ref;"country";->[Company]country)
ARRAY OBJECT($sel;0)
ARRAY OBJECT($sel2;0)
ALL RECORDS([Company])
While(Not(End selection([Company])))
$ref_comp:=OB Copy($ref) //ohne Bewertung der Zeiger kopieren
// $ref_comp={"name":"->[Company]name","country":"->[Company]Country"}
$ref_comp2:=OB Copy($ref;True) //mit Bewertung der Zeiger kopieren
// $ref_comp={"name":"4D SAS","country":"France"}
APPEND TO ARRAY($sel;$ref_comp)
APPEND TO ARRAY($sel2;$ref_comp2)
NEXT RECORD([Company])
End while
$Object:=JSON Stringify array($sel)
$Object2:=JSON Stringify array($sel2)
// $Object = [{"name":"","country":""},{"name":"","country":""},...]
// $Object2 = [{"name":"4D SAS","country":"France"},{"name":"4D, Inc","country":"USA"},{"name":"Catalan","country":"France"}...]
Ein reguläres Objekt (non shared) $person in das shared object $sharedObject kopieren. Dazu müssen wir eine Kopie von shared object erstellen ($sharedObject).
C_OBJECT($person;$copy;$sharedObject)
C_TEXT($text)
$text:=Document to text(Get 4D folder(Current resources folder)+"person.txt")
$person:=JSON Parse($text) //$person ist ein reguläres Objekt
$sharedObject:=New shared object()
$copy:=OB Copy($person;ck shared) //$copy ist ein shared object
//Es lässt sich in $sharedObject einsetzen
Use($sharedObject)
$sharedObject.person:=$copy
End use
$obj enthält einen Zeiger (Eigenschaft "name") auf das Datenfeld "name" des aktuellen Datensatzes.
C_OBJECT($obj;$objWithPtr;$sharedObjWithPtr)
$obj:=New object()
//$obj ist ein Objekt mit einem Zeiger
OB SET($obj;"name";->[Persons]name)
ALL RECORDS([Persons])
//Jetzt gibt es einen aktuellen Datensatz in der Tabelle [Persons], so dass [Persons]name gefüllt wird
//
// Um das Objekt $obj als Standardobjekt mit Bewertung der Zeiger zu kopieren
// schreiben wir:
$objWithPtr:=OB Copy($obj;True)
//
// Um das Objekt $obj als shared object mit Bewertung der Zeiger zu kopieren
// schreiben wir:
$sharedObjWithPtr:=OB Copy($obj;ck resolve pointers+ck shared)
Wir wollen $sharedObj in $sharedColl kopieren. Da sie aber zu unterschiedlichen Gruppen gehören, führt direktes Kopieren zu einem Fehler. Deshalb machen wir eine Kopie von $sharedObj und weisen $sharedColl der Kopie als shared group zu.
C_OBJECT($sharedObj;$objCopy)
C_COLLECTION($sharedColl)
//$sharedObj gehört zu einer shared group
$sharedObj:=New shared object("lastname";"Smith";"address";New shared object("city";"New York"))
//$sharedColl gehört zu einer anderen shared group
$sharedColl:=New shared collection(New shared object("lastname";"Brown"))
$objCopy:=OB Copy($sharedObj;ck shared;$sharedColl)
//$objCopy ist jetzt dieselbe shared group wie $sharedColl
//So lässt sich $objCopy ohne Fehler in $sharedColl setzen
Use($sharedColl)
$sharedColl.push($objCopy)
End use
Produkt: 4D
Thema: Objekte (Sprache)
Nummer:
1225
Erstellt: 4D v14
Geändert: 4D v15
Geändert: 4D v18 R3
Geändert: 4D v18 R5
4D Programmiersprache ( 4D v20 R7)