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" } } ]