ORDA: trabalho com objectos e colecções

Tradução automática de Deepl

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

Avatar
• Proprietário do produto - Marie-Sophie Landrieu -Yvert entrou ao time 4D Product como Proprietária do Produto em 2017. Como tal, está a cargo de escrever as histórias dos usuários e depois traduzi-las em especificações funcionais. Seu papel também é garantir que a implementação da funcionalidade entregue cumpra com as necessidades do cliente. Marie-sophie se formou na Escola de Engenharia de ESIGELEC e começou sua carreira como engenheira da IBM em 1995. Participou em vários projetos (de manutenção e criação) e trabalhou como desenvolvedora de Cobol. Depois trabalhou como designer de UML e desenvolvedora de Java. Suas principais funções foram analisar e redigir requisitos funcionais, coordenar os times de negócio e de desenvolvimento.