PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Ouvrir une fenêtre à partir d'une zone répétée ?
Ouvrir une fenêtre à partir d'une zone répétée ?
Débuté par Jean Gaudreau, 16 oct. 2017 19:29 - 23 réponses
Posté le 16 octobre 2017 - 19:29
J'essaie d'ouvrir une simple fenêtre vierge à partir d'un bouton que j'ai placé dans une zone répétée.
Ça semble se produire uniquement lorsque je lance OuvreFenetreMobile à partir de la zone répétée.
Je test l'application dans l'environnement de test Windows, tout est ok.

Je suis un peu confus, parce qu'un truc aussi simple... il n'y a pas grand chose à déboguer!

Je compile et j'installe sur le téléphone.
J'obtiens à chaque fois ce message d'erreur:

===== Erreur =====
Date et heure=16/10/2017 12:09:50
Message=Attempt to invoke virtual method 'java.lang.Object fr.pcsoft.wdjava.core.WDObjet.checkType(java.lang.Class)' on a null object reference
Pile Java=fr.pcsoft.wdjava.core.types.i.checkType(Unknown Source)
fr.pcsoft.wdjava.ui.champs.qb.checkType(Unknown Source)
fr.pcsoft.wdjava.ui.q.buildFullName(Unknown Source)
fr.pcsoft.wdjava.ui.p.getFullName(Unknown Source)
fr.pcsoft.wdjava.ui.p.getNomComplet(Unknown Source)
fr.pcsoft.wdjava.core.context.WDContexte.a(Unknown Source)
fr.pcsoft.wdjava.core.context.WDContexte.f(Unknown Source)
fr.pcsoft.wdjava.core.erreur.WDException.<init>(Unknown Source)
fr.pcsoft.wdjava.core.erreur.WDErreurManager.b(Unknown Source)
fr.pcsoft.wdjava.core.erreur.WDErreurManager.a(Unknown Source)
fr.pcsoft.wdjava.ui.q.appelPCode(Unknown Source)
fr.pcsoft.wdjava.ui.champs.qb.appelPCode(Unknown Source)
fr.pcsoft.wdjava.ui.q.appelPCode_TLM(Unknown Source)
fr.pcsoft.wdjava.ui.champs.image.c.onClick(Unknown Source)
android.view.View.performClick(View.java:6207)
android.view.View$PerformClick.run(View.java:23639)
android.os.Handler.handleCallback(Handler.java:751)
android.os.Handler.dispatchMessage(Handler.java:95)
android.os.Looper.loop(Looper.java:154)
android.app.ActivityThread.main(ActivityThread.java:6688)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Thread=id=1
name=main
priority=5
groupName=main
===== Application =====
Nom de l'application=BusInspek
Version de l'application=0.0.191.0
Nom du package=com.masociete.businspek
Date et heure de lancement=16/10/2017 12:09:30
Version du framework Android=22.0.279.0 (fr)
===== Appareil =====
Modèle=SM-G930W8
Constructeur=samsung
Marque=samsung
===== Système =====
Numéro de version d'Android=7.0 (N)
Api Level Android=24
Mémoire de stockage interne totale=24,83 Go
Mémoire de stockage interne disponible=7,95 Go
Densité de l'écran=480
Résolution de l'écran=1080x1920
Posté le 17 octobre 2017 - 10:09
Bonjour,

peux-tu nous donner ton code ? Passes-tu des paramètres ? La fenêtre que tu veux ouvrir attend t-elle des paramètres ?
Posté le 20 novembre 2017 - 16:19
Salut.
On a exactement le même problème. des boutons dans une ZR qui lance des opérations propres à chaque ligne de la ZR. ca fonctionne avec toute autre instruction que ouvrefenetremobile... as-tu résolu ton problème ? je vais certainement faire une requete au st...
Membre enregistré
177 messages
Popularité : +16 (16 votes)
Posté le 20 novembre 2017 - 19:30
Bonjour,

As-tu essayé de faire ton ouverture de fenêtre dans un TimerSys? J'ai constaté qu'il y avait moins de pb dans ce cas, le timer ne se déclenchant que quand le thread principal est disponible.
Sinon, tu peux ouvrir ta fenêtre avec ouvreFille.

