|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : août 2008 Messages : 32 ![]() |
Bonjour,
J'ai un traitement de sous-fichier classique via un READC. Ce READC ne lit que les lignes modifiées (pas de SFLNXTCHG global ) L'utilisateur a également la possibilité de cliquer avec la souris sur une ligne du sous-fichier. Mon problème : comment faire pour que la ligne cliquée soit détectée par le READC ? J'ai essayé en insérant un SFLNXTCHG conditionné, puis en faisant un CHAIN sur le sous-fichier + activer le SFLNXTCHG + mise à jour. Mais ça ne marche pas, le READC qui suit ne voit toujours pas ma ligne. Une idée ? Merci |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Colle ici les DDS de l'écran, stp.
Il va falloir utiliser RTNCSRLOC() avec SFLCSRRRN(). |
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : août 2008 Messages : 32 ![]() |
Je ne vois pas bien l'utilité du RTNCSRLOC dans mon cas.
J'utilise déjà SFLCSRRRN qui me renvoi le N° de ligne du sous-fichier. Reste à savoir comment faire comprendre au READC que cette ligne a été modifiée... |
|
|
00
|
|
|
#4 |
|
Membre régulier
![]() Inscription : octobre 2006 Messages : 111 ![]() |
Une ligne cliquée ne sera jamais indiquée comme telle au serveur, sauf dans un cas, si la ligne est associée au mot clé SFLSNGCHC. Mais dans ce cas, on oublie les zones d'entrée, le sous-fichier se comporte comme une Listbox en mode lecture seul.
|
|
|
00
|
|
|
#5 | ||||
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Voila comment j'y suis arrivé avec RTNCSRLOC() et SFLCSRRRN().
J'ai également utilisé MOUBTN() et le code AID pour savoir s'il y a eu utilisation de la souris. J'ai eu besoin de RTNCSRLOC() pour savoir sur quelle zone de quel format l'utilisateur a cliqué. Voici les DDS de mon SF de contrôle : Code :
Code :
|
||||
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : août 2008 Messages : 32 ![]() |
Désolé je n'arrive pas à reproduire ton exemple.
La donnée SflNxtChg est inconnue. |
|
|
00
|
|
|
#7 | |||
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Citation:
1/ Au niveau du format du SF de données (SF data), j'utilise par exemple l'indicateur 55 : 2/ Au niveau du programme RPG, comme je pense à la maintenance, je définis un nom plus significatif que *in55 comme suit : Code :
|
|||
|
|
00
|
|
|
#8 | ||||
|
Invité régulier
![]() Inscription : août 2008 Messages : 32 ![]() |
ah ok, je pensais que ça venais de ma version (v5r4).
Donc pour résumer, tu CHAIN sur la ligne du sous-fichier, tu actives l'indicateur du SFLNXTCHG et tu UPDATE. Mais c'est exactement ce que j'avais essayé dès le départ. Moi j'avais codé comme ça, mais ça revient au même : DDS Code :
Code :
Ca marche vraiment chez toi ? |
||||
|
|
00
|
|
|
#9 | ||||
|
Invité régulier
![]() Inscription : août 2008 Messages : 32 ![]() |
J'ai creusé un peu et la souris n'y est pour rien.
Si je simplifie de la façon suivante, ça ne marche pas non plus. DDS Code :
RPG Code :
(EDIT) En fait apparemment, par cette méthode, le programme attend de repasser par le EXFMT. Le READC ne se déclenche pas la 1ère fois, mais une fois un aller/retour via le EXFMT, il se déclenche bien sur la ligne que l'on a mit à jour. C'est étonnant. Une mise à jour après un READC peut tout à fait être relue par un autre READC. Mais une mise à jour via un CHAIN est invisible tant qu'on est pas repassé par l'écran. |
||||
|
|
00
|
|
|
#10 |
|
Membre éclairé
![]() Inscription : septembre 2008 Messages : 251 ![]() |
Je crois que c'est normal.
Vous faites un update du sous-fichier mais vous ne réaffichez pas le sous-fichier de controle. Du coup, le readc suivant lit " l'ancien " sous-fichier (celui qui est à l'écran) Moi, je traiterais le sous-fichier par readc puis je regarderais si un clic a été fait et je le traiterais avec un chain sur le sous-fichier. |
|
|
00
|
|
|
#11 |
|
Invité régulier
![]() Inscription : août 2008 Messages : 32 ![]() |
Non, la mise à jour par le CHAIN est bien réalisée sur le sous-fichier actuel, et le READC se base sur ce même sous-fichier.
C'est juste l'indicateur de modification qui n'est pas actif, comme si cet indicateur n'était mis à jour que par un EXFMT ou un READC. Pour passer outre pour l'instant, j'ai déclarer un SFLNXTCHG sans condition, de ce fait le READC lit toutes les lignes, et retrouve donc bien celle que j'ai modifiée manuellement auparavant. Ca marche comme ça, mais j'aurais bien aimé trouver une méthode plus propre. |
|
|
00
|
|
|
#12 | |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Citation:
|
|
|
|
00
|
|
|
#13 |
|
Membre éclairé
![]() Inscription : septembre 2008 Messages : 251 ![]() |
Non. Le chargement (par write ou update) dans le sous-fichier ne fait que le préparer pour le prochain affichage.
Le readc lit les enregistrements marqués comme modifiés lors de l'affichage du format de contrôle (plus précisément, lors de la lecture du format) Du coup : Indique que l'enregistrement sera marqué modifié lors de la lecture - chain 1 monsfl - eval option=' ' - eval sflnextchange=*on - update monsfl Affichage/Lecture du sous-fichier - exfmt monctl Lecture des enregs modifiés - readc monsfl Si on oublie l'exfmt, le readc lira simplement les enregs marqués comme lus lors du dernier affichage, et donc l'enregistrement "updaté" avec sflnxtchg ne sera pas lu par readc (sauf bien sûr s'il était déjà marqué modifié lors du dernier affichage) |
|
|
00
|
|
|
#14 | ||||
|
Invité régulier
![]() Inscription : août 2008 Messages : 32 ![]() |
Si, j'ai bien essayé via le code AID, comme tu me l'avais indiqué.
Mais ça ne marche pas mieux, le fonctionnement est identique à ma version. DDS Code :
Code :
|
||||
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Je ne sais pas ce que tu fais, mais chez moi, c'est sans souci avec ma programmation, je viens encore de réessayer.
As-tu debogué ton programme pour voir si tu passes dans ta routine de détection du clic souris avec *in14 ou AID = E01 ? Est-ce que tu as bien 5 dans ££OPT juste après le CHAIN ££SFL ? Sur quel bouton de la souris cliques-tu ? Double ou simple clic ? Reproduis ma programmation à l'identique dans ton programme et tu verras que ça marche. |
|
|
00
|
|
|
#16 | ||
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Je crois voir ton souci.
Il faut refaire un EXFMT entre l'update du SF et le READC. Tu dois voir apparaître sur l'écran l'option 5 générée par le clic souris. Est-ce que c'est çà ? Code :
|
||
|
|
00
|
|
|
#17 |
|
Membre éclairé
![]() Inscription : septembre 2008 Messages : 251 ![]() |
J'ai refait des essais, et j'ai une bonne nouvelle.
Comme je le disais dans mon post précédent, le update du sfl ne sert qu'à préparer le sous-fichier. c'est l'affichage du format de contrôle qui met à jour. Oui mais voila : exfmt = write + read. Est-ce le write ou le read qui met à jour ? J'ai fait un petit programme pour tester. Et bien, c'est le write ! Du coup, on peut mettre à jour le sous-fichier, faire un write puis continuer tranquillement dans la boucle de lecture des readc. Un exfmt aurait été gênant, puisqu'il forçait un nouvel affichage. Un write n'est pas gênant, l'utilisateur ne voit aucune différence. |
|
|
00
|
|
|
#18 |
|
Invité régulier
![]() Inscription : août 2008 Messages : 32 ![]() |
Oui !!! Effectivement le WRITE intermédiaire résoud le problème.
Merci pour cette grande idée, ça marche nickel. Un grand merci à vous. |
|
|
00
|
|
|
#19 | |
|
Membre Expert
![]() Inscription : novembre 2004 Messages : 1 298 ![]() |
Citation:
Et puis, j'ai soufflé la résolution du souci de mutsum1 en indiquant qu'il fallait faire un EXFMT entre l'update du SF et le READC. |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com