PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2025 → WL2025+ZML dynamique+zmlSupprime : wm plante si l'on supprime la ligne active de la ZML
WL2025+ZML dynamique+zmlSupprime : wm plante si l'on supprime la ligne active de la ZML
Débuté par Pascal BOULESTEIX, 21 mar. 2025 15:00 - 6 réponses
Membre enregistré
1 106 messages
Posté le 21 mars 2025 - 15:00
Bonjour à tous
Il y a quelques jours, j'ai ouvert un incident relatif à un problème dans une ZR https://forum.pcsoft.fr/fr-FR/pcsoft.fr.windevmobile/51472-wm2025-ios-zone-repetee-impossible-modifier-contenu-ligne/read.awp
Plusieurs d'entre vous m'ont proposé d'utiliser plutôt une ZM avec des lignes dynamiques.
Ce que j'ai fais.
Maintenant j'échoue sur le problème suivant (android+GO)
Le principe :
1 - je charge la ZML avec autant de lignes que nécessaire.
2 - dans chaque ligne figure un interrupteur à bascule.
3 - quand l'utilisateur passe ON un des interrupteurs, je déclenche un proc permettant de charger un fichier HFSQL à partir d'un web-service et en tenant compte des éléments présents dans la ligne de l'interrupteur.
4 - quand la chargement est terminé, je souhaite recharger la ZML pour qu'elle reflète le contenu du fichier HFSQL.
5 - je commençais par un bon vieux zmlSupprimeTout(maZM) ; avec Android pas de problème, avec iOS, l'application plante bien qu'une gestion d'exception encapsule le zmlSupprimeTout.
6 - pour avoir un code "universel", j'ai essayé de faire de zmlSupprime de la ligne 1 au sein d'une boucle for i = 1 to ZM.occurence
j est un entier =ZM_Classes.Occurrence
POUR i= 1 À j
QUAND EXCEPTIONEXCEPTION DANS
Trace ("myTrace : zmlSupprime "+i)
ZM_Classes=1
zmlSupprime(ZM_Classes,1)
FAIRE

Info("ERREUR zmlSupprime "+i,ErreurInfo(errComplet))

FIN
FIN
Trace ("myTrace : fin zmlsupprime")

Ça fonctionne mais dès qu'on essaye de supprimer la ligne contenant l'interrupteur passé à ON, WM arrête le traitement, sans lever l"exception et sans tracer la fin de la boucle.
7 - la zm qui reste affichée contient la ligne de l'interrupteur et celles de dessous.

J'ai essayé avec un for i step -1 pour commencer à supprimer depuis le bas zmlSupprime(ZM_Classes,j), rien n'y fait, ça coince !

Ça coince en mode GO avec Android et iOS

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Membre enregistré
3 571 messages
Posté le 21 mars 2025 - 16:32
Salut,
Attention :Tu ne peux pas supprimer une ligne statique
Si le champ Zone multiligne contient des lignes statiques et des lignes dynamiques,
il est nécessaire de prendre en compte le nombre de lignes statiques.
Donc dans ce cas, tu ne peux pas commencer à 1
Ni supprimer toutes les lignes
L'indice "1" correspond à la première ligne du champ Zone multiligne.
Toutes les lignes sont numérotées (lignes statiques et lignes dynamiques).
Si le champ Zone multiligne contient des lignes statiques et des lignes dynamiques, il est nécessaire de prendre en compte le nombre de lignes statiques.
Donc si tu as des lignes statiques , tu met en dur le nombre de ces lignes dans une variable
Ou tu fais une occurrence avant l'ajout de lignes.

Il est conseillé d'avoir au moins une ligne statique.
Zmlsupprime peut supprimer la ligne en cours si tu ne précise pas le numéro de ligne a condition qu'elle soit active.
Message modifié, 21 mars 2025 - 16:34
Membre enregistré
1 106 messages
Posté le 21 mars 2025 - 21:27
Salut POPOY
il n’y a pas de ligne statique dans la zm
Quand j aujoute la première ligne dynamique elle a pour indice 1
Je vais ajouter une ligne statique pour voir

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Message modifié, 21 mars 2025 - 21:30
Membre enregistré
3 571 messages
Posté le 21 mars 2025 - 23:24
Salut
Dans ce cas, je soupçonne un souci avec la 2025
As tu essayé avec une ancienne version ?
Personnellement, je n'ai pas eu ce souci avec wm20 et 25(les 2 version avec lesquelles je travaille)
Membre enregistré
1 106 messages
Posté le 22 mars 2025 - 00:20
L'ajout d'une première ligne statique ne change rien. La suppression des lignes dynamiques fonctionne jusqu'au moment ou on veut supprimer la ligne contenant l'interrupteur modifié

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Membre enregistré
3 571 messages
Posté le 22 mars 2025 - 07:33
Que ce passe t'il si tu remets l'interrupteur à sa position initiale par programmation avant la suppression ?
Message modifié, 22 mars 2025 - 07:34
Membre enregistré
1 106 messages
Posté le 22 mars 2025 - 09:04
Salut Popoy
Je suis arriver à contourner le bug !
Comment ?
J'ai supprimé l'action "Pour toute modification de Int" et mis le code adapté dans l'événement "Sélection d'une ligne"
Dans le code adapté, c'est moi qui positionne l'interrupteur fonction de sa valeur au moment de la sélection ; s'il est ON, je le passe OFF et vice-versa
Je me tâtes à ouvrir un incident car il va falloir faire un mini-projet pour reproduire l'incident.
Ceci-dit, dans la version "historique" utilisant un ZR, j'ai le même problème d'activation du "Pour tout modification de l'interrupteur" sous iOS.
Bref, les versions de WM s'enchainent et se ressemblent : il faut tout retester ! Si WMDev fonctionnait correctement, ça aurait pu aider, mais comme WM, les versions de WMDev se suivent et fonctionnent quand elles ont envi, et ce n'est pas souvent !

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Message modifié, 22 mars 2025 - 09:06