Jean-Marc
Posté le 21 novembre 2017 - 10:02
Le 20/11/2017 à 15:19, philippe GRACIA a écrit :
Salut.
On a exactement le même problème. des boutons dans une ZR qui lance des
opérations propres à chaque ligne de la ZR. ca fonctionne avec toute
autre instruction que ouvrefenetremobile... as-tu résolu ton problème ?
je vais certainement faire une requete au st...

bon, on avance un peu.
si la ZR est liée à un tableau de structure ->ca marche pas. si elle est
liée à une requete, ca fonctionne. reste à tester le remplissage direct,
voir si ca fonctionne ...
On a reproduit le pb avec un mini-projet et fait une requete au st...
Membre enregistré
1 119 messages
Popularité : +8 (8 votes)
Posté le 01 février 2019 - 15:44
Bonjour, dans le programme mobile sur lequel je travaille, j'éprouve des problèmes avec une ZR utilisant des ruptures contenant des boutons qui ouvrent des fenêtres. Le bug que j'ai trouvé avec la ZR concerne l'update des attributs qui ne correspondent pas à la ligne sélectionnée mais ça n'arrête pas l'appli. J'ai toutefois ouvert un dossier au Support Tech car ce bug avec les ZR est récurant et reproductible et ce, sur différent téléphone android.

J'ai donc décidé de reproduire ce bug dans un programme des plus simple pour envoyer au support. J'ai alors reproduit le bug dans une nouvelle appli et suis capable d'expliquer exactement d'ou il provient. J'ai donc 1 page contenant une ZR contenant des boutons qui ouvrent une fenêtre. mais le problème soulevé dans ce post est nouvellement apparu.

Dans le but de trouver la source du dysfonctionnement, j'ai carrément enlever l'ouverture d'une fenêtre à partir d'un bouton dans ma ZR et le problème persiste toujours. Je crois que c'est relié au Thread car il se produit à n'importe laquelle fréquence et je crois qu'il est relié soit à l'apparition d'une nouvelle ligne, soit à la disparition d'une ligne lorsqu'on scroll la fenêtre. mais vraiment pas convaincu. Je vais faire un test avec une ZR contenant juste quelques données pour vérifier mes dires.

--
Jean Turcotte
WX 24
Android 7.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Posté le 26 février 2021 - 10:34
Bonjour à toutes et tous :)

Je suis malheureusement confrontée à ce même problème... Une solution a-t-elle été trouvée ?

Merci beaucoup !

Bien à vous,
Posté le 26 février 2021 - 11:07
Comme quoi les bugs aussi sont persistants, pas que les threads !
Il y a de gros problèmes avec les ZR, il y en a toujours eu et il y en a toujours !
Membre enregistré
1 119 messages
Popularité : +8 (8 votes)
Posté le 26 février 2021 - 14:13
Je l'utilise encore dans mes ZR sur trois de mes fenêtres et ça roule sans bug, ça fonctionne dans une Fenêtre Interne aussi. J'utilise toutefois la fonction sRésultat = Ouvre(Fen) puisque dans mon cas, il s'agit d'une fenêtre utilisée rapidement pour entrer des données rapidement.

--
Jean Turcotte
WX 26
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Membre enregistré
3 328 messages
Popularité : +93 (137 votes)
Posté le 26 février 2021 - 21:53
Jean, la fonction ouvre n'existe pas sur wm
C'est sûrement ouvrefille
Membre enregistré
1 119 messages
Popularité : +8 (8 votes)
Posté le 26 février 2021 - 22:24
Popoy a écrit :
Jean, la fonction ouvre n'existe pas sur wm
C'est sûrement ouvrefille

Je l'utilise pour mes fenêtres d'info rapide mais ce n'est pas recommandée par Google et finira par la fermer elle-même si trop longtemps ouverte mais les délai semble assez long.

