Page 1 sur 1

Etendre un objet

Posté : sam. août 06, 2016 3:11 pm
par talexone
Bonjour,

Est il possible d’étendre un objet existant au lieu d'un créer un nouveau?
Par exemple avec le module Badge ou l’adhérent est une table propres, mais si je veux utiliser la table CLIENT comme ADHERENT en rajoutant les champs manquant (NUMERO_CARTE, DATE_NAISSANCE etc.)

Merci,
Alexandre

Re: Etendre un objet

Posté : lun. août 08, 2016 3:24 pm
par guillaume
Bonjour,

Oui, un module peut ajouter des champs dans toutes les tables, pas obligatoirement celles qu'il crée.

Cordialement,

Re: Etendre un objet

Posté : lun. août 08, 2016 10:47 pm
par talexone
Bonjour,

Merci pour votre réponse, mais j'ai mal posé la questionne.

J'ai vu qu'on peux ajouter des champs avec :

Code : Tout sélectionner

AlterTableRestricted alterTable = ctxt.getAlterTable("CLIENT");
alterTable.addVarCharColumn("NUMERO_CARTE", 256);
La ou je bloque c'est comment déclarer le nouveau élément AdherentSQLElement qui utilise la même table 'CLIENT' comme le ClientNormalSQLElement, mais avec ses propres Views (List, Combo et Edit).

J'ai vu qu'on peut définir le code d’élément:

Code : Tout sélectionner

 
    @Override
    protected String createCode() {
        return "adherent";
    }
Et puis j'ajoute l’élément dans directory et j'essaie de le récupérer plus tard avec getElementForCode:

Code : Tout sélectionner

dir.addSQLElement(new AdherentSQLElement());
.
.
.
IListFrame frameAdh = new IListFrame(new  ListeAddPanel(Configuration.getInstance().getDirectory().getElementForCode("adherent")));
Mais à l’exécution je reçois NullPointerException comme si l’élément avec le code "adherent" n'existe pas dans directory.


Merci,
Alexandre

Re: Etendre un objet

Posté : mar. août 09, 2016 4:10 pm
par guillaume
Bonjour,

Le createCode n'est appelé que pour les sous classes de ModuleElement.

Utilisez plutôt getElement(AdherentSQLElement.class);

(attention, il n'y a à l'instant qu'un SQLElement par table)

Cordialement,

Re: Etendre un objet

Posté : mar. août 09, 2016 9:27 pm
par talexone
Bonjour,

Merci pour votre aide. getElement(AdherentSQLElement.class) a marche comme prévu.

Pour info avec createCode ça marche aussi. Apres que j'ai remplacé ClientSQLElement par CustomerSQLElement.

Code : Tout sélectionner

public class AdherentSQLElement extends CustomerSQLElement {
    public AdherentSQLElement() {
        super();
        setDefaultName(new Phrase(Grammar_fr.getInstance(), "Adhérent", NounClass.MASCULINE));
    }
    
    @Override
    protected String createCode() {
        return "adherent";
    }

guillaume a écrit :(attention, il n'y a à l'instant qu'un SQLElement par table)
Effectivement j'ai remarqué que le class hérité de CustomerSQLElement remplace SQLElement Client par défaut.

Mon but c’était de garder les deux en même temps, un pour gérer les clients (adhérents ou non) et l'autre que les adhérents. Je pense que je serai obligé passer par un autre table pour les adhérents et la lier aux Clients.

Merci encore pour votre aide.
Alexandre

P.S. Je ne sais pas si on peux marquer le sujet comme résolu pour clore.