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

InfoPath .NET Discussion :

Règles de validation sur un tableau extensible [IP-2007]


Sujet :

InfoPath .NET

  1. #1
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut Règles de validation sur un tableau extensible
    Bonjour,

    J'ai une règle simple, qui permet de la faire la comparaison entre deux (fois 2) champs.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private bool HoraireIsCorrect(int MinHeureXPath, int MinMinutesXPath, int MaxHeureXPath, int MaxMinutesXPath)
            {
                if (MinHeureXPath < MaxHeureXPath)
                    return true;
                if(MinHeureXPath == MaxHeureXPath)
                    if(MinMinutesXPath < MaxMinutesXPath)
                        return true;
                return false;
            }
    Cela fonctionne très bien pas de problème. En revanche, ces champs sont situés dans un groupe extensible.
    Le problème, c'est que mon test ne fonctionne que sur le premier élément de ce tableau.

    Comment puis-je faire pour que mon test s'exécute ligne à ligne et non pas uniquement sur le premier élément de mon tableau ?
    Comment savoir combien de lignes contient mon tableau extensible ?

    J'ai pensé aux méthodes "count(string XPath)" et "position(string XPath)" mais je ne sais pas trop comment les utiliser...
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  2. #2
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Ouh la, sympathique problème que les tableaux extensibles...

    Le problème vient de la récupération de votre valeur.
    En effet, vous devez faire un "selectsinglenode" de la manière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    this.MainDataSource.CreateNavigator().SelectSingleNode("//my:
    monchamp", NamespaceManager);
     
     
    
    Hors, pour récupérer la valeur en cours, il faut travailler sur le paramètre "e" qui est situé sur votre évènement de changement ou de validation.
    Vous verrez ainsi que la valeur récupérée correspondra à l'élément sur lequel vous êtes positionné.

    Je ne penses pas que cela fonctionne du premier coup, il va falloir vous aider du débuggueur.

    PS : Ce que vous souhaitez faire ne se fait pas par le design du formulaire (en utilisant les validation de données)? Cela vous éviterai de nombreuses minutes de recherche...
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  3. #3
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par billout rm Voir le message
    En effet, vous devez faire un "selectsinglenode" de la manière suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    
    this.MainDataSource.CreateNavigator().SelectSingleNode("//my:
    monchamp", NamespaceManager);
     
     
    
    Je confirme !
    Citation Envoyé par billout rm Voir le message
    Hors, pour récupérer la valeur en cours, il faut travailler sur le paramètre "e" qui est situé sur votre évènement de changement ou de validation.
    Vous verrez ainsi que la valeur récupérée correspondra à l'élément sur lequel vous êtes positionné.
    Je vais chercher de ce côté...
    Citation Envoyé par billout rm Voir le message
    PS : Ce que vous souhaitez faire ne se fait pas par le design du formulaire (en utilisant les validation de données)? Cela vous éviterai de nombreuses minutes de recherche...
    Oui c'est possible, mais dans le cas présenté, j'ai volontairement coupé une partie des tests. Le problème c'est que mes tests doivent se faire de façon croisé, sur 8 champs...
    Voici un exemple :
    1. Heures1
    2. Minutes1
    3. Heures2
    4. Minutes2
    5. Heures3
    6. Minutes3
    7. Heures4
    8. Minutes4

    Mes tests doivent couvrir les éventualités suivantes :
    Si heure1 est saisie, alors minutes1 doit être saisi... (valable pour les quatres)
    Heure1 doit être inférieur à heure2 & heure3 & heure4
    Heure3 doit ....
    etc
    J'ai en tout 16 tests sur les heures, plus les tests de remplissage.
    En passant par le designer, cela pose problème car on ne peut faire que 5 tests de suite pour la validation des données, et par les règles, cela devient compliqué. Sans parler de l'entretient du formulaire...

    Bref, je dois passer par le code... pas le choix.
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  4. #4
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Ok,

    Alors il va falloir regarder du côté du paremètre associé à l'évênement "Validating" de votre champ.

    De mémoire, je crois que si vous faites un e.Site.Value, vous aurez la valeur actuelle de votre champ.

    N'hésitez pas pour toute question ou remarque.
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  5. #5
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par billout rm Voir le message
    N'hésitez pas pour toute question ou remarque.
    Je vais pas m'en priver !

    L'évenement _Validating me permet de tester le champ, en effet, cela fonctionne avec les tableaux extensible.
    Voici un exemple rapide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void regMatinHeure_Validating(object sender, XmlValidatingEventArgs e)
            {
                if (e.NewValue != string.Empty && int.Parse(e.NewValue) > 11)
                    e.ReportError(e.Site, false, "Vous ne pouvez choisir une heure supérieure à 11.");
            }
    Mais dans mon cas, où les tests doivent se faire sur plusieurs champs, comment récupérer l’événement e de chacun d'entre-eux ?
    De plus cela veux dire qu'il faut que je fasse chaque test pour chaque champ... (16*8)
    J'ai dû louper une étapes... Quelque chose m'échappe.
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  6. #6
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Serait-il possible d'avoir une copie d'écran du design et de la structure des données de votre formulaire?
    Tout dépend en fait des contrôles et de la présentation que vous apportez au formulaire.

    Perso pour les heures et minutes dans mes formulaires, je mets en place des zones de liste déroulante, comme ça il n'est pas possible de saisir des valeurs improbables comme données... je maitrise ainsi les chiffres proposés (heures de 00 à 23 et minutes de 00 à 59) et je suis sûr que l'utilisateur ne saisi pas du texte.

    Cordialement.
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  7. #7
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par billout rm Voir le message
    Serait-il possible d'avoir une copie d'écran du design et de la structure des données de votre formulaire?
    Tout dépend en fait des contrôles et de la présentation que vous apportez au formulaire.

    Perso pour les heures et minutes dans mes formulaires, je mets en place des zones de liste déroulante, comme ça il n'est pas possible de saisir des valeurs improbables comme données... je maitrise ainsi les chiffres proposés (heures de 00 à 23 et minutes de 00 à 59) et je suis sûr que l'utilisateur ne saisi pas du texte.

    Cordialement.
    C'est mon cas !

    Les heures sont dans une liste déroulante, pareil pour les minutes.
    Pas de problème de ce point de vu.

    Pour ce qui est de la récupération des valeur, si je me place sur le groupe et non sur le champ lui-même. Est ce que je pourrais récupérer toutes les valeurs de mes champs.
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  8. #8
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Oui,

    De mémoire cela est faisable en accèdant au champ de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    e.Site.SelectSingleNode("./my:...",NamespaceManager)

    Toute l'astuce réside dans le "./" dans la sélection qui signifie de rester sur ce même niveau.

    Si cela ne marche pas, je me replongerai dans certains de mes bouts de code car j'ai déja fait ce genre de choses par le passé.

    Cordialement.
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  9. #9
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par billout rm Voir le message
    Oui,

    De mémoire cela est faisable en accèdant au champ de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    e.Site.SelectSingleNode("./my:...",NamespaceManager)
    Toute l'astuce réside dans le "./" dans la sélection qui signifie de rester sur ce même niveau.
    Il ne semble pas aimer mon "./my:...", il me génère une exception à chaque fois sur le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void regMidiDepartHeure_Validating(object sender, XmlValidatingEventArgs e)
            {
                if (!string.IsNullOrEmpty(e.NewValue) && !string.IsNullOrEmpty(e.Site.SelectSingleNode("./my:regMatinHeure", NamespaceManager).Value))
                    if (e.Site.SelectSingleNode("./my:regMatinHeure", NamespaceManager).ValueAsInt > int.Parse(e.NewValue))
                        e.ReportError(e.Site, false, "erreur de saisie");
            }
    dès la première ligne.
    Même chose si je la supprime...
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

  10. #10
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Désolé,

    J'étais pas loin c'était "../my:" qu'il faut utiliser pour récupérer les champs sur la même ligne du tableau extensible...

    Par contre il faudra faire 2-3 tests afin de vérifier que le code n'explose pas lors de l'ajout d'un nouvel élément (qui déclenche un évènement validating) ou de la suppression.

    Cordialement.
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  11. #11
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par billout rm Voir le message
    Désolé,

    J'étais pas loin c'était "../my:" qu'il faut utiliser pour récupérer les champs sur la même ligne du tableau extensible...

    Par contre il faudra faire 2-3 tests afin de vérifier que le code n'explose pas lors de l'ajout d'un nouvel élément (qui déclenche un évènement validating) ou de la suppression.

    Cordialement.
    Comment n'y ai-je pas penser ???
    Serte je débute avec cette techno mais quand même...

    Merci beaucoup pour ton aide.
    Je clôture ce post, si j'ai d'autres problèmes, je reviendrais vers vous !
    Maintenant, il ne me reste plus qu'à ré-adapter tout mon code...
    Aide les autres...
    Et les autres t'aideront....
    Mon site DVP
    N'oubliez pas de consulter les FAQ SharePoint et les cours et tutoriels SharePoint

    N'oubliez pas de voter pour les messages dont la réponse est pertinente

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

Discussions similaires

  1. Règle de validation sur les taches en fonction du whatId
    Par epeichette dans le forum Salesforce.com
    Réponses: 2
    Dernier message: 04/06/2012, 16h33
  2. Réponses: 5
    Dernier message: 28/07/2006, 08h16
  3. Réponses: 2
    Dernier message: 08/04/2004, 16h30
  4. Comment faire un Drag&Drop sur un tableau
    Par Stef.web dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2003, 13h12
  5. [VBA-E] Dim dynamique sur un tableau
    Par Vince69 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/12/2002, 13h32

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