--
Jean Turcotte
WX 26
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Membre enregistré
3 328 messages
Popularité : +93 (137 votes)
Posté le 27 février 2021 - 00:16
Désolé Jean, d'insister mais j'ai encore revérifier
A part pour windows mobile ça n'existe pas sur wm
Je me suis dit peut être sur la 26, mais non
Voir https://doc.pcsoft.fr/fr-FR/?3038035
Et où as tu lue la recommandation de Google ?
Je ne comprends pas
Tu dois vraiment confondre.
Membre enregistré
1 119 messages
Popularité : +8 (8 votes)
Posté le 27 février 2021 - 04:15
Voici un bout de code 100% fonctionnel.
SELON gst_ItemsListe.sNoteItem
CAS "Liste Rapide"
sRésultat = Ouvre(FEN_Items)
SI sRésultat = "SupprimerItem" ALORS
MAJ_ZR()
...

Je me suis trompé dans la nomenclature de Google, j'aurais du dire Android. Les fenêtres ouverte par la fonction Ouvre() sont automatiquement fermées après un laps de temps ouvert (plusieurs minutes). Ce n'est toutefois pas très scientifique, c'est seulement ce que j'ai constaté.

--
Jean Turcotte
WX 26
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Membre enregistré
3 328 messages
Popularité : +93 (137 votes)
Posté le 27 février 2021 - 08:35
Dans ce cas, c'est une nouveauté
Car normalement , la fonction n'est pas implémenter pour Android même en 26.
Normalement , c'est ouvresoeur, ouvrefille ou OuvreFenetreMobile
Dans le 2 ème cas, Si on ferme la mère alors la fille se ferme aussi.
J'utilise ces 3 fonction et je n'ai aucun problème de fermeture automatique
Ni aucun souci d'ouverture a partir d'une ZR.
Si il y a un problème, alors il serait sûrement judicieux d'ajouter des temporisation
J'ai remarqué que cela résout beaucoup de problème.
Membre enregistré
1 119 messages
Popularité : +8 (8 votes)
Posté le 27 février 2021 - 14:15
Popoy a écrit :
Dans ce cas, c'est une nouveauté
Car normalement , la fonction n'est pas implémenter pour Android même en 26.
Normalement , c'est ouvresoeur, ouvrefille ou OuvreFenetreMobile
Dans le 2 ème cas, Si on ferme la mère alors la fille se ferme aussi.
J'utilise ces 3 fonction et je n'ai aucun problème de fermeture automatique
Ni aucun souci d'ouverture a partir d'une ZR.
Si il y a un problème, alors il serait sûrement judicieux d'ajouter des temporisation
J'ai remarqué que cela résout beaucoup de problème.

J'utilise: sRésultat = Ouvre() pour permettre d'attendre des données de l'utilisateur avant de poursuivre. Avec les commandes: OuvreFille ou OuvreFenetreMobile ou Ouvre Soeur, le code qui suit les commandes se poursuit sans attendre la fermeture des fenetres que l'on vient d'ouvrir.

--
Jean Turcotte
WX 26
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Membre enregistré
177 messages
Popularité : +16 (16 votes)
Posté le 27 février 2021 - 18:22
Je sais que j'avais déjà évoqué le truc un peu plus haut, mais j'insiste: j'avais aussi des plantages aléatoires en WM18 (de mémoire) avec les ouvertures de fenêtres depuis des ZR.
Un tech du ST m'avait alors conseillé de les ouvrir avec un timersys(). Le timersys ayant la particularité d'attendre que le thread principal soit dispo avant de s'exécuter.
Il y a un petit délai à l'ouverture, mais rien de bien méchant et surtout, la fenêtre s'ouvre sans faire tout planter.
Depuis, je fais toujours comme ça et je n'ai plus jamais eu de plantage de la 18 à la 25.
Membre enregistré
1 119 messages
Popularité : +8 (8 votes)
Posté le 01 mars 2021 - 15:21
J'utilise la fonction sRésultat = Ouvre(FEN) parce que je questionne l'utilisateur et attends des réponses de sa part. Avec cette fonctionne le thread principal attend une réponse de la fenêtre appelée (C'est entre-autre ce qu'Android ne veut pas que les appli fassent.) mais actuellement, ça fonctionne pour ma part.

