PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV Mobile 2024 → Adroid : Problème entre membre et propriété.
Adroid : Problème entre membre et propriété.
Iniciado por Valentin, 21,jul. 2020 12:32 - 7 respuestas
Publicado el 21,julio 2020 - 12:32
Bonjour,

Je bute sur un problème très étrange en windev mobile. J'utilise des classes liées par mapping au fichier de l'analyse (21 classes en tout), tout fonctionne correctement sauf pour une.

Ma classe en question :

MFRAISSALARIE est une Classe <MAPPING=FRAISSALARIE>
PRIVÉE
// Le code se trouvant entre <MAPPING> et <FIN> est généré automatiquement.
// Il sera effacé et recréé entièrement à chaque génération depuis le menu contextuel
// du fichier dans l'explorateur de projet "..Regénérer la classe modèle".
<MAPPING>
m_nIDFRAISSALARIE est un entier sur 8 octets <MAPPING=IDFRAISSALARIE>
m_sFRSSANUM est une chaîne ANSI <MAPPING=FRSSANUM>
m_dFRSDATE est une Date <MAPPING=FRSDATE>
m_sFRSTYPE est une chaîne ANSI <MAPPING=FRSTYPE>
m_moFRSMONTANT est un monétaire <MAPPING=FRSMONTANT>
m_sFRSCOMMENTAITRE est une chaîne <MAPPING=FRSCOMMENTAITRE>
m_sFRSTYPEPAIEMENT est une chaîne ANSI <MAPPING=FRSTYPEPAIEMENT>
m_moFRSQUANTITE est un monétaire <MAPPING=FRSQUANTITE>
m_dhFRSCREATION est une DateHeure <MAPPING=FRSCREATION>
m_dhFRSMODIFICATION est une DateHeure <MAPPING=FRSMODIFICATION>
m_sFRSETAT est une chaîne ANSI <MAPPING=FRSETAT>
m_nIDFRAISSALARIE_LOCAL est un entier sur 8 octets <MAPPING=IDFRAISSALARIE_LOCAL, clé unique>
<FIN>

m_tabDocScan est un tableau de MDOCSCAN dynamique
FIN


La méthode d'enregistrement :
Procedure PUBLIQUE GLOBALE Save(pclFraisSalarie est un MFRAISSALARIE dynamique, bFlag est un booléen = Vrai): (booléen,chaîne)

bModeAjout est un booléen = (pclFraisSalarie.p_nIDFRAISSALARIE_LOCAL <= 0)
bRéussi est un booléen = bModeAjout ? HRAZ(FRAISSALARIE) SINON HLitRecherchePremier(FRAISSALARIE,IDFRAISSALARIE_LOCAL,pclFraisSalarie.p_nIDFRAISSALARIE_LOCAL)
sMessage est une chaîne = ""
SI bRéussi ALORS

MémoireVersFichier(pclFraisSalarie,FRAISSALARIE)

SI pclFraisSalarie.p_nIDFRAISSALARIE_LOCAL <= 0 _ET_ pclFraisSalarie.m_nIDFRAISSALARIE <= 0 ALORS
pclFraisSalarie.p_dhFRSCREATION = DateHeureSys()
SINON
pclFraisSalarie.p_dhFRSMODIFICATION = DateHeureSys()
FIN

bRéussi = bModeAjout ? HAjoute(FRAISSALARIE) SINON HModifie(FRAISSALARIE)

SI bRéussi ALORS
Trace("FRAISSALARIE Save ID local : " + FRAISSALARIE.IDFRAISSALARIE_LOCAL)

FichierVersMémoire(pclFraisSalarie,FRAISSALARIE)


Trace("FRAISSALARIE Save objet ID local : "+ pclFraisSalarie.m_nIDFRAISSALARIE_LOCAL)
Trace("FRAISSALARIE Save objet ID Propriété local : "+ pclFraisSalarie.p_nIDFRAISSALARIE_LOCAL)


