Creer une entity selection à partir d'un ensemble?

Possible ou pas ?
Si oui, comment ?

Bonjour,

On peut créer une entity selection à partir d’une sélection courante (Create entity selection).

Donc je pense qu’il faudrait mettre à jour la sélection courante à partir de l’ensemble puis créer l’entity selection.

Mouai, sauf que l’idée était de créer une entity selection à partir d’un ensemble de surlignage provenant d’une listbox selection… :mrgreen:

Bonsoir Manuel,

je ferai une boucle sur les éléments sélectionnés, puis dans cette boucle, j’effectuerai une recherche de l’entité que j’ajouterai à une entité sélection. En gros, cela donnerai un truc du genre (pas testé) :

<code 4D>
C_OBJECT($employees;$employee)
boucle ($a;1;xxxx)
$MonSuperDiscriminant:= ???
$employees:=ds.Employee.query(“lastName = :1”;$MonSuperDiscriminant)
$employees.add($employee)
fin de boucle
</code 4D>

enfin, c’est l’idée :wink:

Bonjour,

Faire une boucle est une (très) mauvaise idée (autant de requêtes que de boucles…en C/S c’est une catastrophe)

La réponse de Marie-Sophie est la meilleure (et je ne dis pas ça parce que c’est une collègue :slight_smile:

Il faut cependant faire attention car :
1°) La commande “Create entity selection” utilise la sélection courante, pas une sélection nommée. ll faut donc sauvegarder la sélection courante d’abord puis la restituer à la fin (CUT/USE).
2°) Les ensembles ne sont pas triés; il faut donc, si nécessaire, trier l’ Entity Selection générée (.orderBy).

exemple:

Si votre sélection de départ a été créée comme ceci :
<code 4D>
QUERY([albums];[albums]name=“L@”)
ORDER BY([albums]name;>)
</code 4D>

Alors vos pouvez créer votre E.S. comme ceci :

<code 4D>
CUT NAMED SELECTION([albums];“tempo”)
USE SET("$ListboxSet")
albumsES:=Create entity selection([albums]).orderBy(“name asc”) // {.orderBy SI necessaire}
USE NAMED SELECTION(“tempo”)
</code 4D>

Bonne journée !

Merci Roland, je n’avais pas vu la commande ‘create entité selection’ dans la doc.

Je suis tout à fait d’accord avec toi que la boucle en C/S est absolument catastrophique, mais quand tu n’as pas la commande (en tête) qui va bien, tu trouves un moyen de faire ce que tu veux autrement, quitte à revenir par la suite pour simplifier.

Oui, bien sûr… tout le monde agit ainsi (et je ne suis pas le dernier)
Il faut juste ne pas oublier de faire les modifs a postériori :slight_smile:

En tout cas, bienvenue dans le monde merveilleux d’ORDA !

: Roland LANNUZEL

Oui, bien sûr…tout le monde agit ainsi (et je ne suis pas le
dernier)
Il faut juste ne pas oublier de faire les modifs a postériori :slight_smile:
J’ai pris l’habitude lorsque je ne suis pas satisfait de mettre un commentaire ‘#TODO: description’ et quand cela me convient d’un point de vu optimisation, le commentaire saute.

: Roland LANNUZEL

En tout cas, bienvenue dans le monde merveilleux d’ORDA !
Merci. Je m’y met autant que possible et comme je l’ai écrit dans un autre post, pour le moment, il n’y a que très peu de commandes 4D qui sont utilisés pour faire ce que je veux. C’est vrai que c’est d’une incroyable puissance, à nous désormais d’apprendre à la comprendre et la maîtriser.

Patrick

Merci Roland pour ton idée, sauf que cela ne fonctionne pas. :frowning:

