Este é o site histórico da documentação 4D. As documentações estão sendo movidas progressivamente para developer.4d.com |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v19.8
OB Copy
|
OB Copy ( objeto {; resolvePont | {; opção {; groupWith}}} ) -> Resultado | ||||||||
Parâmetro | Tipo | Descrição | ||||||
objeto | Objeto, Campo Objeto |
![]() |
Objeto estruturado | |||||
resolvePont | Booleano |
![]() |
True = resolve os ponteiros, False ou se omitido = não resolve ponteiros | |||||
opção | Inteiro longo |
![]() |
ck shared: retorna um objeto partilhado, ck resolve pointers: resolve os ponteiros antes de copiar |
|||||
groupWith | Collection, Objeto |
![]() |
Coleção partilhada ou objeto para ser agrupado com o objeto retornado | |||||
Resultado | Objeto |
![]() |
Cópia de objeto | |||||
O comando OB Copy devolve um objeto que contém uma cópia completa das propriedades, sub objetos e valores de objeto.
Se o objeto conter valores de tipo de ponteiro, por padrão a cópia também contém os ponteiros. No entanto, pode resolver os ponteiros ao momento da cópia passando True no parâmetro resolvePont. Neste caso, cada ponteiro presente como valor em objeto se avalia ao momento da cópia e utiliza seu valor não referenciado.
Nota: se propriedades de objeto são objetos compartilhados ou coleções compartilhadas, eles se tornam objetos ou coleções padrão (não compartilhados) na cópia retornada. Use a segunda sintaxe se quiser retornar elementos partilhados (ver abaixo)
Se passado, o parâmetro opção pode conter uma das constantes abaixo (ou ambas):
opção | Descrição |
ck resolve pointers | se o objeto original conter valores de tipo ponteiro, como padrão a cópia também contém os ponteiros. Entretanto, pode resolver os ponteiros quando copiar (passando ck resolve pointers. Neste caso, cada ponteiro presente no objeto é avaliado quando copiar e seu valor sem referência for usado. |
ck shared | como padrão OB Copy retorna um objeto normal (não partilhado), mesmo se o comando for aplicado para um objeto partiilhado. Passe a constante ck shared para criar um objeto partilhado. Nesse caso, pode usar o parâmetro groupWith para associar o objeto partilhado com outra coleção ou objeto (ver abaixo). |
O parâmetro groupWith permite que determine uma coleção ou um objeto com o qual o objteo resultante deveria ser associado.
Notas:
Você quer duplicar um objeto que contém 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) //direct copy
APPEND TO ARRAY($arraySel;$ref_value)
//o conteúdo de $ref_value é idêntico ao do $Object
NEXT RECORD([Product])
End while
//o conteúdo de $ref_value
$JsonString:=JSON Stringify array($arraySel)
Duplique um objeto que contenha ponteiros:
C_OBJECT($ref)
OB SET($ref;"name";->[Company]name) //object with pointers
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) // copy without evaluating pointers
// $ref_comp={"name":"->[Company]name","country":"->[Company]Country"}
$ref_comp2:=OB Copy($ref;True) //copy with evaluation of pointers
// $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"}...]
Para copiar o objeto normal (não compartilhado) $person no objeto partilhado $sharedObject, precisamos criar uma cópia partilhada do 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 é um objeto padrão
$sharedObject:=New shared object()
$copy:=OB Copy($person;ck shared) //$copy é um objeto padrão
//assim pode ser copiado em $sharedObject
Use($sharedObject)
$sharedObject.person:=$copy
End use
$obj contém um ponteiro (propriedade "name") no registro atual do campo "name".
C_OBJECT($obj;$objWithPtr;$sharedObjWithPtr)
$obj:=New object()
//$obj é um objeto com um ponteiro
OB SET($obj;"name";->[Persons]name)
ALL RECORDS([Persons])
//Agora há um registro atual na tabela [Persons] de forma que [Persons]name é preenchido
//
// Se quisermos copiar $obj como um objeto padrão com avaliação de ponteiros
// fazemos isto:
$objWithPtr:=OB Copy($obj;True)
//
// Se quisermos copiar $obj como um objeto compartilhado com avaliação de ponteiros
// fazemos isto:
$sharedObjWithPtr:=OB Copy($obj;ck resolve pointers+ck shared)
Imagine que queira copiar $sharedObj em $sharedCol mas como eles pertencem a grupos compartilhados diferentes, uma cópia direta resultaria em um erro. Primeiro deve copiar $sharedObj e designar $sharedColl como um grupo compartilhado para a cópia.
C_OBJECT($sharedObj;$objCopy)
C_COLLECTION($sharedColl)
//$sharedObj pertence a um grupo compartilhado
$sharedObj:=New shared object("lastname";"Smith";"address";New shared object("city";"New York"))
//$sharedColl pertence a outro grupo partilhado
$sharedColl:=New shared collection(New shared object("lastname";"Brown"))
$objCopy:=OB Copy($sharedObj;ck shared;$sharedColl)
//$objCopy agora está no mesmo grupo partilhado que $sharedColl
//assim $objCopy pode ser copiado em $sharedColl sem erros
Use($sharedColl)
$sharedColl.push($objCopy)
End use
collection.copy( )
entitySelection.copy( )
OB Get
Objetos compartidos e Coleções compartidas
Produto: 4D
Tema: Objetos (Linguagem)
Número
1225
Criado por: 4D v14
Modificado: 4D v15
Modificado: 4D v18 R3
Modificado: 4D v18 R5
Manual de linguagem 4D ( 4D v19)
Manual de linguagem 4D ( 4D v19.1)
Manual de linguagem 4D ( 4D v19.4)
Manual de linguagem 4D ( 4D v19.5)
Manual de linguagem 4D ( 4D v19.6)
Manual de linguagem 4D ( 4D v19.7)
Manual de linguagem 4D ( 4D v19.8)