Con una versión anterior, descubriste cómo las peticiones ORDA REST habían sido optimizadas automáticamente para aumentar el rendimiento cuando se trabaja con un almacén de datos remoto y configuraciones cliente/servidor.
Aprendiste que puedes usar contextos para aprovechar la optimización automática de las peticiones ORDA REST.
Ese fue un paso significativo, pero ahora ofrecemos tener un control completo sobre el comportamiento de sus peticiones REST. Dado que el rendimiento es una preocupación estratégica, ¡debes estar ansioso por descubrir esta nueva característica!
Y eso no es todo; ahora hay nuevas herramientas disponibles para ayudarle a entender y depurar sus problemas.
Siga leyendo para ver la presentación completa.
HDI: ¿Cómo empiezo con el control de peticiones REST?
¿Recuerdas qué es el contexto?
Antes de empezar, he aquí un rápido resumen:
- cuando se trabaja con una selección de entidades, después de una fase de aprendizaje, 4D lanza automáticamente peticiones optimizadas (pidiendo al servidor páginas de entidades sólo con los atributos adecuados)
- puede utilizar un contexto para hacer que esa optimización persista y reutilizarla cuando trabaje con otras selecciones de entidades (o entidades)
¿Has oído hablar de la caché orda?
Cuando se solicitan datos al servidor con ORDA, se ponen en la caché de ORDA en la máquina del cliente.
El cache de ORDA está organizado por clase de datos. Las entidades cargadas se almacenan en la caché ORDA como objetos que contienen el contenido de los atributos solicitados.
Para más detalles sobre los contextos y la caché ORDA, vea la sesión de la Cumbre 2020.
El nuevo paso: tomar el control completo de los contextos
Como ha entendido, los atributos de un contexto son definidos por la fase de aprendizaje de 4D. Gracias al datastore, el gran paso adelante es que ahora puede decidir qué atributos quiere incluir en un contexto dado con la función .setRemoteContextInfo().
ejemplo
En este ejemplo, ponemos los atributos firstname y lastname de la clase de datos Personas en el contexto contextA.
Así, al llamar a la función all() función, la primera entidad Persons no está completamente cargada para la fase de aprendizaje. Las solicitudes enviadas al servidor ya están totalmente optimizadas.
var $ds $ds: 4D.DataStoreImplementation
var $contextA : Object
var $persons : cs.PersonsSelection
var $p : cs.PersonsEntity
var $text : Text
:=Open datastore(New object("hostname"; "school.acme.com"); "schools")
$ds .setRemoteContextInfo("contextoA"; "Personas"; New collection("nombre"; "apellido"))
$contextA :=New object("contexto"; "contextoA")
$persons :=$ds.Persons.all($contextoA)
$text :=""
For each ($p; $persons)
$text :=$p.firstname+" "+$p.lastname
End for each
acerca de los cuadros de lista
Tenga en cuenta que si la selección de la entidad $personas se utiliza en un cuadro de lista, puede especificar los atributos que desee en el contexto del modo página.
En el ejemplo siguiente, el contexto del cuadro de lista contiene los atributos firstname y lastname de la clase de datos Personas.
Al seleccionar una entidad, ésta se carga inmediatamente con los atributos del contexto del elemento actual (firstname, lastname, children, gender).
No hay más fase de aprendizaje que requiera la carga completa de la primera entidad.
var $contextPersons Object
FormpersonsFormdsPersonsall$contextPersons
var $listAttributes ; $pageAttributes: Collection
$contextPersons :=New object("contexto"; "personas")
$listAttributes :=New collection("nombre"; "apellido")
Form .ds.setRemoteContextInfo("personas"; Form.ds.Persons; $listAttributes) //Form.ds is a remote datastore
$pageAttributes :=New collection("nombre"; "apellido"; "hijos"; "género")
Form .ds.setRemoteContextInfo("personas"; Form.ds.Persons; $pageAttributes; //Form.persons is displayed in a list box
manejar la longitud de la página para las selecciones de entidades
Tenga en cuenta que puede establecer una longitud de página para las selecciones de entidades solicitadas por el servidor. La buena noticia es que esto también se aplica a los atributos de las entidades relacionadas con el tipo.
Las entidades Address son solicitadas al servidor por páginas de 100 entidades con el atributo city en el ejemplo siguiente.
Para cada entidad Dirección, las entidades relacionadas personas (selección de entidades) son solicitadas por páginas de 50 entidades con los atributos firstname y lastname.
var $ds : 4D.DataStoreImplementation
var $contextA : Object
var $addresses : cs.AddressSelection
var $a : cs.AddressEntity
var $p : cs.PersonsEntity
var $text : Text
$ds :=Open datastore(New object("hostname"; "school.acme.com"); "schools")
$ds .setRemoteContextInfo("contextoA"; $ds.Address; "ciudad, personas:50, personas.apellido, personas.nombre"; "principal"; 100)
$contextA :=New object("contexto"; "contextoA")
$addresses :=$ds.Address.all($contextA)
$text :="
For each ($a; $addresses)
$text :=$text+"/"+$a.city
For each ($p; $a.persons )
$text :=$text+" - "+$p.firstname+$p.lastname
End for each
End for each
la caché de ORDA
Se proporcionan otras herramientas útiles para manejar el tiempo de espera y el tamaño máximo de la caché ORDA y medios para inspeccionar el contenido de la caché ORDA.
Más información está disponible en el sitio web de documentación.
Por ejemplo, puedes modificar el tiempo de espera de la caché ORDA para adaptar la frecuencia de tus peticiones. Esto es útil cuando sabes si tus datos van a cambiar a menudo o no.
ejemplo
En el siguiente ejemplo, la clase de datos Ciudades contiene códigos postales y ciudades que no es probable que cambien muy a menudo, por lo que el tiempo de espera se extiende.
var $ds 4D .DataStoreImplementation
$ds :=Open datastore(New object("hostname"; "school.acme.com"); "schools")
// The entities will expire after 3 hours
// There are 350 entities maximum in the cache of the Cities dataclass
$ds .Cities.setRemoteCacheSettings(New object("timeout"; 10800; "maxEntries"; 350))
Para ahorrar memoria, también se puede actualizar el número máximo de entidades presentes en la caché para cada clase de datos.
inspeccionar y restablecer los contextos
Para ayudarte a sumergirte en este fascinante tema, visita la documentación.
Importante: Ten en cuenta que probablemente necesitarás inspeccionar las peticiones para una completa comprensión y depuración.
una cosa más
No muy cerca de esta característica pero valiosa, la función dataClass.getCount() está ahora disponible para obtener el número de entidades en una clase de datos.
Esto evita llamar a dataclass. all().length construye una selección de entidades en el servidor y carga completamente la primera entidad en el cliente.
var $count : Integer
$count :=ds.Persons.getCount()
juegue ahora con el IDH y la demo de la cumbre 2020
Descargue la demo de la sesión de HDI y la Cumbre 2020 para saber más.