IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

ouinon comment cela fonctionne ?


Sujet :

WinDev

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    425
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 425
    Par défaut ouinon comment cela fonctionne ?
    Hello,

    J'ai le code suivant qui vient de l'exemple WD Qui blocque.
    Tout fonctionne parfaitement dans mon project, quand j'utilise le code si dessous.

    Mais j'aimerai utiliser mes propres boites de dialogues.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SI OuiNon(Non,"Cet enregistrement est en cours de modification par "+SansEspace(VERROU.UTILISATEUR)+" depuis "+TxtAffiché,...
        //"Vous ne pouvez pas le modifier pour l'instant.","",...
        //"Voulez-vous envoyer un message à "+SansEspace(VERROU.UTILISATEUR)+" pour lui demander de libérer l'enregistrement ?") alors
    J'ai pour cela donc crée un fen simple avec le même texte et deux bouton
    oui et non. Oui renvoyant une chaine = "1"

    Maintenant quand je remplace le code si dessus par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Ouvre(FEN_quiblocque)
        SI gsQuestionqb = "1" ALORS
    Je tombe dans un boucle.
    Je ne comprends pas.
    C'est pourtant réellement les seules lignes que je change !!

    Qu'est-ce que ouinon renvoie de plus pour arrêter cette boucle ?

    BAV

  2. #2
    Membre chevronné
    Profil pro
    Freelance
    Inscrit en
    Avril 2003
    Messages
    393
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Freelance

    Informations forums :
    Inscription : Avril 2003
    Messages : 393
    Par défaut
    OuiNon renvoi simplement Oui ou Non (variable windev)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    425
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 425
    Par défaut
    Voici le code complèt de ma procédure globale :

    Ceci est dans le fen X:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SI Bloque("Patienten",HNumEnr(Patienten)) = Faux ALORS RETOUR
    Ceci est ma procédure globale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    FONCTION Bloque(NomFichier,NuméroEnreg)
    
    // NB : Le fichier "VERROU" étant amené à subir de nombreux accès,
    // le CR de blocage est testé même sur les fonctions HF non-bloquantes
    // afin d'éviter d'éventuels 'accès concurrentiels innattendus'
    
    Résultat est un booléen        // Blocage réussi ou non
    
    // Tentative de blocage
    HLit(NomFichier,NuméroEnreg,hBlocageEcriture)
    // Test du compte-rendu
    SI HErreurBlocage() ALORS
        // Recherche du nom de l'utilisateur modifiant l'enregistrement en cours
        BOUCLE
            HLitRecherche(VERROU,CLEUNIQUE,HConstruitValClé(VERROU,CLEUNIQUE,NomFichier,NuméroEnreg))
            SI HErreurBlocage() ALORS
                Multitâche(200)     //    Ré-essai 2 s. plus tard
            SINON
                SORTIR
            FIN
        FIN
        SI HTrouve() ALORS
            // On signale à l'utilisateur qui bloque l'enregistrement et depuis quand
            Diff est une chaîne = DateHeureDifférence(VERROU.DATEDEBUT+VERROU.HEUREDEBUT,DateDuJour()+Maintenant()[[1 A 6]])
            //TxtAffiché est une chaine
            SI Val(Diff[[2 A 8]])>0 ALORS TxtAffiché += Val(Diff[[2 A 8]])+" j. " // Jours  (même si improbable)
            SI TxtAffiché~=""     // < 1 jour => test si heures
            SI Val(Milieu(Diff,9,2))>0 ALORS TxtAffiché += Milieu(Diff,9,2)+" h " // Heures (possible ?)
        SINON                // > 1 jour => heures tjs affichés
            TxtAffiché += Milieu(Diff,9,2)+" h " // Heures (possible ?)        
        FIN
        TxtAffiché +=  Milieu(Diff,11,2)+" ' " + Milieu(Diff,13,2) + " '' "
        SI OuiNon(Non,"Cet enregistrement est en cours de modification par "+SansEspace(VERROU.UTILISATEUR)+" depuis "+TxtAffiché,...
        "Vous ne pouvez pas le modifier pour l'instant.","",...
        "Voulez-vous envoyer un message à "+SansEspace(VERROU.UTILISATEUR)+" pour lui demander de libérer l'enregistrement ?") ALORS
        
        // Saisie du message
        MsgàEnvoyer est une chaîne 
        MsgàEnvoyer = Ouvre(Fen_SaisieMessage,"Je souhaiterais modifier cet enregistrement."+RC+"Merci de le libérer rapidement.",SansEspace(VERROU.UTILISATEUR))
        SI MsgàEnvoyer<>"" ALORS
            // Message pour l'utilisateur en train de modifier l'enregistrement
            BOUCLE
                HLitRecherche(VERROU,CLEUNIQUE,HConstruitValClé(VERROU,CLEUNIQUE,NomFichier,NuméroEnreg))
                SI HErreurBlocage() ALORS
                    Multitâche(200)     //    Ré-essai 2 s. plus tard
                SINON
                    SORTIR
                FIN
            FIN
            SI HTrouve() ALORS
                // Mémorisation du flag testé par la procédure MsgBlocage()
                VERROU.ENVOIMSG = Vrai
                VERROU.MSG = MsgàEnvoyer
                VERROU.AUTEURMSG = RéseauUtilisateur()
                BOUCLE
                    HModifie(VERROU)
                    SI HErreurBlocage() ALORS
                        Multitâche(200)     //    Ré-essai 2 s. plus tard
                    SINON
                        SORTIR
                    FIN
                FIN
            FIN
        FIN
    FIN
    SINON
    // L'enregistrement a été bloqué par un autre mécanisme que celui proposé ici
    Info("Cet enregistrement est en cours de modification sur un autre poste du réseau.",...
    "Veuillez réessayer ultérieurement.")
    FIN
    Résultat = Faux
    SINON
    // Recherche si le verrou a bien été enlevé lors du dernier blocage
    BOUCLE
        HLitRecherche(VERROU,CLEUNIQUE,HConstruitValClé(VERROU,CLEUNIQUE,NomFichier,NuméroEnreg))
        SI HErreurBlocage() ALORS
            Multitâche(200)     //    Ré-essai 2 s. plus tard
        SINON
            SORTIR
        FIN
    FIN
    // Mémorisation du verrou avec le nom de l'utilisateur + qques infos
    HRAZ(VERROU)
    VERROU.FICHIER = NomFichier ; VERROU.ENREG = NuméroEnreg
    VERROU.UTILISATEUR = RéseauUtilisateur()
    VERROU.DATEDEBUT = DateDuJour() ; VERROU.HEUREDEBUT = Maintenant()
    SI HTrouve() ALORS
        BOUCLE
            HModifie(VERROU)    // On écrase le verrou existant
            SI HErreurBlocage() ALORS
                Multitâche(200)     //    Ré-essai 2 s. plus tard
            SINON
                SORTIR
            FIN
        FIN
    SINON
        BOUCLE
            HAjoute(VERROU)    // On crée le verrou
            SI HErreurBlocage() ALORS
                Multitâche(200)     //    Ré-essai 2 s. plus tard
            SINON
                SORTIR
            FIN
        FIN
    FIN
    HErreurDoublon() // Par sécurité : ce cas est improbable puisque la recherche sur clé unique vient d'être faîte.
    Résultat = Vrai
    FIN
    
    RENVOYER Résultat
    Comme ceci elle fonctionne parfaitement.

    Mais la partie rouge j'aimerai la remplacer par une fen personnalisé.

    Mais du coup, par exemple, si je travaille avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // bouton = "1" = oui 
    ouvre(fenperso)
    si bouton = "1" alors
    Je tombe dans une boucle.
    Normallement si cela fonctionne correctement, si je choisie "non".
    Le deuxième fois que le procédure est parcouru, Htrouve() devrait être faux et donc passer à la partie

    J'aimerai vraiment résoudre se problème.

    BAV

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Par défaut
    Citation Envoyé par chapeau_melon Voir le message
    Qu'est-ce que ouinon renvoie de plus pour arrêter cette boucle ?
    OuiNon renvoie un boléen Vrai/Faux comme te l'a dit VincentRoy
    Boléen qui est réinitialisé à chaque fois que la question est posée.

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Février 2003
    Messages
    4 341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 4 341
    Par défaut
    J'ai pas tout regardé mais déjà, en un coup d'oeil, je peux te dire que ton code peux boucler indéfiniment !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    BOUCLE
      HLitRecherche(VERROU,CLEUNIQUE,HConstruitValClé(VERROU,CLEUNIQUE,NomFichier,NuméroEnreg))
      SI HErreurBlocage() ALORS
        Multitâche(200)     //    Ré-essai 2 s. plus tard
      SINON
        SORTIR
      FIN
    FIN
    Si le fichier VERROU est bloqué ou a un problème ! Tu ne sors jamais de là !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    425
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 425
    Par défaut
    Bon pour finir cela fonctionne avec l'intégration de ma fen personalisé.
    Il y avait à mon avis plusieurs problèmes :
    - Je lançait la procédure à partir de "prise de focus" fen.
    Donc ma fen perso enclenchait une perte de focus forcément.
    - je travaille maintenant pour les bouton de confirmation dans ma fen
    perso avec un booléen.
    - Et il fallait jouer aussi avec la procédure Débloque.
    - un fen réagit à mon avis différement sur le projet que une boite de dialogue comme ouinon (par exemple en terme de focus)

    Merci en tout cas !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. client RMI comment cela fonctionne-t-il?
    Par manux53 dans le forum Langage
    Réponses: 10
    Dernier message: 21/04/2010, 15h39
  2. Comment cela fonctionne ?
    Par AuraHxC dans le forum Bibliographies - Index - Glossaires
    Réponses: 2
    Dernier message: 09/11/2009, 12h01
  3. snprintf comment cela fonctionne?
    Par deck_bsd dans le forum C
    Réponses: 3
    Dernier message: 24/11/2006, 15h20
  4. [Berkley DB] Comment cela fonctionne ?
    Par saidus dans le forum Autres SGBD
    Réponses: 1
    Dernier message: 22/02/2006, 17h49
  5. [Caml] Du mal à comprendre comment cela fonctionne...
    Par Sir Caedes dans le forum Caml
    Réponses: 16
    Dernier message: 05/01/2006, 11h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo