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.
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():
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!