|
| Utilisation de ..Après sur une variable Procédure |
| Iniciado por Julien V, 02,jul. 2020 15:31 - 9 respuestas |
| |
| | | |
|
| |
Miembro registrado 134 mensajes |
|
| Publicado el 02,julio 2020 - 15:31 |
Bonjour,
Je travaille sur un projet où des fenêtres internes sont utilisées dans des onglets mais peuvent être également utilisées dans une fenêtre "popup" contenant un champ fenêtre interne.
En mode "popup", certains comportements doivent êtres surchargés. Pour simplifier au max le process, la mise à jour des contrôles se fait uniquement au niveau de la fenêtre "popup" pour ne pas avoir à gérer des exceptions dans chaque fenêtre interne qui peut être utilisée.
Jusqu'à maintenant, je m'en sortais en définissant des procédures dans la fenêtre "popup" et en appliquant ces procédures au clic de champs de mes fenêtres internes
Ex. Soit - POPUP_FI ma fenêtre "popup" - CFI_fenetreInterne mon champ fenêtre interne, seul champ composant cette fenêtre - lproc_maj_controles() ma procédure qui remplace les comportements de certains champs - lproc_selectionner() une des procédures qui sera utilisée au clic d'un bouton présent dans la fenêtre interne
Procedure lproc_maj_controles()
SI ChampExiste( "POPUP_FI.BTN_selectionner" ) ALORS { "POPUP_FI.BTN_selectionner", indChamp }..Visible = Vrai Evénement( lproc_selectionner, "POPUP_FI.BTN_selectionner", WM_LBUTTONDOWN ) FIN J'ai besoin d'avoir un contrôle plus fin sur mes surcharges, j'aimerai pouvoir ajouter un comportement après une procédure lproc_selectionner déjà présente dans ma fenêtre interne
J'ai donc essayé ça :
SI ChampExiste( "POPUP_FI.BTN_selectionner" ) ALORS proc est une Procedure proc = ChercheProcédure( POPUP_FI.CFI_fenetreInterne..FenêtreSource + ".lproc_selectionner" ) SI proc <> Null ALORS proc..Après = lproc_selectionner() FIN FIN Le souci est que je me retrouve avec cette erreur :

