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

W4 Express Java Discussion :

Comment avoir un champ affiché calculé librement


Sujet :

W4 Express Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2007
    Messages : 58
    Points : 59
    Points
    59
    Par défaut Comment avoir un champ affiché calculé librement
    Si on veut un champ qui affiche plus ou moins ce que l'on veut (format un peu complexe avec des formatages de dates et ou de nombres comme dans un code métier), ou bien par exemple à travers une relation multiple, afficher le nom des deux derniers objets puis "..."

    Comment procéder ?

  2. #2
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2007
    Messages : 58
    Points : 59
    Points
    59
    Par défaut Penser aux classes d'interfaces !
    Ce mécanisme Leonardi est tres puissant couplé à des champs locaux.

    Les objets de votre application leonardi sont chargés et maintenus à jour avec les valeurs physiques (base) par le code de Leonardi.
    Mais dans Studio si vous sélectionnez une classe et faites >> genérer la classe d'interface il va vous produire une classe Java avec des getter et setter sur les valeurs.

    Vous pouvez les garder ou les supprimer (sauf le constructeur) cela ne change rien.
    La ou cela devient intéressant est que sur un champ donné vous pouvez modifier la valeur de retour en modifiant le code de getXXX()

    En général on met le champ avec la marque local (il n'est pas sauvé en base puisqu'il est calculé) puis on code que que l'on veut (Librement avec les API java) :

    exemple

    --> Ajouter un champ du type texte avec la marque locale. si le champ a pour id par exemple 'champCalcule'

    -> générer la méthode a écrire est alors
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public String getChampCalcule()
    {
    // mettre le code que vous voulez ici par exemple
    SimpleDateFormat format = new SimpleDateFormat("MMyyyyy"); // Mois en chiffre collé à année courante
     
              return get("champDonnantZone1")+get("champDonnantZone2")+format.format(new Date());
    // bien sur les méthodes get retournent des objets, il peut selon le contenu de zone1 avoir lieu de formater (par exemple afficher le nom d'un objet)
     
    }

    autre exemple plus complexe, trouver le nom du quai du dernier port de déchargement (par une date sur l'arrivée dans le port).
    Il y a des ROUTES définies dans Studio entre l'objet actuel et les ports puis entre les ports et le quai
    Code java : 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
     
    /**
             * Gets value the "<B>voyage_portDechargement</B>" field.
             * @return The value of this field.
             * @see leon.info.LyTextFieldInfo
             * @see leon.data.LyObject.getValue
             */
    	public String getVoyage_portDechargement()
    	{
    		LyApplication		application = _classInfo.getApplication();
    		LyDataSession		session = application.getCurrentSession();
    		LyClassInfo			classInfoPort = (LyClassInfo)application.getInfo("Port_Dechargement");
    		LyObjectList		list;
     
    		list = getList(session, classInfoPort, false);
     
    		if (list.getSize() == 0)
    			return "";
    		LyObject port_dech;
    		if (list.getSize() == 1)
    			port_dech = list.getObject(0);
    		else
    		{
    			LyFieldInfo			fieldInfo;
    			LySort				sort = new LySort();
    			LySortCriterion		crit;
     
    			// Trier par date décroissante
    			fieldInfo = classInfoPort.getFieldInfo("Port_D_ETC");
    			crit = new LySortCriterion(fieldInfo, false);
    			sort.addCriterion(crit);
     
    			list.setSort(sort);
     
    			port_dech = list.getObject(0);
    		}
    		if (port_dech == null)
    			return "";
    		LyClassInfo			classInfoQuai = (LyClassInfo)application.getInfo("port_quai_cls");
     
    		list =  port_dech.getList(session, classInfoQuai);
    		if (list.getSize() >= 1)
    			return list.getObject(0).getName();
    		else
    			return "";
    	}

    CONTRE EXEMPLE :
    pour les cas simples comme mettre un format sur une date, mettre une unité, importer des champs à travers une relation simple il n'est pas nécessaire d'écrire du code, mais le code donne la liberté de produire n'importe quelle sortie et éventuellement d'optimiser des performances (cache sur le calcul)

  3. #3
    Membre habitué
    Inscrit en
    Novembre 2006
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 105
    Points : 126
    Points
    126
    Par défaut
    Salut,

    Ca c'est triv., tu ajoutes un champ avec la marque local, depuis Studio tu généres la classe d'interface correspondant à ton objet métier (c'est un bean avec getters et setters sur chacun des champs de ta classe) et... tu codes en Java la méthode get de l'attribut que tu veux calculer.
    Sachant que je te recommandes d'utiliser ce qui s'appelle les références croisées (directes ou via des routes) si tu as besoin de naviguer dans les relations.

  4. #4
    Membre habitué
    Inscrit en
    Novembre 2006
    Messages
    105
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 105
    Points : 126
    Points
    126
    Par défaut
    Fastlock est trop rapide !!!!

  5. #5
    Membre du Club
    Inscrit en
    Juin 2007
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juin 2007
    Messages : 58
    Points : 59
    Points
    59
    Par défaut eeuh..... Mais oui
    depuis que webdev fait tout en un clic, il faut répondre aussi en un clic ?

  6. #6
    Membre habitué Avatar de Capt'n Java
    Inscrit en
    Juin 2007
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 122
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par fastlock
    depuis que webdev fait tout en un clic, il faut répondre aussi en un clic ?
    Ben non tu réponds avant que la question ne soit posée

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/06/2013, 14h50
  2. Réponses: 1
    Dernier message: 13/05/2008, 15h33
  3. Comment avoir un Champ DATE rempli par defaut
    Par mohe27 dans le forum C#
    Réponses: 3
    Dernier message: 18/09/2007, 11h09
  4. Réponses: 1
    Dernier message: 08/09/2006, 13h26
  5. Réponses: 2
    Dernier message: 22/03/2004, 10h50

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