ORDA, effet de bord?

Bonjour à tous,

Je suis en train de tester ORDA avec entre autres l’idée de remplacer VISUALISER SELECTION (il est temps !).

J’ai un formulaire affiché avec DIALOG ; il contient une listbox et un bouton pour afficher une liste dans la listbox (ex Form.DisplayList:=ds.ADR_ENTITIES.query(“Name=:1”;“Esc@”)
); très basique…

Si je mets des champs d’une table, par exemple This.Name, This.Address, tout se passe bien.
Si j’utilise une fonction, par ex First_Name(This.Name*), j’ai un effet de bord :

  • dans le cas simpliste décrit, 4D passe en mode trace lorsque je quitte le dialogue
  • dans un cas plus élaboré avec une méthode formulaire (je ne sais pas s’il y a un lien avec la présence d’une méthode formulaire), j’ai en plus un passage en trace lors de l’événement formulaire On Display Details pour chaque enregistrement et lorsque je quitte le dialogue, autant de passages en mode trace que d’enregistrements, avec événement formulaire = 0, cadeau aucun.

J’ai donc cherché l’événement On Display Details, il est décoché sur la listbox et n’apparaît pas pour les colonnes, si on regarde la palette globalement mais il est coché/grisé, si on regarde l’onglet événements de la palette.

J’avoue ne pas savoir quoi faire ; ai-je fait une erreur ?

Merci pour votre aide car pour le moment, je ne peux pas mettre en oeuvre cette solution.

  • Name contient nom et prénom

Je ne pense pas que ton effet de bord soit spécifique à ORDA, mais plutôt aux listbox selection ou entity. Avec les listbox selection, tu dois avoir le même phénomène: 4D ne sait pas tracer une méthode sur display details. Ou plutôt, il affiche un trace de la méthode formulaire qui n’a rien a voir…

Mais, tu ne le sais pas vu que tu as fait le grand saut VISUALISER SELECTION => ORDA :mrgreen:

Bonjour,

Je ne reproduis pas ce problème.
Est-il possible d’avoir une base pour le reproduire ?

Merci par avance.

A vos ordres chef :!: :wink:

Voici une petite base pour reproduire avec une listbox selection, mais je pense que c’est identique en ORDA…

https://forums.4d.com/4DBB_Main/x_User/4079/files/28356124.zip

Pour moi cela toujours était le cas, ce n’est absolument PAS nouveau.

Edit: pour reproduire : executer le Formulaire1 (A noter que le trace est dans la méthode contenu dans une des colonnes de la listbox)

Voici la meme base avec en Formulaire 2 une listbox ORDA (même chose si ce n’est que la trace ne s’execute qu’une seule fois sur l’événement chargement (j’ai désactivé tous les autres événement formulaire)

https://forums.4d.com/4DBB_Main/x_User/4079/files/28356441.zip

: Manuel PIQUET

Pour moi cela toujours était le cas, ce n’est absolument PAS nouveau.
Oui, c’est depuis la nuit des temps : quand un TRACE est demandé dans un contexte non traçable, le passage en trace n’a lieu que lorsque ce contexte “rend la main” à un contexte traçable. Le trace est en quelque sorte reporté - idem avec un point d’arrêt, d’ailleurs. Comme si 4D se disait “Ho, on me demande de passer en trace. Là tout de suite je ne peux pas, mais promis, dès que je sors d’ici, je tracerai”.
Comme contextes non traçables, j’ai en tête TRAITER BALISE 4D, EXÉCUTER FORMULE, “on display detail”, probablement d’autres - (formules dans write, par exemple). Par contre, je viens de tester rapidement en v17r2, des 3 cités seul “on display detail” produit encore ce trace reporté. Ça a probablement changé dans l’arrière cuisine.

@ Bernard
Pour autant que je sache, une colonne calculée d’une listbox n’a pas besoin que la propriété on display detail soit cochée, auquel cas pas besoin de s’embêter à détricoter le coché du pas coché. Il est facile de t’assurer si tu es dans le piège du trace reporté : virer toute trace et tout point d’arrêt dans ce qui est susceptible d’être appelé par ta formule.

Quizz du vendredi :
une fois le TRACE enlevé de la méthode concatener (ça énerve, sinon), pourquoi cette https://forums.4d.com/Post/FR/28348321/1/28356130#28356130listbox> de Manuel affiche 4 fois le premier enregistrement ? :wink:

: Arnaud DE MONTARD

Quizz du vendredi :
une fois le TRACE enlevé de la méthode concatener (ça énerve, sinon),
pourquoi cette
https://forums.4d.com/Post/FR/28348321/1/28356130#28356130listbox>
de Manuel affiche 4 fois le premier enregistrement ? :wink:

T’occupe pas, c’est la méthode formulaire qui refait un tout sélectionner dans tous les événements…

j’ai fait vite (trop) la base pas de protection des événements, il suffit de supprimer les evenements ou de protéger le code de la méthode formulaire

Manuel,

Ça me paraît bien être le même phénomène : ça passe en trace sans point ou instruction de trace.

Comme ma base est très grosse, je tâche de reproduire dans une petite base autonome.

En 32 bits, il me faut relancer 5 fois pour 4 enregistrements ; c’est ce que j’avais constaté sur ma base mais comme j’avais plus d’enregistrements, j’ai mis un moment à comprendre.
En 64 bits j’ai relancé plus de 10 fois sans arriver à afficher la listbox.

: Manuel PIQUET

c’est la méthode formulaire qui refait un tout sélectionner dans tous
les événements…
Tétrofor :slight_smile:
C’était marrant et intrigant, cette listbox qui affichait toujours le premier enregistrement.

J’ai fait de nouveaux essais en suivant les conseils d’Arnaud “virer
toute trace et tout point d’arrêt dans ce qui est susceptible d’être
appelé par ta formule”.
J’avais portant bien regardé s’il y avait des points de trace ou des
TRACE dans le code impliqué et je n’en avait pas trouvé.
J’ai fait une chasse aux sorcières et viré tous les TRACE ; et il y en
avait un paquet !
Ca l’air de fonctionner maintenant ; il y avait peut-être un phénomène
comme le décrit Arnaud

: Arnaud

Oui, c’est depuis la nuit des temps : quand un TRACE est demandé dans
un contexte non traçable, le passage en trace n’a lieu que lorsque ce
contexte “rend la main” à un contexte traçable. Le trace est en
quelque sorte reporté - idem avec un point d’arrêt, d’ailleurs. Comme
si 4D se disait “Ho, on me demande de passer en trace. Là tout de
suite je ne peux pas, mais promis, dès que je sors d’ici, je
tracerai”.
Comme contextes non traçables, j’ai en tête TRAITER BALISE 4D,
EXÉCUTER FORMULE, “on display detail”, probablement d’autres -
(formules dans write, par exemple). Par contre, je viens de tester
rapidement en v17r2, des 3 cités seul “on display detail” produit
encore ce trace reporté. Ça a probablement changé dans l’arrière
cuisine.

Merci pour vos conseils ; je clôture donc…