Alors que lorsqu'on regarde la doc, les exemples de procédures font des traces et n'envoient pas spécialement de résultat...
Si quelqu'un a une piste je suis preneur ! |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 170 mensajes |
|
| Publicado el 02,julio 2020 - 15:51 |
enlève les parenthèses. Là tu dis :
proc..après = résultat de lproc_selectionner()
tu dois juste donner le nom de la proc
proc..après = résultat de lproc_selectionner
-- Hth, Padbrain |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 170 mensajes |
|
| Publicado el 02,julio 2020 - 15:52 |
oups,
proc..après = lproc_selectionner
-- Hth, Padbrain |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 170 mensajes |
|
| Publicado el 02,julio 2020 - 16:36 |
Et n'oublie pas le + :
proc..après += lproc_selectionner
-- Hth, Padbrain |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 134 mensajes |
|
| Publicado el 02,julio 2020 - 16:43 |
Padbrain a écrit :
oups, proc..après = lproc_selectionner Bonjour Padbrain, effectivement le fait d'enlever les parenthèses, je n'ai plus l'erreur
Par contre ça n'a pas l'air de fonctionner Dans ma fenêtre interne j'ai une procédure lproc_selectionner() qui renvoie une INFO( "procédure locale" ) Dans ma fenêtre POPUP_FI j'ai une procédure lproc_gros_test() qui renvoie une INFO( "procédure POPUP_FI" )
Quand je fais
proc est une Procedure proc = ChercheProcédure( POPUP_FI.CFI_fenetreInterne..FenêtreSource + ".lproc_selectionner" ) SI proc <> Null ALORS Trace( "je rentre bien dans la condition" ) proc..Avant = POPUP_FI.lproc_gros_test FIN
Je rentre bien dans la condition (vu avec le trace) par contre un clic sur un bouton comportant uniquement le code lproc_selectionner() va juste me faire une info "procédure locale"...
J'ai essayé avec ..Avant, ..après sans succès |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 170 mensajes |
|
| Publicado el 03,julio 2020 - 09:38 |
Bonjour Julien,
Je me pose une question : Julien V a écrit :
... J'ai besoin d'avoir un contrôle plus fin sur mes surcharges, j'aimerai pouvoir ajouter un comportement après une procédure lproc_selectionner déjà présente dans ma fenêtre interne ...
Pourquoi as-tu besoin de "surcharger" plus finement tes traitements lproc_selectionner ? Est-ce en fonction de la fenêtre POPUP contenant ta fenêtre interne ? |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 134 mensajes |
|
| Publicado el 03,julio 2020 - 10:24 |
Padbrain a écrit :
Bonjour Julien, Pourquoi as-tu besoin de "surcharger" plus finement tes traitements lproc_selectionner ? Est-ce en fonction de la fenêtre POPUP contenant ta fenêtre interne ? Bonjour Padbrain,
Désolé ça va être un pavé
En gros mon programme est composé d'onglets permettant de consulter des tables de données et des fiches. Les fenêtres tables sont composées de filtres, d'un bouton rechercher, d'un bouton modifier et d'une table présentant le résultat.
En mode classique un double clic sur la table ou clic sur le bouton modifier (procédure rattachée lproc_modifier) permet de consulter la fiche correspondante.
En mode "popup", en plus de la consultation de fiche, le besoin principal est de sélectionner une ligne. Mon code de sélection qui n'existait pas dans ma fenêtre table est affecté à un bouton BTN_selectionner qui passe en visible, ainsi qu'au double clic de la table puisque que la sélection est le comportement prioritaire en mode "popup"
Procedure lproc_selectionner()
i est un entier nom est une chaîne champ est un Champ
i = 1 nom = EnumèreChamp( POPUP_FI.CFI_fenetreInterne..FenêtreSource, i ) TANTQUE nom <> "" champ <- EnumèreChamp( POPUP_FI.CFI_fenetreInterne..FenêtreSource, i ) SI champ..Type = typTable ALORS POPUP_FI..ValeurRenvoyée = champ Ferme() FIN i++ nom = EnumèreChamp( POPUP_FI.CFI_fenetreInterne..FenêtreSource, i ) FIN
Ainsi si je dois chercher un ID de dossier par ex, j'ai un bouton qui m'ouvre la POPUP_FI avec ma fenêtre interne table des dossiers, j'applique mon filtre, je sélectionne ma ligne, POPUP_FI renvoie à ma fenêtre principale l'ID de dossier.
Tout ça fonctionne très bien.
Le souci est que le programme est destiné à des gestionnaires qui aimeraient utiliser au max des raccourcis claviers. Par exemple je suis dans ma table je saisie mes filtres, touche Entrée pour faire la recherche (touche d'appel), ma table est filtrée, deuxième fois touche Entrée pour consulter la fiche.
Pour faire ça, j'ai remplacé le code lproc_rechercher() de mon bouton BTN_rechercher par le code suivant :
SI ChampPrécédent() = TABLE_assure..Nom ALORS
SI BTN_selectionner..Visible ALORS lproc_selectionner() SINON lproc_modifier() FIN
SINON
lproc_rechercher() SI TableOccurrence( TABLE_assure ) > 0 ALORS DonneFocus( TABLE_assure ) FIN
FIN
où lproc_selectionner() qui avant cette histoire de raccourci n'existait pas, le code étant affecté au bouton par POPUP_FI...
Du coup en mode "popup" à la deuxième touche entrée, j'aimerai que mon popup me renvoie l'ID de la ligne sélectionnée. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 170 mensajes |
|
| Publicado el 03,julio 2020 - 11:27 |
Hello,
Ne serait-il pas plus simple, de passer un paramètre de type procédure à ta FI en mode POPUP te permettant de gérer le retour de l'ID ?
Déclarations globales de ta FI
Procedure MaFenêtre(pRetournerID est proc = Null)
Dans ta FEN_POPUP, tu ouvres ta FI avec :
recupererId est Procedure = retournerIdALaFenetrePrincipale ChangeFenêtreSource(CFI_fenetreInterne, FI_TaFenetre, recupererId )
et dans le code du bouton de ta FI tu peux gérer l'existence de ta procédure par un test à null ou à l'aide d'une exception. |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 134 mensajes |
|
| Publicado el 03,julio 2020 - 14:07 |
Re,
Pas si simple, mes fenêtres ont un nombre de paramètres variables avec de l'obligatoire et de l'optionnel, la surcharge dans POPUP_FI gère une liste de fenêtres internes avec les fonctions FIListe afin de ne pas sortir du POPUP en cas de création de fiche...
J'ai contourné en enlevant la notion de sélection dans mes fenêtres internes et une surcharge du bouton rechercher avec la procédure spé
i est un entier nom, nom_table est une chaîne proc est une Procedure
i = 1 nom = EnumèreChamp( POPUP_FI.CFI_fenetreInterne..FenêtreSource, i ) TANTQUE nom <> "" ET nom_table = "" SI { nom, indChamp }..Type DANS ( typTable, typTableHierarchique ) ALORS nom_table = nom SORTIR FIN i++ nom = EnumèreChamp( POPUP_FI.CFI_fenetreInterne..FenêtreSource, i ) FIN
SI ChampPrécédent() <> "" ALORS SI ChampPrécédent() = nom_table ALORS POPUP_FI.lproc_selectionner() SINON proc = ChercheProcédure( POPUP_FI.CFI_fenetreInterne..FenêtreSource + ".lproc_rechercher" ) SI proc <> Null ALORS proc() SI TableOccurrence( nom_table ) > 0 ALORS DonneFocus( nom_table ) FIN FIN FIN Ça passe...
En tout cas merci pour toutes ces propositions ! |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 170 mensajes |
|
| Publicado el 03,julio 2020 - 14:53 |
Content que tu t'en soit sorti.
 |
| |
| |
| | | |
|
| | | | |
| | |
|