ORDA – Melhore o seu API com âmbito de função

Tradução automática de Deepl

4D v18 R4 e ORDA tornaram possível criar funções de classe de alto nível acima do modelo de dados. Isto permite-lhe escrever código orientado para os negócios para esconder a complexidade, reduzir erros e acelerar o processo de desenvolvimento.

Com 4D v18 R5, estamos a trazer ainda mais funcionalidades para o ajudar a optimizar e organizar o seu código. Por exemplo, pode ser necessário executar uma função localmente no cliente para melhorar o desempenho ao trabalhar em modo cliente/servidor. Agora é possível! Ou se expor a sua base de dados como servidor REST, poderá querer que algumas funções estejam disponíveis no lado do servidor, mas escondidas para os seus clientes REST. Isto também é possível!

HDI: Funções palavras-chave em classes de modelos de dados ORDA

Estão disponíveis duas novas palavras-chave para funções nas classes de modelos de dados ORDA:

trabalhar em C/S com a palavra-chave LOCAL

As funções são executadas no servidor por defeito no C/S, mas pode agora optar por executar algumas delas no cliente. Isto pode melhorar muito o desempenho.

Exemplo

Neste exemplo, temos um dataclass Student. Vamos escrever uma função que devolve a idade do aluno.

blank

Eis a nossa função age() no cs.StudentsEntity classe de entidade.

Class extends Entity

// This is an estimate of the age
local Function () : ( . #!00-00-00-00!) := ( )- ( . ) age Variant
IfThisbirthDate
$0Year ofCurrent dateYear ofThisbirthDate
Else
:= $0Null
End if

E esta é uma caixa de listagem com todos os alunos com a coluna de idade mapeada com a expressão This.age():

blank

Graças à palavra-chave local, a função age() é executada localmente no cliente com a data de nascimento carregada enquanto exibe a caixa de listagem. Isto é importante para estar em sintonia com os pedidos 4D v17 R5 ORDA de optimização.

Sem a palavra-chave local, a função age() desencadearia um pedido para o servidor para cada linha!

palavra-chave exposta

Como prometido com 4D v18 R4, melhorámos as funções de exposição para o servidor REST. Agora com 4D v18 R5, pode escolher quais as funções a publicar (ou não).

Pode usar a palavra-chave exposta para ter uma função publicada como uma API para clientes REST.

No exemplo abaixo, a função registerNewStudent() no cs.Students classe dataclass é chamada de um cliente REST enquanto computeStudentId() não é.

Class extends DataClass

exposto Function registerNewStudent($student: Object) : Object
var $entity : cs.StudentsEntity
var $status : Object

$entity :=ds.Students.new()
$entity .fromObject($student)
$entity
This .studentId:= .computeStudentId()
$status:=$entity.save()

If ($status.success)
Storage.
)
$0 :=$entity
Else
$0 :=$status
End if

// This function not callable from a REST client
Function computeStudentId() : Integer
//compute a new student Id
Use (Storage.
infos.studentId:=Storage.infos.studentId+1
$0:=Storage.
infos.studentId
End use

Aqui está o código de chamada no cliente REST:

var $connect;$ds;$student;$result: Object
var $studentId : Integer

$connect := New object("hostname"; "127.0.0.1:8044")
$ds :=Open datastore($connect; "demo")

$student :=New object("firstname"; "Mary"; "lastname"; "Smith")
// Execution is OK, no error is raised
$result:=$ds.Students.registerNewStudent($student)

//An error is raised
$ studentId:=$ds.Students.computeStudentId()

Nota: Em 4D v18 R4, todas as funções são expostas no servidor REST. Em 4D v18 R5, as funções NÃO são expostas por defeito. Não se esqueça de marcar as funções que pretende expor.

Consulte a documentação e o HDI acima para saber mais sobre as novas funções!

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.