SI bFlag ALORS
bRetourSave est un booléen
sMessageSave est une chaîne
eMode est un MFLAG.EFLAGAction
eMode = bModeAjout ? MFLAG.EFLAGAction._Ajouter SINON MFLAG.EFLAGAction._Modifier
(bRetourSave,sMessageSave) = MFLAG.Envoi_FraisSalarie(pclFraisSalarie,eMode)
FIN
SINON
sMessage += [RC] + HErreurInfo(hErrComplet)
FIN
FIN

RENVOYER (bRéussi,sMessage)


J'ai un résultat différent entre mon membre et ma propriété : (Voir les traces dans ma méthode d'enregistrement) :

Procedure PUBLIQUE p_nIDFRAISSALARIE_LOCAL() : entier sur 8 octets

RENVOYER m_nIDFRAISSALARIE_LOCAL

Procedure PUBLIQUE p_nIDFRAISSALARIE_LOCAL( LOCAL nValeur est un entier sur 8 octets)

m_nIDFRAISSALARIE_LOCAL=nValeur


07-20 17:49:18.558: I/GO Salarie_PDA(1618): FRAISSALARIE Save ID local : 1
07-20 17:49:18.561: I/GO Salarie_PDA(1618): FRAISSALARIE Save objet ID local : 1
07-20 17:49:18.561: I/GO Salarie_PDA(1618): FRAISSALARIE Save objet ID Propriété local : 0
07-20 17:49:18.567: I/GO Salarie_PDA(1618): Envoi_FraisSalarie / FLAG ID LOCAL : 0  Frais ID LOCAL : 0


J'ai déjà refais entièrement ma classe (Suppression complète) retourné mon code dans tout les sens mais je ne vois pas comment je peux avoir ce problème ...

Avez vous une idée ?



Merci d'avance pour vos réponses.
Valentin
Miembro registrado
3.333 mensajes
Popularité : +93 (137 votes)
Publicado el 21,julio 2020 - 20:21
Publicado el 22,julio 2020 - 13:41
Bonjour Popoy,

J'ai remplacé tous mes entiers sur 8 octets par des entiers et j'ai toujours le même problème. (Comme précisé dans ton lien)

Ma propriété à une valeur différente de mon membre (Uniquement sur android, le simulateur fonctionne parfaitement) ce qui est impossible normalement.
Miembro registrado
3.333 mensajes
Popularité : +93 (137 votes)
Publicado el 22,julio 2020 - 17:03
tu as aussi essayé de rajouter local
comme indiqué dans mon lien?
Publicado el 22,julio 2020 - 17:26
Oui toutes mes propriétés l'ont aussi ! (Voir dans le 1er message, le LOCAL est déjà présent)
Miembro registrado
3.333 mensajes
Popularité : +93 (137 votes)
Publicado el 22,julio 2020 - 20:54
dans ce cas, je ne sais pas car j'utilise que très rarement les classes
car je trouve que sous mobile c'est trop complexe à gérer
Miembro registrado
24 mensajes
Popularité : +1 (1 vote)
Publicado el 23,julio 2020 - 08:30
Une question : comment se fait-il que tu puisses accéder à l'attribut pclFraisSalarie.m_nIDFRAISSALARIE de ton objet, alors qu'il est privé ? Tu devrais avoir une erreur de compilation.

--
Nicolas
Publicado el 23,julio 2020 - 09:32
Oui normalement je ne devrais pas avoir accès aux attributs privé mais on peux dans les méthodes de classe. (Dans ce cas c'est juste pour le trace)

Si je crée moi-même les accesseurs (une méthode Get et une Set) sans passer par les propriétés cela fonctionne.

Je ne vois pas comment corriger ce problème moi-même.
Je vais tenter de faire un projet de test pour le support technique.

Pour info, j'utilise bien la dernière version de Windev Mobile 25 (89f)