Bonjour,
Je débute avec Windev Mobile et je vous sollicite pour une question concernant les propriétés abstraites.
J'ai développé mon application avec Windev, basé sur le design pattern MVP, avec les classes mappés par rapport aux tables de l'analyse. J'utilise une classe mère MBase avec différentes méthodes communes entre mes classes mappées.
Par exemple, méthode de ma classe MBase
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 PROCÉDURE bEnregistrer(clErreur est un CGestionErreur) // Est-ce un nouvel enregistrement ? SI bNouveau() ALORS // Nouvel enregistrement HRAZ(m_sNomFichier) MémoireVersFichier() HAjoute(m_sNomFichier) SI ErreurDétectée() ALORS clErreur.Init(CGestionErreur::ErreurHFSQL,HErreurInfo()) // Mémorisation de l'identifiant de l'enregistrement courant _MémoriseIdentifiant() SINON // On se positionne sur l'enregistrement en base HLitRecherchePremier(m_sNomFichier,m_sNomCléUnique,p_vID) SI HTrouve() ALORS MémoireVersFichier() HModifie(m_sNomFichier) SI ErreurDétectée() ALORS clErreur.Init(CGestionErreur::ErreurHFSQL,HErreurInfo()) SINON // Enregistrement non trouvé clErreur.Init(CGestionErreur::NonTrouvé) FIN FIN // L'interface graphique devra être mise à jour DemandeMiseAJourUI() // On renvoie Vrai si aucune erreur RENVOYER clErreur.p_eCode=CGestionErreur.Aucune
Dans cette classe on voit que j'utilise une propriété "p_vID" qui correspond à l'ID de l'enregistrement. Cette propriété est abstraite dans ma classe MBase et est vide car je la redéfinie dans chacune de mes classes mappées.
Je la définie de cette manière dans ma classe mère MBase :
Et dans mes classes mappées, par exemple dans ma classe MContact, je redéfinis cette propriété :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 PROCÉDURE PUBLIQUE ABSTRAITE p_vID() <métier> //Aucun code ici
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 PROCÉDURE p_vID() RENVOYER m_nCONT_ID
Le problème :
En Windev, lorsque j'appelle la méthode bEnregistrer de ma classe mère, la ligne suivante fonctionne correctement : HLitRecherchePremier(m_sNomFichier,m_sNomCléUnique,p_vID). p_vID utilise bien la valeur renvoyée m_nCONT_ID
En Windev mobile, lorsque je fais le test avec le simulateur, cela fonctionne également.
Par contre, dés que je fais le test sur le téléphone (Android), ça ne passe pas et j'ai une erreur : "La fonction récupération aurait dû renvoyer une valeur" en parlant de la propriété p_vID. Cette propriété est en effet vide dans ma classe mère puisqu'elle est déclarée comme abstraite, mais elle est justement redéfinie dans mes classes mappées, pourquoi il n'utilise donc pas la propriété redéfinie qui elle renvoie bien la valeur de l'identifiant ?
Est-ce un bug ou est-ce normal en mobile ?
Comment contourner ce problème ? J'ai le même problème avec mes classes Tableaux. J'ai créé un classe mère MBaseTabeau qui contient des méthodes pour l'ajout, la modification, la suppression, la recherche d'élément etc. dans mes tableaux. J'ai ajouté dans cette classe mère une propriété abstraite vide que je redéfini dans mes classes Tableaux pour renvoyer le tableau à utiliser.
Exemple tout simple de méthode de ma classe mère MBaseTableau :
Ici, p_tabPrincipal est la propriété abstraite que je redéfini dans mes classes Tableaux pour renvoyer le tableau à utiliser. Donc quand j'appelle la procédure nNombreOccurrence(), j'ai bien le nombre d'occurrence de mon tableau. (En Windev)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 PROCÉDURE nNombreOccurrence() <métier> : entier RENVOYER TableauOccurrence(p_tabPrincipal)
Par contre en Windev Mobile, la propriété p_tabPrincipal utilise la propriété non redéfinie, qui elle est vide, au lieu de la propriété redéfinie et me renvoie du coup la même erreur "La fonction récupération aurait dû renvoyer une valeur"
Auriez-vous une idée ?
Merci
Partager