Passage en douceur aux sélections d’entités partageables

Traduit automatiquement de Deepl

Dans cebillet de blog , vous avez découvert la puissance que peuvent offrir les sélections d’entités partageables. 4D se concentre sur le partage des données car, à long terme, il est source de performance.

Mais nous sommes conscients que cette stratégie ne correspond peut-être pas à votre stratégie actuelle. Nous avons suivi les discussions sur le forum et compris vos commentaires et sentiments.

Pour adoucir cette étape et vous donner plus de flexibilité et d’outils, nous avons apporté quelques améliorations concernant la nature (partageable ou non partageable) des sélections d’entités.

Avant de poursuivre, nous vous recommandons vivement de lire cet article de blog et celui-ci afin de comprendre les améliorations décrites ci-dessous.

HDI : Améliorations des sélections d’entités

4D v18 R5 offre davantage de possibilités pour gérer les sélections d’entités non partageables (modifiables). Elle vous aide à travailler comme vous en avez l’habitude.

En revanche, si vous êtes prêt à travailler avec des sélections d’entités partageables, nous vous avons aidé à vous préparer à cette nouvelle ère dans 4D v18 R5. Dans 4D v18, nous avons introduit une méthode flexible que vous pouvez utiliser de manière transparente pour préparer votre code.

En bref : préparez dans 4D v18, exécutez dans 4D v18 R5, et préparez-vous à plus de performance !

à propos des sélections d’entités modifiables

ajouter une entité à une sélection d’entités

Un cas d’utilisation fréquent est d’afficher une sélection d’entités dans une boîte de liste (produits, factures, etc.) et de permettre à l’utilisateur d’en ajouter de nouvelles.

Travaillons sur une classe de données de produits.

Lorsque le formulaire est chargé, Form.products est créé, c’est la source de données de la liste déroulante :

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

Lorsque l’utilisateur ajoute un nouveau produit :

Form.products.add(Form.product)

Si vous exécutez ce code tel quel dans 4D v18 R5, vous obtiendrez une erreur lors de l’exécution de la fonction add() car ds.Products.all() renvoie une sélection d’entités partageables ( non modifiables).

Nous sommes conscients de ce désagrément. C’est pourquoi vous trouverez la fonction 4D v18 copy() est disponible pour préparer votre code à la version R5 de 4D v18.

Si copy() est exécuté dans 4D v18 : il ne fait que copier votre sélection d’entités

Si copy() est exécuté dans 4D v18 R5, par défaut, il copie votre sélection d’entités non modifiable en une sélection modifiable afin que vous n’ayez aucun problème avec l’action d’ajout !

Il suffit donc de préparer votre code comme ceci :

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

retenir la nature des sélections d’entités

Les sélections d’entités créées à partir d’une sélection d’entités originale conservent la même nature.

exemples

Trier une boîte de liste

Reprenons l’exemple des produits affichés. Cette sélection d’entités affichées a été définie comme modifiable parce que l’utilisateur doit ajouter de nouveaux produits.

Toute action sur les colonnes de la boîte de liste conserve la nature modifiable de la sélection d’entités, de sorte que vous pouvez toujours ajouter des produits.

Exécution d’une requête

Si vous exécutez une requête sur une sélection d’entités, la nature de la sélection d’entités est conservée pour le résultat.

Dans notre exemple, si l’utilisateur effectue une recherche sur les produits affichés :

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

Le résultat de la requête est modifiable. Il est donc possible d’ajouter de nouveaux produits car Form.products est modifiable.

Il ne s’agit que de deux exemples. Consultez la documentation pour vérifier tous les cas où la nature de la sélection originale est conservée.

code générique

Il peut être utile de vérifier la nature d’une sélection d’entités dans du code générique afin de l’utiliser de manière appropriée. Imaginons une méthode recevant une sélection d’entités qui peut être soit partageable, soit non partageable.

Dans l’exemple ci-dessous, nous recevons une sélection d’entité Products. Avant de la transmettre à un TRAVAILLEUR, nous devons vérifier si elle est partageable. Si ce n’est pas le cas, nous la transformons en une sélection d’entité partageable.

Pour cela, nous utilisons la nouvelle fonction OB Is shared() pour cela.

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)

Remarque: Il existe également une nouvelle fonction isAlterable() disponible sur les sélections d’entités pour vérifier si elles sont modifiables.

Téléchargez le HDI ci-dessus pour plus d’exemples !

Continuer à travailler comme avant

Si vous voulez continuer le comportement des versions précédentes de 4D (sans aucune notion de sélections d’entités partageables), vous pouvez utiliser la fonction makeSelectionsAlterable() fonction de classe disponible sur l’objet datastore.

Les changements apportés par 4D v18 R5 seront totalement transparents pour vous.

Avatar
- Product Owner - Marie-Sophie Landrieu-Yvert a rejoint l'équipe de 4D Product en tant que Product Owner en 2017. En tant que Product Owner, elle est en charge de rédiger les user stories puis de les traduire en spécifications fonctionnelles. Son rôle est également de s'assurer que l'implémentation de la fonctionnalité livrée répond au besoin du client.Marie-Sophie est diplômée de l'école d'ingénieur ESIGELEC et a commencé sa carrière en tant qu'ingénieur chez IBM en 1995. Elle a participé à divers projets (projets de maintenance ou de construction) et a travaillé en tant que développeur Cobol. Elle a ensuite travaillé en tant que concepteur UML et développeur Java. Dernièrement, ses principaux rôles étaient d'analyser et de rédiger des exigences fonctionnelles, de coordonner les équipes commerciales et de développement.