Este es el sitio web histórico de la documentación de 4D. La documentación se está trasladando progresivamente a developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v20 R7
OB Copy
|
OB Copy ( objeto {; resuelvePunt | {; option {; agruparCon}}} ) -> Resultado | ||||||||
Parámetro | Tipo | Descripción | ||||||
objeto | Objeto, Campo Objeto |
![]() |
Objeto estructurado | |||||
resuelvePunt | Booleano |
![]() |
True = resuelve los puntero, False o se omite = no resuelve punteros | |||||
option | Entero largo |
![]() |
ck shared: devuelve un objeto compartido, ck resolve pointers: resuelve punteros antes de copiar |
|||||
agruparCon | Collection, Objeto |
![]() |
Colección u objeto compartido a agrupar con el objeto resultante | |||||
Resultado | Objeto |
![]() |
Copia de objeto | |||||
El comando OB Copy devuelve un objeto que contiene una copia completa de las propiedades, sub objetos y valores de objeto.
Si el objeto contiene valores de tipo de puntero, por defecto la copia también contiene los punteros. Sin embargo, puede resolver los punteros al momento de la copia pasando True en el parámetro resuelvePunt. En este caso, cada puntero presente como valor en objeto se evalúa al momento de la copia y se utiliza su valor desreferenciado.
Nota: si las propiedades del objeto son objetos compartidos o colecciones compartidas, se convierten en objetos o colecciones estándar (no compartidos) en la copia devuelta. Use the second syntax if you want to return shared elements (see below).
Si se pasa, el parámetro opcion puede contener una de las siguientes constantes (o ambas):
opcion | Descripción |
ck resolve pointers | Si el objeto original contiene valores de tipo puntero, por defecto la copia también contiene los punteros. Sin embargo, puede resolver los punteros al copiar pasando los ck resolve pointers. En este caso, cada puntero presente en el objeto se evalúa al copiar y se utiliza su valor desreferenciado. |
ck shared | Por defecto, OB Copy devuelve un objeto regular (no compartido), incluso si el comando se aplica a un objeto compartido. Pase la constante ck shared para crear un objeto compartido. En este caso, puede utilizar el parámetro agruparCon para asociar el objeto compartido con otra colección u objeto (ver más abajo). |
El parámetro agruparCon le permite designar una colección o un objeto con el que debe asociarse el objeto resultante.
Notas:
Usted quiere duplicar un objeto que contiene valores simples:
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) //copia directa
APPEND TO ARRAY($arraySel;$ref_value)
//el contenido de $ref_value es idéntico al de $Object
NEXT RECORD([Product])
End while
//el contenido de $ref_value
$JsonString:=JSON Stringify array($arraySel)
Duplique un objeto que contenga punteros (primera sintaxis):
C_OBJECT($ref)
OB SET($ref;"name";->[Company]name) //objeto con punteros
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) // copiar sin evaluar punteros
// $ref_comp={"name":"->[Company]name","country":"->[Company]Country"}
$ref_comp2:=OB Copy($ref;True) //copiar con evaluación de punteros
// $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"}...]
Queremos copiar el objeto estándar (no compartido) $person en el objeto compartido $sharedObject. Para hacer esto, debemos crear una copia compartida del objeto ($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 es un objeto estándar
$sharedObject:=New shared object()
$copy:=OB Copy($person;ck shared) //$copy es un objeto compartido
//Entonces se puede poner en $sharedObject
Use($sharedObject)
$sharedObject.person:=$copy
End use
$obj contiene un puntero (propiedad "name") en el campo "name" del registro actual.
C_OBJECT($obj;$objWithPtr;$sharedObjWithPtr)
$obj:=New object()
//$obj es un objeto con un puntero
OB SET($obj;"name";->[Persons]name)
ALL RECORDS([Persons])
//Ahora hay un registro actual en la tabla [Persons] por lo que se completa [Persons]name
//
// Si queremos copiar $obj como un objeto estándar con evaluación de punteros
// Hacemos esto:
$objWithPtr:=OB Copy($obj;True)
//
// Si queremos copiar $obj como un objeto compartido con evaluación de punteros
// Hacemos esto:
$sharedObjWithPtr:=OB Copy($obj;ck resolve pointers+ck shared)
Queremos copiar $sharedObj en $sharedColl pero dado que pertenecen a diferentes grupos compartidos, una copia directa daría como resultado un error. Debemos hacer una copia de $sharedObj y designar $sharedColl como grupo compartido para la copia.
C_OBJECT($sharedObj;$objCopy)
C_COLLECTION($sharedColl)
//$sharedObj pertenece a un grupo compartido
$sharedObj:=New shared object("lastname";"Smith";"address";New shared object("city";"New York"))
//$sharedColl pertenece a otro grupo compartido
$sharedColl:=New shared collection(New shared object("lastname";"Brown"))
$objCopy:=OB Copy($sharedObj;ck shared;$sharedColl)
//$objCopy pertenece a otro grupo compartido $sharedColl
//Entonces $objCopy se puede poner en $sharedColl sin error
Use($sharedColl)
$sharedColl.push($objCopy)
End use
Producto: 4D
Tema: Objetos (Lenguaje)
Número
1225
Creado por: 4D v14
Modificado: 4D v15
Modificado: 4D v18 R3
Modificado: 4D v18 R5
Manual de lenguaje 4D ( 4D v20 R7)