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 :

Mise a jour d'un attribut relation!


Sujet :

W4 Express Java

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 21
    Points : 14
    Points
    14
    Par défaut Mise a jour d'un attribut relation!
    bonjour,
    Depuis quelque jours je suis bloqué sur la mise a jour d'un attribut relation principalement relation multiple.
    J'ai une classe magasin et une classe ligne magasin. Dans la classe magasin nous avons une relation multiple de ligne magasin.
    voici mes fichier XML de chaque classe:
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <CLASS id="Magasin">
    	<CACHE type='FULL'/>
    	<NAME value="NAME_MAGASIN"/>
    	<FIELDS>
    		<TEXT id="id_mag">
    			<NAME value="NAME_ID_MAG"/>
    			<F_MARKS id='true' name='true' create='true' main='true'/>
    		</TEXT>
    		<NUMBER id="marge_mag">
    			<NAME value="NAME_MARGE_MAG"/>
    			<F_MARKS create='true' set='true'/>
    		</NUMBER>
    		<RELATION id="ref_ligne" multiple='true' type='COMPOSITION'>
    			<NAME value="NAME_RELATION"/>
    			<F_MARKS create='true' set='true'/>
    			<CLASSES idrefs="LigneMagasin"/>
    		</RELATION>
    	</FIELDS>
    	<ACTIONS>
    		<ACTION_REF idref="_consult"/>
    		<ACTION_REF idref="_create"/>
    		<ACTION_REF idref="_clone"/>
    		<ACTION_REF idref="_set"/>
    		<ACTION_REF idref="_delete"/>
    		<ACTION_REF idref="_print"/>
    	</ACTIONS>
    </CLASS>
    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
     
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <CLASS id="LigneMagasin">
    	<CACHE type='FULL'/>
    	<NAME value="NAME_LIGNEMAGASIN"/>
    	<FIELDS>
    		<TEXT id="id_ligne">
    			<NAME value="NAME_ID_LIGNE"/>
    			<F_MARKS id='true' name='true' create='true'/>
    		</TEXT>
    		<NUMBER id="prix_A">
    			<NAME value="NAME_PRIX_A"/>
    			<F_MARKS create='true' set='true' main='true'/>
    		</NUMBER>
    		<NUMBER id="prix_R">
    			<NAME value="NAME_PRIX_R"/>
    			<F_MARKS create='true' set='true' main='true'/>
    		</NUMBER>
    		<RELATION id="reg_mag">
    			<NAME value="NAME_RELATION_REL"/>
    			<F_MARKS create='true' set='true'/>
    			<CLASSES idrefs="Magasin"/>
    		</RELATION>
    	</FIELDS>
    	<ACTIONS>
    		<ACTION_REF idref="_consult"/>
    		<ACTION_REF idref="_create"/>
    		<ACTION_REF idref="_clone"/>
    		<ACTION_REF idref="_set"/>
    		<ACTION_REF idref="_delete"/>
    		<ACTION_REF idref="_print"/>
    	</ACTIONS>
    </CLASS>


    J'aimerais avoir les instructions pour pouvoir :
    1: Lors de la création d'un magasin je voudrais initialiser l'attribut ref_ligne avec une ensemble de valeur. J'ai essayer dans la class Behavior de magasin d'utiliser la methode getValue(LyFormController form, LyFieldInfo fieldInfo) pour retourner la liste sans succes.
    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
     
    public Object getValue(LyFormController form, LyFieldInfo fieldInfo) {
    		if ("ref_ligne".equals(fieldInfo.getId())) {
    // creation du 1er elt
    			LyClassInfo classMvt = form.getClassInfo("LigneMagasin");
    				// creation d'un objet
    				LyObject objmvt = new LyObject(classMvt);
    				// ajout des valeur ds la ligne de mvt
    				objmvt.setValue((LyFieldInfo) form.getApplication().getInfo("id_ligne"),
    						"ART1");
    				objmvt.setValue((LyFieldInfo) form.getApplication()
    						.getInfo("prix_A"), new Integer(10));
    				objmvt.setValue((LyFieldInfo) form.getApplication()
    						.getInfo("prix_R"), new Integer(10));
    				objmvt.set();	
    				lstLigne.addObject(objmvt);			
    // creation du 1er elt
    				objmvt = new LyObject(classMvt);
    				// ajout des valeur ds la ligne de mvt
    				objmvt.setValue((LyFieldInfo) form.getApplication().getInfo("id_ligne"),
    						"ART2");
    				objmvt.setValue((LyFieldInfo) form.getApplication()
    						.getInfo("prix_A"), new Integer(20));
    				objmvt.setValue((LyFieldInfo) form.getApplication()
    						.getInfo("prix_R"), new Integer(20));
    				objmvt.set();
    				// ajout dans la champ du magasin
    				lstLigne.addObject(objmvt);
    			return lstLigne;
    		}
    		return super.getValue(form, fieldInfo);
    	}
    2: lors de la mise a jour du champ marge dans le magasin recalculer le prix de revient de chaque ligne . A cette effet j'ai utiliser le code suivant qui ne fonctionne pas:
    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
     
    public void propagate(LySetController set, LyFieldInfoValue newValue)
        {
            LyFieldInfo fieldInfo = newValue.getFieldInfo();
            LyClassInfo classInfo = set.getClassInfo();
            LyFieldInfo marge = classInfo.getFieldInfo("marge_mag");
            if (fieldInfo == marge) {
                int mg = ((LyNumberValue)set.getFieldValue(marge)).intValue();
                LyRelationValue lstLigne = (LyRelationValue)set.getFieldValue("ref_ligne");
                for (int i =0; i<lstLigne.getValueCount();i++){
                    LyObject lgn = lstLigne.getObject(i);
                    int pAchat = lgn.getNumberValue("prix_A").intValue();
                    int benef = pAchat*mg/100;
                    lgn.setValue("prix_R",new Integer(pAchat+benef));
    				lgn.set();
                }
                    LyFieldInfo objField = (LyFieldInfo) set.getApplication()
                            .getInfo("ref_ligne");
                    set.addsetFieldValue(objField, lstLigne,true);
            }
            super.propagate(set, newValue);
        }
    Merci!!

  2. #2
    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
    En regardant très rapidement tes sources, une première chose à faire est de supprimer dans ton modèle la relation de LigneMagasin vers Magasin : elle ne sert à rien car tu as déjà la relation de Magasin vers LigneMagasin

    Pour ton cas 1, si c'est juste à la création tu devrais plutôt utiliser la méthode getDefaultValue

    Pour ton cas 2, il serait plus simple d'utiliser un champ calculé avec une formule, comme ça tu n'aurais rien à faire
    (c'est dans la doc, châpitre 3 sur les champs de type NUMBER)

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    j'ai supprimer le relation de magasin dans ligneMagasin.

    Cas 1: j'ai mis le code precedent dans le methode getDefaultValue mais ca ne marche pas

    Cas 2: Comment dans LigneMagasin je peut faire pour mettre une formule qui référence un champ dans magasin. Dans le chapitre 3 les formules sont des expressions simples sur des attributs de la classe en elle même.

    dans la methode propagate lorsque je fait un setFieldValue() sur un attribut relation unique (cas par exemple de magasin dans ligneMagasin) ca marche mais cette instruction ne marche pas pour des relation multiple. Quelle instruction utiliser dans ce cas donc?

Discussions similaires

  1. Réponses: 16
    Dernier message: 23/05/2008, 09h04
  2. [XPATH] Mise à jour d'un attribut
    Par Stessy dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 21/02/2008, 09h50
  3. Mise à jour autravers d'une relation maitre-Détail
    Par Paxaranne dans le forum Forms
    Réponses: 3
    Dernier message: 26/07/2007, 14h00
  4. Réponses: 5
    Dernier message: 29/05/2007, 10h52
  5. Mise à jour de l'attribut "class"
    Par Bruno2000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/09/2006, 08h00

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