ORDA – Introdução ao construtor de entidades

Tradução automática de Deepl

A linguagem 4D suporta o conceito de classes e, portanto, o conceito de constructor.

Por outro lado, a camada de abstração ORDA, através de Classes de Modelo de Dados, fornece um grande benefício comercial. Permite escrever código orientado para o negócio e “publicá-lo” como se fosse uma API. O armazenamento de dados, as classes de dados, as selecções de entidades e as entidades estão disponíveis como objectos de classe que podem conter funções, bem como atributos calculados e aliases.

Isto leva a que as suas aplicações sigam facilmente os princípios MVC com código poderoso e optimizado.

Para trabalhar com uma abordagem completa orientada a objetos, a partir de 4D 20 R10, classes de entidades podem agora ter um constructor(). Precisa configurar valores iniciais quando uma nova entidade é instanciada? Agora é possível! Continue lendo para saber mais …

HDI_ORDA_constructor

Com classes de modelo de dados ORDA, os dados são manipulados através de entidades que são instâncias das classes Entity que tem em sua Estrutura.

O 4D 20 R10 traz a possibilidade de implementar um constructor() para objetos entidades.

O construtor de entidade

Para trabalhar com uma abordagem completa orientada a objetos, a partir de 4D 20 R10, classes de entidades podem agora ter um constructor() que é executado quando elas são instanciadas

Essa é a maneira perfeita de inicializar alguns valores padrão, como um selo ou um atributo createdBy, por exemplo.

Antes, para fazer isso, você provavelmente implementava uma função createNew() na classe de dados apropriada. Dada uma classe de dados Products, seus desenvolvedores devem estar cientes de que há uma função createNew() nesta classe e que eles devem usá-la em vez de instanciar naturalmente uma entidade Products usando ds.Products.new().

Para criar um novo produto, eles fazem:

Form.product:=ds.Products.createNew()

como implementar o construtor

Basta implementar a função constructor() na classe de entidade.

Aqui está a classe ProductsEntity:

Class extends Entity

Class constructor()

This.stamp:=Timestamp()
This.createdBy:=Current user()

E o código de chamada é tão lógico. Por exemplo, ao clicar no botão Criar produto em um formulário, basta fazer:

Form.product:=ds.Products.new()

e a entidade Form.product vem com os atributos stamp e createdBy devidamente preenchidos!

O constructor() não é acionado apenas pela chamada da função new() função. Seja qual for o meio com que a entidade é instanciada, o construtor é acionado.

Também pode ser:

– o Explorador de dados (ao criar uma nova entidade)

– a função fromCollection()

– uma chamada à API REST que cria uma nova entidade no servidor(por exemplo, $method=update)

– código executado no servidor REST e que processa uma entidade instanciada num cliente, como um front end de uma aplicação Qodly ou um cliente 4D que utiliza um datastore remoto.

outros exemplos

Dado este pedido REST:

127.0.0.1/rest/Products?method=update

executar usando um POST com o corpo:

[
{"name": "Red pack", "price": 50}
]

Aqui está o resultado no Explorador de dados. Observe os valores para os atributos stamp e createdBy.

blank

Ao importar produtos com a função fromCollection():

var $products : cs.ProductsSelection

var $data:=New collection({name: "Red pack"; price: 50}; {name: "Green pack"; price: 10})

$products:=ds.Products.fromCollection($data)

Aqui está o resultado. Observe os valores dos atributos stamp e createdBy.

blank

Este blogpost explica como implementar a função constructor().

Após a leitura, se precisar de saber mais sobre como constructor() se comporta em C/S ou utilizando 4D Qodly pro ou quando trabalha com um datastore remoto, leia este blogpost.

Verifique a documentação para aprender mais e brincar com o HDI!

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.