📂 Application
- Modèles : MVARxxx (modèle dérivé de AVariable)
- Présentateurs : PVARxxx (présentation)
- Vues : POPUP_VARxxx, FEN_VARxxx, FI_VARxxx
🔑 Interface IVariable
Propriétés
- p_sNomComplet : Chaîne (lecture seule) – Renvoie le nom complet de la variable.
- p_bModificationParUtilisateur : Booléen (écriture) – Permet de définir si la variable a été modifiée par l’utilisateur.
Méthodes
- GetData() : Chaîne – Récupère les données associées à la variable sous forme de chaîne.
- GetDataVueConfiguration() : Chaîne – Récupère la configuration de la vue de la variable sous forme de chaîne.
- SetData(pclData : FVariableData dynamique) – Définit les données de la variable à partir de l’objet
FVariableData
. - bEstModifieParUtilisateur(bResetModification : Booléen = *) : Booléen – Retourne si la variable a été modifiée par l’utilisateur, avec un paramètre optionnel pour réinitialiser l’état.
⚙️ Classe AVariable
La classe AVariable
est abstraite et implémente l’interface IVariable
.
Propriétés privées
- m_bModificationParUtilisateur : Booléen (non sérialisé) – Indique si la variable a été modifiée par l’utilisateur. Par défaut, cette propriété est définie sur
Faux
.
Méthodes
- Constructeur() – Initialise l’objet
AVariable
. - p_sNomComplet() : Chaîne – Méthode abstraite à implémenter dans les classes dérivées pour renvoyer le nom complet de la variable.
- p_bModificationParUtilisateur(bValeur : Booléen) – Modifie l’état de
m_bModificationParUtilisateur
en fonction de la valeur passée en argument. - Destructeur() – Destructeur de l’objet
AVariable
. - Initialiser() – Méthode virtuelle privée à implémenter dans les classes dérivées pour initialiser l’objet si nécessaire.
- SerialiserData() : Chaîne – Sérialise les données de la variable sous forme de chaîne.
- DeserialiserData(sData : Chaîne) – Désérialise les données à partir de la chaîne passée en argument.
- SerialiserVueConfiguration() : Chaîne – Sérialise la configuration de la vue de la variable.
- DeserialiserVueConfiguration(sDataVue : Chaîne) - Désérialise la configuration de la vue de la variable à partir de la chaîne passée en argument.
- GetData() : Chaîne - Récupère les données sérialisées de la variable.
- GetDataVueConfiguration() : Chaîne - Récupère la configuration de la vue de la variable sous forme de chaîne.
- SetData(pclData : FVariableData dynamique) - Désérialise les données et la configuration de la vue de la variable à partir de l'objet
FVariableData
et initialise l'objet. - bEstModifieParUtilisateur(bResetModification : Booléen = Vrai) : Booléen - Retourne si la variable a été modifiée par l'utilisateur, avec un paramètre optionnel pour réinitialiser l'état.
La procédure Initialiser
ne peut être appelée ni dans le constructeur de la classe parent, ni dans le constructeur de la classe dérivée.
L’exemple ci-dessous concerne une classe dérivée de MVARChoix
, elle-même dérivée de AVariable
.
La procédure Initialiser
est importante puisqu’elle permet de remplir la liste de choix.
PROCÉDURE PRIVÉE Constructeur()
// PRIVEE : Obligatoire de passer par gNouvelleVariable()
PROCÉDURE GLOBALE gNouvelleVariable() : MVARChoix_LimiteDeFourniture
pclNouvelleVariable est un MVARChoix_LimiteDeFourniture dynamique
pclNouvelleVariable = allouer un MVARChoix_LimiteDeFourniture
pclNouvelleVariable.p_stVue.sTitre = "Limite de fourniture"
pclNouvelleVariable.p_stVue.nNombreDeCritere = 0
pclNouvelleVariable.Initialiser()
RENVOYER pclNouvelleVariable
La procédure SérialiserVueConfiguration() permet de convertir une structure de données (par exemple, une vue ou une configuration) en une chaîne sérialisée. Cette opération facilite la sauvegarde et le transfert des données. Voici le code associé :
PROCÉDURE PRIVÉE SerialiserVueConfiguration() : chaîne
bufTMP est un Buffer
sDataVue est une chaîne
Sérialise({"m_stVue",indVariable}, bufTMP, psdJSON)
sDataVue = bufTMP
RENVOYER sDataVue
CAS EXCEPTION:
GExceptionManager.CatchExceptionVariableInexistante()
m_stVue
n'est pris en compte QUE s'il est défini dans la classe MVARxxx dérivée de AVariable (via l'indirection). D'où la gestion de l'exception "Variable inexistante" qui mettra fin au traitement sans planter le programme.
📦 Classe FVariable
La classe FVariable
est abstraite, mais elle ne contient pas de propriétés ou de méthodes spécifiques dans l'extrait fourni. Elle semble fonctionner comme un conteneur pour les variables, avec des méthodes qui traitent des objets dynamiques et des variables.
Méthodes
- Constructeur() - Initialisation de l'objet
FVariable
. - Destructeur() - Destruction de l'objet
FVariable
. - Modifier(pclData : Objet dynamique) - Modifie la variable en fonction des données d'un objet dynamique.
- GetModele(pclData : Objet dynamique) - Récupère le modèle associé aux données d'un objet dynamique.
🗂️ Classe FVariableData
La classe FVariableData
contient des informations sur une variable, y compris son modèle, ses données, sa configuration de vue et son état de modification.
Propriétés publiques
- m_sModele : Chaîne - Contient le modèle de la variable.
- m_sData : Chaîne - Contient les données de la variable.
- m_sDataVue : Chaîne - Contient la configuration de la vue de la variable.
- m_bModificationParUtilisateur : Booléen - Indique si la variable a été modifiée par l'utilisateur.
- m_cChamp : Champ - Contient les informations de champ associées à la variable.
Méthodes
- Constructeur() - Initialise l'objet
FVariableData
. - Destructeur() - Destruction de l'objet
FVariableData
. - gGetData(pclVariable : Objet dynamique) - Récupère les données associées à une variable dynamique et renvoie un objet
FVariableData
contenant ces données.
🔄 GetVariable()
> LambiqueShared
La procédure GetVariable
est utilisée pour récupérer une variable (modèle) à partir d'un objet FVariableData
. Elle gère la présentation et l'interaction avec l'utilisateur en fonction des données du modèle.
Code source
PROCÉDURE GetVariable(LOCAL pclData est un objet dynamique)
pclDataLocal est un FVariableData dynamique
sModele est une chaîne
pclModele est un objet dynamique
iVariable est IVariable
pclDefinition est un MVARDefinition dynamique
sPresentateur est une chaîne
pclPresentation est un objet dynamique
sVue est une chaîne
pclDataLocal = new FVariableData
pclDataLocal <= pclData
sModele = pclDataLocal.m_sModele
pclModele new sModele // AVariable
pclModele.SetData(pclDataLocal)
SetData
réalise les actions suivantes :
- Désérialise les "data" principales (données techniques ou métier).
- Désérialise les "data" liées à la configuration de la vue
p_stVue
. - Execute la procédure
Initialiser
.
SI PAS pclData.m_bModificationParUtilisateur ALORS
RENVOYER pclModele
FIN
pclDefinition = GDefinition.pg_pclVariableListe.GetModele(sModele)
sPresentateur = pclDefinition.m_sPresentateur
pclPresentation = new sPresentateur(pclModele)
sVue = pclDefinition.m_sVue
SELON pclDefinition.p_eTypeDeFenetre
CAS POPUP
...
CAS FENETRE
...
CAS FENETRE_INTERNE
...
FIN
RENVOYER pclModele
Exemple de code qui ne fonctionne pas
Composant MCOTest
PROCÉDURE Constructeur()
m_pclInfo = MVARChaine.gNouvelleVariable(:vrai)
m_pclInfoAchat = MVARChaine.gNouvelleVariable(:vrai)
m_pclOption = MVAROption.gNouvelleVariable(:"Options (TEST)")
SetVariable()
m_pclOption.AjouterOption(1,"Option 1")
m_pclOption.AjouterOption(2,"Option 2")
...
Les options ne sont pas disponibles dans la vue parce qu'elles ne sont pas sérialisées.
Deux possibilités :
- Les options sont sérialisés dans
p_stVue
. - Comme
SetData
lanceInitialisation
du modèle, la procédure prend en compte la liste des options.Comme l'objet est recréé à chaque appel de
GetModele
, il n'est pas possible de lierMOptionListe
par exemple.Cette solution a été abandonnée.
Explication de la sérialisation/désérialisation>
Dans le cas des options, la liste se présente sous le forme d'une liste d'éléments dérivés de AOption qui est abstrait > difficulté pour désérialiser.
m_stVue > pclOptionListe > m_tabModele = tableau de 2 AOption dynamique
[1] AOption, m_sID=1, ... , m_sClasse=MOptionSimple
[2] AOption, m_sID=2, ... , m_sClasse=MOptionSimple
Les objets sont typés AOption
qui est une classe abstraite.
Solution
// Redéfinition de la méthode AVariable.SetData
PROCÉDURE SetData(pclData est un FVariableData dynamique)
M est un AOption dynamique
sClasse est une chaîne
pclOptionCastee est un objet dynamique
Ancêtre.SetData(pclData)
POUR TOUT M DE p_pclOptionListe.p_tabModele
SI GetNomDeLaClasse(M) <> M.p_sClasse ALORS
sClasse = M.p_sClasse
pclOptionCastee = new sClasse
pclOptionCastee <= M
M = pclOptionCastee
FIN
FIN
Même procédure de "cast" dans SetChoix
de MOptionListe
.