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