Neste último aditamento à sérieORDA, veremos como os novos conceitos ORDA podem interagir com objectos e colecções existentes. De facto, é possível transformar entidades e selecções de entidades em objectos e colecções, assim como construir entidades e selecções de entidades a partir de objectos e colecções. Ao fazê-lo, pode facilmente integrar o código ORDA no seu código existente. Pode tirar o máximo partido da ORDA sem precisar de reescrever o seu código!
Hoje utiliza SELECTION TO ARRAY e ARRAY TO SELECTION para trabalhar de forma desconectada do servidor, mas tem de gerir tantos matrizes como campos. E para um registo actual, não há maneira de o extrair de qualquer forma. Com ORDA, pode facilmente exportar entidades e selecções de entidades da base de dados para trabalhar nelas separadamente. E não é tudo, é possível importar objectos e colecções previamente criados para a base de dados. Tudo com um método único e fácil de usar!
Isto é muito útil para trabalhar eficientemente em modo cliente servidor, para comunicar com outras aplicações, ou para importar dados utilizando processos em lote.
ORDA: trabalhar com objectos e colecções
ENTIDADE EXPORTADORA E SELECÇÕES DE ENTIDADE A OBJECTOS E COLECÇÕES
Os exemplos seguintes são baseados nesta estrutura. Vamos sujar as nossas mãos!

EXPORTAÇÃO PARA OBJECTOS
Uma entidade pode ser extraída como um objecto utilizando o toObject() método. Aqui, extraímos a entidade $pupil como um objecto. Podemos escolher quais as propriedades a extrair.
Depois, podemos aplicar o método JSON Stringify para converter o valor deste objecto numa cadeia JSON e enviá-lo através da rede, por exemplo. C_OBJECT($pupil;$pupilObject)
C_TEXT ($pupilString)
//Get the first pupil whose last name is "Dunaway"
$pupil :=ds.Pupil.query("lastName=:1"; "Dunaway").first
()
If ($pupil#Null)
// Turn the entity to an object $pupilObject :=$pupil.toObject("firstName, lastName, email")
$pupilString :=JSON Stringify($pupilObject) // Stringify the object
End if
O objecto $pupilObject será:
{
"primeiroNome": "Cecil",
"sobrenome": "Dunaway",
"e-mail": "Cecil.Dunaway@echo"
}
EXPORTAÇÃO PARA COLEITAS
Uma selecção de entidade pode ser exportada para uma colecção utilizando o toCollection() método. Aqui, exportamos a selecção de entidades $pupils (que contém 2 entidades) como uma colecção. Decidimos extrair apenas o método de lastName and firstName propriedades, juntamente com todas as propriedades da entidade relacionada school .
Então, podemos aplicar o JSON Stringify para converter os valores desta colecção numa cadeia JSON e enviá-la através da rede, por exemplo.
C_OBJECT($pupils)
C_COLLECTION ($pupilsCollection)
C_TEXT ($pupilsString)
// Get the pupils whose first name starts with "L"
$pupils :=ds.Pupil.query("firstName=:1"; "L@")
//Turn the entity selection to a collection of objects
$pupilsCollection :=$pupils.toCollection("lastName,firstName,school.*")
$pupilsString :=JSON Stringify($pupilsCollection)
A colecção $pupilsCollection será:
[
{
"primeiroNome": "Lauren",
"sobrenome": "Bouchard",
"escola": {\i1}
"ID": 45,
"nome": "Escolas de artes",
"estado": "New Jersey" }
},
{
"primeiroNome": "Laurie",
"sobrenome": "Valenti",
"escola": {\i1}
"ID": 46,
"nome": "Escola de Matemática",
"estado": "New Jersey"}
}
]
Mais opções para toObject() e toCollection() estão disponíveis métodos, consulte a documentação para mais detalhes!
IMPORTAÇÃO DE ENTIDADES E SELECÇÕES DE ENTIDADE DE OBJECTOS E COLECÇÕES
importação de Objectos
Uma entidade pode ser construída a partir de um objecto com o fromObject() método. Aqui, criamos uma nova entidade $pupil a partir de um determinado objecto:
C_OBJECT($pupil;$pupilObject)
$pupilObject :=New object("firstName"; "Mary"; "lastName"; "Smith"; "email"; "Mary.Smith@whisky")
//Create a new empty entity
$pupil :=ds.Pupil. .new()
//Fill entity
$pupil.fromObject($pupilObject)
importação de colecções
Uma selecção de entidade pode ser construída a partir de uma colecção com o fromCollection() método. Aqui, construímos uma selecção de entidades $pupils a partir de uma determinada colecção.
Note-se que este mecanismo pode ser utilizado para criar novas entidades ou actualizar as já existentes. Depende simplesmente da presença da chave primária nos objectos.
C_OBJECT($pupils)
C_TEXT($txtPupils)
C_COLLECTION ($pupilsCollection)
$txtPupils :=Document to text(Get 4D folder(Current resources folder)+"pupils_data.json")
//Get a collection of objects
$pupilsCollection:=JSON Parse($txtPupils)
$pupils :=ds.Pupil.fromCollection($pupilsCollection)
e aqui está o $pupilsCollection collection:
[
{ // A chave primária da entidade não é dada. Será criada uma nova entidade
"primeiroNome": "Marca",
"sobrenome": "Mac Arthur",
"e-mail": "Mark.MacArthur@yankee",
"escola": {\i1}
"__KEY": "45"
}
},
{ // A chave primária da entidade é dada. Esta entidade será actualizada (se existir)
"__KEY": 3436,
"primeiroNome": "Victor",
"sobrenome": "Valenti",
"e-mail": "Victor.Valenti@NEWSCHOOL",
"escola": {\i1}
"__KEY": "45"
}
}
]
