PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Tester une requête+internetConnecté : bug
Tester une requête+internetConnecté : bug
Débuté par Pascal BOULESTEIX, 04 fév. 2024 11:02 - 12 réponses
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 04 février 2024 - 11:02
Bonjour
D'une part, dans l'initialisation de mon projet, je vérifie si Internet est accessible.
Pour cela, j'utilise (code résumé)
SI PASS EnModeSimulateur() ALORS
gbIsInternet = InternetConnecté()
FIN


D'autre part, j'utilise des requêtes.
En voulant tester une nouvelle requête, lors de l'exécution, un message d'erreur "standard" signale que InternetConnecté() n'est pas disponible pour la plateforme.

Pour pouvoir exécuter la requête, j'ai dû modifier le code ainsi, mais ça me pose d'autres problèmes :

SI PASS EnModeSimulateur() ET PAS EnModeTest() ALORS
gbIsInternet = InternetConnecté()
FIN


Question : y a-t-il un mode du style EnTestDeRequete ?

Notez que cela doit être une évolution récente car j'utilise depuis des années le même type de code et les requêtes
--
Pascal Boulesteix
Applications Visiolittoral et WNat
Message modifié, 04 février 2024 - 11:05
Membre enregistré
797 messages
Popularité : +40 (42 votes)
Posté le 04 février 2024 - 23:10
Bonjour, j'ai également eu beaucoup de mal à détecter l'état de la connexion à ce moment-là. J'utilise donc le code suivant sur Android.

import android.net.ConnectivityManager;
import android.net.NetworkCapabilities;
import android.net.NetworkInfo;
import android.content.Context;
import android.os.Build.*;

static public int isOnline() 
{

int nRes = 0;

ConnectivityManager connectivityManager = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);

    if (connectivityManager != null) 
    {
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
            NetworkCapabilities capabilities = connectivityManager.getNetworkCapabilities(connectivityManager.getActiveNetwork());
            if (capabilities != null) {
                if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) {
                    nRes = 1;
                } else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) {
                    nRes = 1;
                }  else if (capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET)){
                    nRes = 1;
                }
            }
    }
    else
    {

     try 
     {
            NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
            if (activeNetworkInfo != null && activeNetworkInfo.isConnected()) 
            {
                //Log.i("update_statut", "Network is available : true");
                nRes = 1;
            }
        } 
        catch (Exception e) 
        {
            //Log.i("update_statut", "" + e.getMessage());
        }
    }
}
else
{
    //Log.i("update_statut","Network is available : FALSE ");
}

return nRes ;
}


Le seul problème est que lorsque vous ajoutez une procédure Java, vous ne pourrez pas l'utiliser en mode test.

Rubén
Message modifié, 04 février 2024 - 23:11
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 05 février 2024 - 14:40
Désolé, je me suis mal exprimé.
C'est lors du test dans l'interface de développement qu'il y a un problème





--
Pascal Boulesteix
Applications Visiolittoral et WNat
Membre enregistré
3 347 messages
Popularité : +93 (137 votes)
Posté le 05 février 2024 - 19:21
Salut
En effet, ça bug
Personnellement sur la 25 que je sois en test ou sur l'appareil
InternetConnecté fonctionne.
Je te conseille de signaler le problème au support PCSOFT.
Posté le 06 février 2024 - 09:59
Ce n'est pas un bug, c'est que quand vous faites un Go de requête le code d'init du projet est exécuté. Il faut donc "protéger" l'appel à InternetConnecté par un SI EnModeAndroid
Membre enregistré
3 347 messages
Popularité : +93 (137 votes)
Posté le 06 février 2024 - 12:50
wddev a écrit :
> Ce n'est pas un bug, c'est que quand vous faites un Go de requête le code d'init du projet est exécuté. Il faut donc "protéger" l'appel à InternetConnecté par un SI EnModeAndroid
Salut, sauf erreur de ma part, pascal parle du mode test
Qui ce fait sous windows et internetconnecté fonctionne aussi bien sous Android et Windows
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 06 février 2024 - 13:52
C'est bien sur le "Tester la requête (F9)" que se pose le problème.

--
Pascal Boulesteix
Applications Visiolittoral et WNat
Posté le 06 février 2024 - 14:51
Popoy a écrit :
wddev a écrit :
Ce n'est pas un bug, c'est que quand vous faites un Go de requête le code d'init du projet est exécuté. Il faut donc "protéger" l'appel à InternetConnecté par un SI EnModeAndroid
Salut, sauf erreur de ma part, pascal parle du mode test

Qui ce fait sous windows et internetconnecté fonctionne aussi bien sous Android et Windows


A mon avis c'est parce que Pascal ne nous dit pas tout et qu'il utilise la syntaxe de InternetConnecté qui prend une procédure en paramètre (et cette syntaxe est dispo en mobile uniquement)
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 06 février 2024 - 16:14
Je ne dis pas tout, parce que je n'en voyais pas l'importance. Du coup ma proc pour tester si il y a de l'Internet
Procedure gPROC_INTERNET_TEST_CONNECTION()

SI EnModeArrièrePlan() OU EnModeWidget() ALORS
gbIsInternet = Vrai // InternetConnecté()
gnQuidInternet = 99
RETOUR
FIN

// SI PAS EnModeSimulateur() et pas EnModeTest() ALORS
SI PASS EnModeSimulateur() ALORS

gbIsInternet = InternetConnecté()

InternetConnecté(gPROC_INTERNET_REFRESH)

<Compile SI TypeConfiguration=iOS>
// Nécessaire car sous iOS le callback n'est appelé que quand l'état change
gbIsInternet = InternetConnecté()
gnQuidInternet = réseauMobile
<FIN>

SINON
gbIsInternet=Vrai
gnQuidInternet=2

FIN


--
Pascal Boulesteix
Applications Visiolittoral et WNat
Posté le 06 février 2024 - 16:29
La ligne dans le message d'erreur aurait pu vous mettre sur la voie...

En tout cas l'erreur est donc "normale" car EnModeSimulateur doit renvoyer Faux en Go de requête.

Il faut probablement écrire quelque chose du genre :

SI PAS EnModeSimulateur _ET_ EnModeAndroid ALORS
...
Membre enregistré
3 347 messages
Popularité : +93 (137 votes)
Posté le 06 février 2024 - 19:15
En effet,
Pascal n'a pas fourni un détail important.
Car s'il avait dès le début écrit
InternetConnecté(gPROC_INTERNET_REFRESH)
Je n'aurai pas répondu la même chose
Membre enregistré
31 messages
Popularité : +4 (4 votes)
Posté le 08 février 2024 - 19:00
Bonjour,

Avez vous essayé en passant le type d'exécution à la fonction EnModeTest() ?

Dans ce cas-ci :
SI EnModeTest(mtRequête) ALORS
// Code a exécuter
FIN


--
Nicolas GERARD
SRL RGPD.Zen-Project.be
support@zen-project.be
www.zen-project.be
https://www.linkedin.com/in/nicolas-gerard-zp/

Membre de l'asbl Be-Dev Association des développeurs Windev de Belgique
www.be-dev.be
Message modifié, 08 février 2024 - 19:00
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Posté le 08 février 2024 - 22:11
Non.
Je m'en sors en utilisant WDSql pour tester ses requêtes

--
Pascal Boulesteix
Applications Visiolittoral et WNat