Etendre un objet

Répondre
talexone
Messages : 5
Enregistré le : mar. juil. 21, 2015 9:33 am

sam. août 06, 2016 3:11 pm

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
Avatar du membre
guillaume
Messages : 2434
Enregistré le : ven. févr. 11, 2011 7:15 pm

lun. août 08, 2016 3:24 pm

Bonjour,

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

Cordialement,
Directeur technique d'OpenConcerto qui dans son temps libre s'occupe du forum.
Pour une assistance pro, nous sommes joignables à ILM Informatique contre quelques jetons.
Pensez aussi à lire le manuel !
talexone
Messages : 5
Enregistré le : mar. juil. 21, 2015 9:33 am

lun. août 08, 2016 10:47 pm

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
Avatar du membre
guillaume
Messages : 2434
Enregistré le : ven. févr. 11, 2011 7:15 pm

mar. août 09, 2016 4:10 pm

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,
Directeur technique d'OpenConcerto qui dans son temps libre s'occupe du forum.
Pour une assistance pro, nous sommes joignables à ILM Informatique contre quelques jetons.
Pensez aussi à lire le manuel !
talexone
Messages : 5
Enregistré le : mar. juil. 21, 2015 9:33 am

mar. août 09, 2016 9:27 pm

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.
Répondre