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

Salesforce.com Discussion :

Tester un champ via une classe Apex pour l'attribut rendered d'une page VisualForce


Sujet :

Salesforce.com

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 8
    Points
    8
    Par défaut Tester un champ via une classe Apex pour l'attribut rendered d'une page VisualForce
    Bonjour,

    Je voudrais faire apparaitre ou pas, un composant <apex:pageBlock> dans une page VisualForce grâce à l'attribut rendered"" en fonction du contenu du champ Avis__c.
    Si ce champ est vide, le composant ne doit pas s'afficher pas et inversement.
    Autant mon code ci-dessous pourrait permettre d'utiliser l'attribut rendered"" sur une colonne en aval d'une table, mais en amont je ne sais pas comment m'y prendre...
    Je pense que j'ai besoin de tester dans ma classe Apex une variable que j'ai nommée ExistAvis ? Si oui comment écrire cela ?

    La classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public class ExpertCon {
    
    List<Expertise__c> expertises ;     
    public List<Expertise__c> getexpertises() {
    if(expertises == null) expertises= [select Id, Avis__c, Conditions__c, Date__c, Faiblesses__c, Forces__c 
    from Expertise__c
    where Id=:ApexPages.currentPage().getParameters().get('Idxp')];
    return expertises ;
       }       
    }
    L'extrait de page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <apex:pageBlock rendered="if(isblank(ExistAvis), false, true)" >
      <apex:pageBlockTable value="{!expertises}" var="exp" > 
        <apex:column><apex:facet name="header">Forces</apex:facet><apex:outputField value="{!exp.Forces__c}"/></apex:column>
        <apex:column><apex:facet name="header">Faiblesses</apex:facet><apex:outputField value="{!exp.Faiblesses__c}"/></apex:column>
      </apex:pageBlockTable>
    </apex:pageBlock>
    Un grand merci par avance pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 239
    Points : 424
    Points
    424
    Par défaut
    c'est peut etre un probleme de syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <apex:pageBlock rendered="{! not isblank(Avis__c)}" >
    ou alors tu peux utiliser une variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class ExpertCon {
    public boolean existAvis {get; set;}
    
    List<Expertise__c> expertises ;     
    public List<Expertise__c> getexpertises() {
    if(expertises == null) expertises= [select Id, Avis__c, Conditions__c, Date__c, Faiblesses__c, Forces__c 
    from Expertise__c
    where Id=:ApexPages.currentPage().getParameters().get('Idxp')];
    
    existAvis = True; // TODO: ton code ici
    
    return expertises ;
       }       
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <apex:pageBlock rendered="{!existAvis}" >
    voila, j'espere avoir bien repondu ...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Merci pour ta réponse rapide.
    La première solution (<apex:pageBlock rendered="{! not isblank(Avis__c)}" >) ne peut pas marcher dans mon cas car la table est déclarée en aval du composant <apex:pageBlock>. Et on ne peut pas donner à <apex:pageBlock> les attributs Value et Var comme dans une table…
    Utiliser une variable et le code <apex:pageBlock rendered="{!existAvis}"> semble être la solution mais comment tester si la variable "existAvis" revoie vrai ou faux en fonction du champ Avis__c (si celui-ci est vide ou pas) indépendamment de la requête " List<Expertise__c> expertises " dont les résultats sont repris après dans <apex:pageBlockTable value="{!expertises}" var="exp" > pour affichage ?

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 239
    Points : 424
    Points
    424
    Par défaut
    Il y a un problème de conception, ou j'ai pas compris

    Je n'avais pas vu, Avis__c est un champ d'Expertise__c, donc tu souhaites afficher les lignes d'expertises qui ont seulement un Avis ?
    pourquoi ne pas filtrer ta requete ?!

    Comment veux tu cacher le bloc entier (et donc toutes les lignes d'Expertises) alors que chaque ligne à un Avis different ?!

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Si je filtre la requête, la page va afficher le bloc vide…
    Je souhaite en effet afficher les résultats d’une expertise donnée que si l’avis final a été émis (champ Avis__c ayant une valeur).
    Il y a d’autres éléments sur la page et je ne veux pas encombrer celle-ci avec un bloc relatif à l’expertise vide si celle-ci n’est pas définitivement émise…
    D'où l’intérêt d'utiliser l'attribut rendered...
    J’espère ne pas être confus…

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 239
    Points : 424
    Points
    424
    Par défaut
    Si tu filtre la requete, tu n'auras que les lignes avec l'Avis non vide
    le rendered du bloc devient "expertises.size() > 0"

    ce que je trouve perturbant c'est que tu veux afficher un bloc de plusieurs lignes d'expertises mais tu veux tester l'avis qui est sur toutes les lignes, c'est pas possible ça !

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Non, en fait je veux afficher tous les champs d'une seule expertise (celle dont l'id est spécifié) et seulement si celle-ci est complétée d'un avis (renseigner l'avis clôture en quelque sorte une expertise).
    Je ne veux pas enregistrement vide ou incomplet dans la page d'où l'idée de masquer le bloc si l'avis n'est pas renseigné...

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 239
    Points : 424
    Points
    424
    Par défaut
    Citation Envoyé par korentin83 Voir le message
    Non, en fait je veux afficher tous les champs d'une seule expertise (celle dont l'id est spécifié) et seulement si celle-ci est complétée d'un avis (renseigner l'avis clôture en quelque sorte une expertise).
    Je ne veux pas enregistrement vide ou incomplet dans la page d'où l'idée de masquer le bloc si l'avis n'est pas renseigné...
    Je pense avoir compris, je vais donc redire la même chose

    Dans la requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [select Id, Avis__c, Conditions__c, Date__c, Faiblesses__c, Forces__c 
    from Expertise__c
    where Id=:ApexPages.currentPage().getParameters().get('Idxp')
    and Avis__c != ''];
    et dans la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <apex:pageBlock rendered="{!expertises.size() > 0}" >
    si l'avis__c est vide, la requete ne retourne pas la ligne, le rendered du bloc est à false
    sinon, l'expertise est affichée

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Bonjour Vincent,

    Merci pour tes réponses mais la fonction size n'est pas reconnue par la page VisualForce. En tout cas, je n'arrive pas à utiliser cette solution...
    En revanche j’ai exploité l'idée de la variable et ça marche !

    Dans la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public String existAvis {
    get {
         Expertise__c avis = [select Avis__c from Expertise__c where Id=:ApexPages.currentPage().getParameters().get('Idxp')];
         return avis == null ? null : avis.Avis__c;
         }
    }
    Et dans la page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <apex:pageBlock rendered="{!IF(ISBLANK(existAvis), false, true)}" >
    Qu'en penses-tu ?
    En outre, faut-il que j'inclue un test dans la classe pour cette partie du code ? Si oui quelle allure peut-il avoir ?

  10. #10
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 239
    Points : 424
    Points
    424
    Par défaut
    Citation Envoyé par korentin83 Voir le message
    Bonjour Vincent,

    Merci pour tes réponses mais la fonction size n'est pas reconnue par la page VisualForce. En tout cas, je n'arrive pas à utiliser cette solution...
    En revanche j’ai exploité l'idée de la variable et ça marche !
    Exact, il fallait utiliser une variable, mais ta solution outre le fait de faire 2 requete SOQL est viable

    Citation Envoyé par korentin83 Voir le message
    En outre, faut-il que j'inclue un test dans la classe pour cette partie du code ? Si oui quelle allure peut-il avoir ?
    faire un insert d'une expertise avec un Avis et verifier que la variable est à True ...

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par v.charlet Voir le message
    faire un insert d'une expertise avec un Avis et verifier que la variable est à True ...
    Bonjour Vincent,
    Toujours pas à l’aise avec les tests, je ne comprends pas trop la réponse… désolé.
    Surtout que l’objet Expertise__c est l’enfant d’un autre objet (Procedure__c)... J’ai besoin d'obtenir l'ID de l'objet parent ?
    S’il s’agit de simuler une valeur pour la variable exitAvis, ne peut-on pas faire un test avec un update ?

  12. #12
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2011
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 239
    Points : 424
    Points
    424
    Par défaut
    Citation Envoyé par korentin83 Voir le message
    Toujours pas à l’aise avec les tests, je ne comprends pas trop la réponse… désolé.
    Surtout que l’objet Expertise__c est l’enfant d’un autre objet (Procedure__c)... J’ai besoin d'obtenir l'ID de l'objet parent ?
    S’il s’agit de simuler une valeur pour la variable exitAvis, ne peut-on pas faire un test avec un update ?
    Je suis dans le même cas, je comprends pas trop ton problème

    déjà une chose à savoir, sauf option (que je déconseille) les tests s'executent dans un environnement vide de toutes données, c'est donc à toi de créer les objects dont tu as besoin


    ta class de test devrait resembler à ceci
    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
    // Je prépare mes données
    Procedure__c maProc = new Procedure__c();
    maProc.Name = 'test';
    etc... (toutes les variables obligatoire)
    insert maProc;
    
    Expertise__c monExp = new Expertise__c();
    monExp.Avis__c = 'Correct';
    monExp.Procedure__c = maProc.Id;
    insert monExp;
    
    // Je simule les parametres de ma page VF
    Test.setCurrentPage(Page.TaPageVF);
    ApexPages.currentPage().getParameters().put('Idxp', monExp.Id)
    
    // Je créé le controller
    ExpertCon expCon = new ExpertCon();
    
    // je test le resultat attendu
    System.assertEquals('Correct', expCon.existAvis);
    Mais je crois que tu as surtout besoin de lire quelques articles/documentation sur le pourquoi des tests, cela me parait confus ...

    petit exemple extrait de la doc
    https://www.salesforce.com/docs/deve...r_handling.htm

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Bonjour Vincent,

    Je commence à piger...
    Merci encore !

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 16
    Points : 8
    Points
    8
    Par défaut
    Bonjour Vincent,
    Merci encore pour ton aide.
    J'ai effectivement revu le code en utilisant la fonction ".size" pour éviter une double requête SOQL comme conseillé... Ca marche cette fois, j'avais dû faire une erreur de syntaxe.
    Je clôture la discussion.

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

Discussions similaires

  1. [MySQL] Modification d'une classe requêtant pour MySQL
    Par gimpycpu dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 06/03/2008, 01h16
  2. Réponses: 14
    Dernier message: 28/02/2007, 10h53
  3. Une classe C# pour les matrices
    Par vladvad dans le forum C#
    Réponses: 3
    Dernier message: 02/12/2006, 14h45
  4. Réponses: 2
    Dernier message: 30/05/2006, 16h26
  5. recherche une classe KZtransImg pour delphi 7
    Par plante20100 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/07/2005, 14h56

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