Classes ORDA para tratar o seu modelo de dados

Tradução automática de Deepl

Num post de blog anterior , introduzimo-lo ao mundo das classes de modelos de dados ORDA. Agora é tempo de sujar as nossas mãos e aprender mais!

Já sabe que a estrutura da ORDA(datastore, dataclass, entidade, selecção de entidades) é composta por objectos. Mas não são apenas objectos, são objectos fortemente tipográficos ligados a classes ORDA específicas. Isto significa que pode escrever funções para ocultar a complexidade da implementação física dos seus dados.

Portanto, é muito mais fácil expor a sua base de dados como uma API, especialmente se expor a sua base de dados como um servidor REST. Isto também o ajuda a evitar dores de cabeça, tais como quando precisa de modificar um código que escreveu há anos ou que foi escrito por outra pessoa. Esconder a complexidade reduz os erros e acelera o seu processo de desenvolvimento!

HDI: Exemplos de utilização das classes ORDA

visão geral das novas classes ORDA

As aulas ORDA estão automaticamente disponíveis com Projectos, vamos ver um exemplo. Aqui está uma base de dados simples (denominada LearningSystem) contendo um Students mesa.

Podemos verificar que a 4D criou automaticamente as seguintes classes:

  • DataStore
  • Alunos (aula de classe de dados)
  • StudentEntity (Classe da entidade)
  • EstudantesSelection (Classe EntitySelection)

Para resumir, numa base de dados local existe:

  • Uma única classe de datastore

E cada mesa tem:

  • Uma aula de dataclass (neste exemplo: Estudantes)
  • Uma classe de entidade (neste exemplo: StudentsEntity)
  • Uma classe de selecção de entidade (neste exemplo: StudentsSelection)

Qualquer objecto ORDA(datastore, dataclass, entidade, selecção de entidade) é uma instância da classe de modelo de dados correspondente e pode chamar qualquer uma das funções definidas na classe.

Dentro de uma função, isto designa a instância do objecto ORDA.

Vejamos um exemplo concreto. Aqui está o modelo de dados que vamos utilizar:

blank

a classe datastore

Esta classe é utilizada para implementar funções relacionadas com a datastore.

O seguinte é a implementação da classe DataStore.

Temos uma função getDescription() que devolve informações gerais sobre a datastore.

Class extends DataStoreImplementation
Function getDescription
C_TEXT( ) :="Sistema de aprendizagem abrangendo "+ ( . . . )+" alunos"$0
$0StringThisStudentsall()length
.

E aqui está o código que chama a função:

C_TEXT($dbName)
$dbName :=ds.getDescription() // $dbName is "Learning system covering 200 students"

Porque o objecto de datastore devolvido pelo ds é uma instância da classe DataStore, podemos utilizá-la para chamar a função getName().

a classe dataclass

Esta classe é utilizada para implementar funções relacionadas com o dataclass.

Segue-se a implementação da classe Escolas. Temos uma função registerStudent() para criar um novo aluno numa escola.

Recebe os dados de um aluno num objecto e verifica se o nível de inglês do aluno corresponde ao nível mínimo exigido pela escola. Se tudo estiver OK, a função cria e salva a entidade Estudantes.

Não há necessidade de se preocupar com a implementação do modelo de dados,basta construir o seu objecto e chamar a função.

Class extends DataClass

Function registerStudent

C_OBJECT($1;$data;$student;$school;$result;$0)

$data :=$1

$school :=ds.Schools.query("name = :1";$data.schoolName).first()
$result:=New object("sucesso";True)

If ($data.englishLevel < $school.minAcceptedEnglishLevel)
$result .success:=False
$result .statusText:="O nível de inglês não é suficientemente elevado"
$0 :=$result
End if

If ($result.success)
$student :=ds.Students.new()
$student .fromObject($data)
$student .school:=$school

$result :=$student.save()

$0 :=$student

End if

E aqui está o código que chama a função:

Form.result:=ds.Schools.registerStudent(Form.data)
//Form.data is

//
{"englishLevel":4,"firstname":"Mary","lastname":"Smith","schoolName":"Math school"}

Como o objecto ds.Schools dataclass é uma instância da classe Escolas, podemos utilizá-lo para chamar a função registerStudent().

a classe da entidade

Esta classe é utilizada para implementar funções relacionadas com uma entidade.

O seguinte é a implementação da classe StudentsEntity.

Temos uma função getFirstAhead() que devolve os alunos que têm uma classificação melhor do que a do aluno actual.

Class extends Entity

Function getFirstAhead
C_OBJECT($0;$ahead)
C_LONGINT ($1;$sliceSize)

$sliceSize :=$1

//Get the $sliceSize Students having a better rank
$ahead :=This.getDataClass().query("classificação < :1";This.rank).orderBy("rank desc")
$0 :=$ahead.slice(0;$sliceSize)

Aqui está o código que chama a função:


C_OBJECT
($student;$ahead)

$student :=ds.Students.query("lastname= :1"; "Smith").first()

$ahead :=$student.getFirstAhead(3)
//$ahead is an entity selection (Students) containing the three Students ahead the student Smith

Como o objecto da entidade $student é uma instância da classe StudentsEntity, podemos utilizá-lo para chamar a função getFirstAhead().

Note-se que a classe StudentsEntity estende a classe Entity que contém todos os métodos de membros disponíveis num objecto de entidade(por exemplo , getDataClass()etc.). Portanto, esses métodos de membros podem ser chamados com Isto na função.

a classe de selecção da entidade

Esta classe é utilizada para implementar funções relacionadas com a selecção de uma entidade.

O seguinte é a implementação da classe StudentsSelection.

Temos uma função setFinalExam() que actualiza uma entidade de selecção de alunos. O atributo finalExam é definido para o valor dado.

Class extends EntitySelection


Function setFinalExam

C_TEXT
($1;$value)
C_OBJECT
($0;$status;$student)
$value :=$1

For each ($student;This) Until (Not($status.success))
$student.finalExam:=$value
$status :=$student.save()
End for each


$0
:=$status

E aqui está o código que chama a função:

C_OBJECT($result)
$result :=ds.Students.all().setFinalExam("Passado"
)
// All the students have their finalExam attribute set to "Passed"

Como o objecto de selecção da entidade ds.Students.all() é uma instância da classe StudentsSelection, podemos utilizá-lo para chamar a função setFinalExam().

E o servidor do resto?

Outro post no blog está a chegar em breve para explicar como chamar as funções das classes ORDA nos pedidos de REST. Fique atento!

Entretanto, descarregue o HDI para começar a descobrir as novas aulas ORDA e consulte a documentação para mais detalhes!

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.