Cela créé bien une entité selection comme voulu mais on perd l’affichage de la “selection” (surlignage des elements dans la listbox) lors de la remise en place de la selection tempo dans la listbox selection initiale. De plus, je ne vois pas dans quel evenement effectuer cette méthode sur l’évemement sur nouvelle selection cela ne fonctionne pas; on perd comme évoqué plus haut la “selection” (surlignage des elements dans la listbox) l’utilisateur n’a même pas la possibilité de choisir des elements.

Bon, j’ai réussi à contourner en ajoutant la commande
<code 4D>
COPIER ENSEMBLE("$ListboxSetFactureVte";"$ListboxSetFactureVte")

</code 4D>
qui remet en place l’ensemble de surlignage dans la listbox selection initiale.

Bonjour,

Avec tous les points sur tous les “i” cette fois

J’ai exécuté ce code dans un bouton

<code 4D>
QUERY([albums];[albums]name=“L@”)
ORDER BY([albums]name;>)
CREATE EMPTY SET([albums];"$ListboxSet")
</code 4D>

et celui-ci dans un autre

<code 4D>
CUT NAMED SELECTION([albums];“tempo”)
COPY SET("$ListboxSet";"$tempoSet")
USE SET("$ListboxSet")
albumsES:=Create entity selection([albums]).orderBy(“name asc”)
USE NAMED SELECTION(“tempo”)
COPY SET("$tempoSet";"$ListboxSet")
CLEAR SET("$tempoSet")
</code 4D>

mais ça marche aussi en déportant le code dans l’event “on selection change” de la listbox selection

<code 4D>
Case of
: (Form event=On Selection Change)
CUT NAMED SELECTION([albums];“tempo”)
COPY SET("$ListboxSet";"$tempoSet")
USE SET("$ListboxSet")
albumsES:=Create entity selection([albums]).orderBy(“name asc”)
USE NAMED SELECTION(“tempo”)
COPY SET("$tempoSet";"$ListboxSet")
CLEAR SET("$tempoSet")
End case
</code 4D>

[]25633131;“Your comment here…”[/]
[]25633136;“Your comment here…”[/]

You may do COPY SET before USE SET, then copy back the set to the highlight set after USE NAMED SELECTION.

Alan Chan

@Roland et Alan :
Je vous confirme qu’en copiant l’ensemble de surlignage sur lui même après la remise en place de la selection tempo cela fonctionne. Merci.

de rien :slight_smile:

En fait il suffit de faire :

COPY SET("$ListboxSet";"$ListboxSet")

Comme vous l’avez peut-être remarqué déjà;
C’est limite bug, je le reconnais (mais le fil est clos :slight_smile:

Il y a un effet de bord en utilisant votre technique :cry:, on ne peut plus naviguer dans la listbox avec les touches flèche haut et bas…

On ne peut que accéder au premier et deuxième element puis on revient au premier, etc…

Auriez-vous une solution alternative :?:

Je vois deux solutions alternatives.

Je ne peux pas utiliser votre premiere suggestion :roll: (je fais des choses qui ne sont pas (encore ?) possibles en ORDA).

J’essai donc la seconde, mais je tombe sur un message d’erreur suivant:

Type de valeur non pris en charge dans un objet ou une collection partagé(e).

Error code: -10721 (4DRT)
Type de valeur non pris en charge dans un objet ou une collection partagé(e).
component: ‘4DRT’
task -10, name: ‘Pro_Devis’

Visiblement le pointeur sur la table ne passe pas

Il faut adapter en passant le numéro de table. Ça devrait le faire.

Sauf que j’arrive pas à utiliser le numero de table pour creer l’entité selection
ensuite il faut utiliser Utiliser pour alimenter un objet partagé
et enfin le type entite selection n’est pas pris en charge dans l’objet partagé :frowning:

Avec le numéro de table, on obtient un pointeur sur la table qu’il suffit de dépointer.
Mais le problème n’est pas là.

En effet, j’avais oublié qu’on ne peut pas mettre d’entity selection dans un objet partagé.
Cette alternative tombe à l’eau.

C’est pour en faire quoi de cette entity selection ?