Je suis tout de même curieux de savoir comment vous vous y prenez de votre côté pour stopper votre code temporairement en attendant une entrée de l'utilisateur? J'ai pourtant fait plusieurs essais mais sans succès.

--
Jean Turcotte
WX 26
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Posté le 01 mars 2021 - 16:03
Officiellement OUVRE n'est PAS supportée pour android et iOS (vu que le concept de fenêtre modale n'existe pas dans ces systèmes)... Ca se voit facilement sur la page d'aide de la fonction : les icones pour ces systèmes sont grisés

Et pour ta question sur comment on fait, extrait de l'aide sur cette même page :

Android : L'utilisation de la fonction Ouvre est déconseillée sous Android. Il est recommandé d'utiliser la fonction OuvreFenêtreMobile. S'il est nécessaire de traiter la valeur renvoyée par la fenêtre, utilisez le l'événement "Fermeture d'une fenêtre fille" de la fenêtre appelante.

Donc, on PEUT utiliser 'ouvre', mais à un moment ou un autre ca va planter (tes fermetures impromptues) et ca n'est vraiment pas conseillé.
Membre enregistré
1 119 messages
Popularité : +8 (8 votes)
Posté le 01 mars 2021 - 17:25
Argus a écrit :
Officiellement OUVRE n'est PAS supportée pour android et iOS (vu que le concept de fenêtre modale n'existe pas dans ces systèmes)... Ca se voit facilement sur la page d'aide de la fonction : les icones pour ces systèmes sont grisés

Et pour ta question sur comment on fait, extrait de l'aide sur cette même page :

Android : L'utilisation de la fonction Ouvre est déconseillée sous Android. Il est recommandé d'utiliser la fonction OuvreFenêtreMobile. S'il est nécessaire de traiter la valeur renvoyée par la fenêtre, utilisez le l'événement "Fermeture d'une fenêtre fille" de la fenêtre appelante.

Donc, on PEUT utiliser 'ouvre', mais à un moment ou un autre ca va planter (tes fermetures impromptues) et ca n'est vraiment pas conseillé.

Merci Argus, je vais commencer les modifications alors. Et que penses-tu de l'utilisation de TimerSys() ?

--
Jean Turcotte
WX 26
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Posté le 01 mars 2021 - 18:45
Utiliser timersys pour déporter un traitement est une stratégie que j'ai utilisé avec succés en windev, webdev et mobile...

C'est une stratégie parfaitement valide, mais que j'ai peu besoin d'utiliser en mobile, car je préfère simuler mes fenêtres dans des plans différents de la fenêtre principale. Dans mes applis mobiles, je travaille à 90+% dans une seule fenêtre et n'utilise des fenêtres secondaires que dans des cas très particuliers.
Membre enregistré
1 119 messages
Popularité : +8 (8 votes)
Posté le 01 mars 2021 - 22:24
Je vois, comme quoi tous les chemins mènent à Rome...:)

--
Jean Turcotte
WX 26
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Membre enregistré
1 119 messages
Popularité : +8 (8 votes)
Posté le 03 mars 2021 - 15:40
Mon travail de modification de la fonction Ouvre() avance bien et j'en profite pour y intégrer des TimerSys(). Mon premier test utilisait 200 ms, ce qui était beaucoup plus long que 0.2 s. Quelle valeure utilisez-vous habituellement pour éviter des erreurs?

--
Jean Turcotte
WX 26
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram
Membre enregistré
177 messages
Popularité : +16 (16 votes)
Posté le 03 mars 2021 - 16:13
1ms est suffisante, le but est de s'assurer que le thread principal est disponible, pas d'introduire un délai.
Membre enregistré
1 119 messages
Popularité : +8 (8 votes)
Posté le 03 mars 2021 - 17:25
Jean-Marc a écrit :
> 1ms est suffisante, le but est de s'assurer que le thread principal est disponible, pas d'introduire un délai.
Merci!

--
Jean Turcotte
WX 26
Android 9.0 sur Galaxy S8
Laptop Lenovo I7 12GB Ram