ORDA – Mejore su API con el alcance de las funciones

Traducido automáticamente de Deepl

4D v18 R4 y ORDA le permiten crear funciones de clase de alto nivel por encima del modelo de datos. Esto le permite escribir código orientado al negocio para ocultar la complejidad, reducir los errores y acelerar el proceso de desarrollo.

Con 4D v18 R5, estamos trayendo aún más características para ayudarle a optimizar y organizar su código. Por ejemplo, puede necesitar ejecutar una función localmente en el cliente para mejorar el rendimiento cuando se trabaja en modo cliente/servidor. Ahora es posible. O si expones tu base de datos como un servidor REST, puede que quieras que algunas funciones estén disponibles en el lado del servidor pero ocultas para tus clientes REST. ¡Esto también es posible!

HDI: Palabras clave de las funciones en las clases del modelo de datos ORDA

Dos nuevas palabras clave para las funciones en las clases del modelo de datos ORDA están disponibles:

trabajando en C/S con la palabra clave LOCAL

Las funciones se ejecutan en el servidor por defecto en C/S, pero ahora se puede elegir ejecutar algunas de ellas en el cliente. Esto puede mejorar mucho el rendimiento.

Ejemplo

En este ejemplo, tenemos una clase de datos Students. Escribamos una función que devuelva las edades de los estudiantes.

blank

Aquí está nuestra función age() en la clase de entidad cs.StudentsEntity.

Class extends Entity

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

Y este es un cuadro de lista que muestra todos los estudiantes con la columna de edad mapeada con la expresión This.age():

blank

Gracias a la palabra clave local, la función age() se ejecuta localmente en el cliente con la fecha de nacimiento cargada mientras se muestra el cuadro de lista. Esto es importante para estar en sintonía con la optimización de las peticiones ORDA de 4D v17 R5.

¡Sin la palabra clave local, la función age() lanzaría una petición al servidor para cada línea!

palabra clave expuesta

Como se prometió con 4D v18 R4, hemos mejorado las funciones expuestas para el servidor REST. Ahora, con 4D v18 R5, puede elegir qué funciones publicar (o no).

Puede utilizar la palabra clave exposed para que una función se publique como API para los clientes REST.

En el siguiente ejemplo, la función registerNewStudent() de la clase de datos cs.Students es invocable desde un cliente REST mientras que computeStudentId() no lo es.

Class extends DataClass

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

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

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

// This function not callable from a REST client
Function computeStudentId() : Integer
//computa un nuevo Id de estudiante
Use (Storage.
infos)
Storage.
info
s.studentId:=Storage.infos.studentId+1
$0:=Storage.
infos.studentId
End use

Este es el código de llamada en el 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: En 4D v18 R4, todas las funciones están expuestas en el servidor REST. En 4D v18 R5, las funciones NO están expuestas por defecto. No olvide marcar las funciones que desee exponer.

Consulte la documentación y el IDH de arriba para saber más sobre las nuevas funciones.

Avatar
• Propietario de producto - Marie-Sophie Landrieu-Yvert ingresó al equipo de 4D Product como Propietario de producto en 2017. Como tal, está a cargo de escribir las historias de los usuarios y luego traducirlas en especificaciones funcionales. Su papel es también asegurarse de que la implementación de la funcionalidad entregada cumpla con las necesidades del cliente. Marie-Sophie se graduó en la Escuela de Ingeniería de ESIGELEC y comenzó su carrera como ingeniera en IBM en 1995. Participó en varios proyectos (de mantenimiento y creación) y trabajó como desarrolladora de Cobol. Luego trabajó como diseñadora de UML y desarrolladora de Java. Sus principales funciones fueron analizar y redactar requisitos funcionales, coordinar los equipos de negocio y de desarrollo.