Pase a las selecciones de entidades compartibles sin problemas

Traducido automáticamente de Deepl

En estaentrada del blog , usted descubrió el poder que pueden ofrecer las selecciones de entidades compartibles. 4D se centra en la compartición de datos porque, a largo plazo, conduce al rendimiento.

Pero somos conscientes de que esta estrategia puede no ser su estrategia actual. Hemos seguido las discusiones en el foro y hemos entendido sus comentarios y sentimientos.

Para suavizar este paso y darle más flexibilidad y herramientas, hemos realizado algunas mejoras en cuanto a la naturaleza (compartible o no) de las selecciones de entidades.

Antes de continuar, le recomendamos encarecidamente que lea esta entrada del blog y esta otra para que pueda entender las mejoras que se describen a continuación.

HDI: Mejoras en las selecciones de entidades

4D v18 R5 ofrece más posibilidades para manejar selecciones de entidades no compartibles (alterables). Le ayuda a trabajar de la forma en que está acostumbrado.

Por otro lado, si está dispuesto a trabajar con selecciones de entidades compartibles, le hemos ayudado a prepararse para esta nueva era en 4D v18 R5. En 4D v18, hemos introducido una forma flexible que puede utilizar de forma transparente para preparar su código.

En pocas palabras: ¡prepárese en 4D v18, ejecute en 4D v18 R5 y prepárese para un mayor rendimiento!

sobre las selecciones de entidades alterables

añadir una entidad a una selección de entidades

Un caso de uso frecuente es mostrar una selección de entidades en un cuadro de lista (productos, facturas, etc.) y permitir al usuario añadir otras nuevas.

Vamos a trabajar con una clase de datos Productos.

Cuando se carga el formulario, se crea Form.products, que es la fuente de datos del cuadro de lista:

Case of
(Form event code=On Load)
Form .products:=ds.Products.all()
End case

Cuando el usuario añade un nuevo producto:

Form.products.add(Form.product )

Si ejecuta este código tal cual en 4D v18 R5, obtendrá un error al ejecutar la función add() porque ds.Products.all() devuelve una selección de entidad compartible (no alterable).

Somos conscientes de este inconveniente. Por eso encontrará que la función 4D v18 copy() está disponible para preparar su código para 4D v18 R5.

Si copy() se ejecuta en 4D v18: sólo copia su selección de entidades

Si copy() se ejecuta en 4Dv18 R5, por defecto, copia tu selección de entidad no alterable como una alterable para que no tengas problemas con la acción de añadir.

Así que prepara tu código de la siguiente manera:

Case of
(Form event code=On Load)
Form .products:=ds.Products.all().copy()
End case

conservar la naturaleza de las selecciones de entidades

Las selecciones de entidades creadas a partir de una selección de entidades original mantienen la misma naturaleza.

ejemplos

Ordenar un cuadro de lista

Trabajemos de nuevo en el ejemplo de los productos mostrados. Esta selección de entidad mostrada se ha establecido como alterable porque el usuario necesita añadir nuevos productos.

Cualquier tipo de acción sobre las columnas del cuadro de lista mantiene la naturaleza alterable de la selección de entidades para que pueda seguir añadiendo productos.

Ejecutar una consulta

Si ejecuta una consulta sobre una selección de entidades, la naturaleza de la selección de entidades se mantiene para el resultado.

En nuestro ejemplo, si el usuario ejecuta una búsqueda sobre los productos mostrados:

Form.products:=Form.products.query("nombre = :1"; Form.search)

El resultado de la consulta es modificable, por lo que se pueden añadir nuevos productos porque Form.products es modificable.

Estos son sólo dos ejemplos. Consulte la documentación para comprobar todos los casos en los que se mantiene la naturaleza de la selección original.

código genérico

Puede ser útil comprobar la naturaleza de una selección de entidades en código genérico para utilizarla de forma adecuada. Imagine un método que recibe una selección de entidades que puede ser compartible o no.

En el ejemplo siguiente, recibimos una selección de entidad Products. Antes de pasarla a un WORKER, debemos comprobar si es compartible. Si no lo es, la convertimos en una selección de entidades compartibles.

Para ello, utilizamos la nueva OB Is shared() función.

var $products; $1: cs.ProductsSelection
$products :=$1

If (Not(OB Is shared($products)))
$products :=$products.copy(ck shared)
End if
//Generate the catalog of products
CALL WORKER ("worker"; "buildCatalog"; $products; Current form window)

Nota: También hay una nueva función isAlterable() disponible en las selecciones de entidades para comprobar si son alterables.

Descargue el IDH anterior para ver más ejemplos.

Seguir trabajando como antes

Si desea continuar con el comportamiento de las versiones anteriores de 4D (sin ningún concepto de selecciones de entidades compartibles), puede utilizar la función makeSelectionsAlterable() función de clase disponible en el objeto datastore.

Esto hará que los cambios traídos con 4D v18 R5 sean completamente transparentes para usted.

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.