ORDA Trier colonne listbox collection ou entity

Bonjour,
je commence sur ORDA que semble être une très bonne chose, mais en essayant une listbox collection je suis tombe sur un os.

v17R2 build 227060 en client serveur

Une listbox collection de 4 colonnes
Dans la méthode formulaire la ds est définie très simplement :
C_OBJECT(momt)

Case of
: (Form event=On Load)

	momt:=ds.MO_MT_MTSUP.query("DateMoMt = :1";Current date).orderBy("DateMoMt asc, HeureMoMt asc")

End case

La listbox contient 3 colonnes d’une table liée et une colonne de la table principale.
Les trois colonnes de la table liée utilisent le nom du lien (“OneAlias”), donc j’ai utilisé :
This.OneAlias.Alias, ThisOneAlias.Prenom, et ThisOneAlias.Actif
Puis la dernière colonne est This.DateMoMt

ça fonctionne très bien, tout est bien affiché, mais la tentative de trier une des colonnes de la table liée prends plusieurs minutes (d’ailleurs j’avait lance le tri avant de commencer à faire ce message et ça tourne encore !!!).

Le datastore fait environ 28000 enregistrements, la table MO_MTSUP, elle fait environ 39 000 000 d’enregistrements et la table liée fait environ 100 000 enregistrements.

Faut il faire quelque chose de particulier au niveau du tri des colonnes de la listbox ou il y a un problème ???

merci de vos lumières

Juste pour savoir, le champ de ta colonne sur lequel tu cherches à trier est indexé ou pas :?:

oui biensur

Bonjour,

pour ce qui me concerne, je tourne en rond sur le sujet.
impossible d’obtenir un tri avec orderBy.

  1. tri sur relatedEntity -> pas de tri
  2. sur une colonne de type 'this.xxxx" -> pas de tri

Et surtout plus de lignes affichées si appel de orderBy

Problème résolu.
En écrivant mon message précédent, j’ai eu un doute…
Erreur de syntaxe. orderBy#orderby

orderBy -> OK.

Pas sûr que ça réponde à ce que tu cherches, j’ai vu https://blog.4d.com/combine-and-sort-collections/ça dans le beulogue> et https://kb.4d.com/assetid=78212ça dans la bo lèdge naze>.

ORDA : je sais que c’est tout neuf, en devenir et patin couffin, il demeure que j’éprouve une réelle frustration avec ce que propose la doc. Sans qu’il y ait besoin de surcharger la doc, des liens vers les bases exemples existantes feraient un bien fou.

https://kb.4d.com/assetid=78073

ca ne le fait pas ?

<code 4D>
// ----------------------------------------------------
// Project method : ui_listboxGetDataSource
// ----------------------------------------------------
// Declarations
C_TEXT($0)
C_TEXT($1)

C_LONGINT($Lon_parameters)
C_TEXT($Txt_dataSource;$Txt_name)
C_OBJECT($o)

If (False)
C_TEXT(ui_listboxGetDataSource ;$0)
C_TEXT(ui_listboxGetDataSource ;$1)
End if

// ----------------------------------------------------
// Initialisations
$Lon_parameters:=Count parameters

If (Asserted($Lon_parameters>=1;“Missing parameter”))

  // Required parameters
$Txt_name:=$1  // listbox widget name

Else

ABORT

End if

// ----------------------------------------------------
For each ($o;FORM Convert to dynamic(Current form name).pages) Until (Length($Txt_dataSource)#0)

If ($o.objects[$Txt_name]#Null)
	
	$Txt_dataSource:=Choose($o.objects[$Txt_name].listboxType=Null;"arrays";String($o.objects[$Txt_name].listboxType))
	
End if 

End for each

// ----------------------------------------------------
// Return
$0:=$Txt_dataSource // “arrays” | “currentSelection” | “nammedSelection” | “collection” | blank (widget not found)

// ----------------------------------------------------
// End

</code 4D>

Type(OBJET Lire source donnees(*;“ListBox”)->)=Est une collection
Non ?

Merci à tous !

Un petit retour :

• solution de Vincent et Patrick
je vais devoir utiliser autre chose en attendant, en v17r2 Form convert to dynamic n’avait pas fini de pousser
à noter : Vincent à complété la kb, mais poster du code 4D là dedans doit s’apparenter à faire entrer un crapaud dans une bouteille (il faut de solides références cinématographiques pour me comprendre)

• solution de Stanislas
OBJET Lire source données(*;“maListbox”) retourne Nil
En regardant la description (plus complète) du “setter” correspondant :
Dans le cas des list box, les points suivants sont à considérer :
les modifications de sources de données doivent tenir compte du type de list box : par exemple, il n’est pas possible d’utiliser un champ comme source de données de colonne d’une list box de type tableau.
pour les list box de type sélection, il n’est pas possible de modifier ou de lire la source de données de l’objet list box lui-même : il s’agit dans ce cas d’une référence interne et non d’une source de données.
cette commande est utile principalement dans le contexte des list box de type tableau. Pour les list box de type sélection, vous pouvez plutôt utiliser la commande LISTBOX SET COLUMN FORMULA.
ça m’a l’air plus orienté colonne de listbox que listbox tout court.

voilà…