Blogs officiels sur tous les services et produits de PC SOFT
Publié par
14:23 Mercredi
19 Nov. 2014

[Billet publié dans le blog Le blog du ST]

A partir du mois d'avril 2015, Google va imposer l'utilisation de l'authentification Oauth 2.0 pour l'accès à ses services. Ce mode d'authentification améliore la sécurité et propose de nouvelles possibilités : 
  • l'utilisateur final décide d'autoriser l'accès ou non à des services,
  • l'authentification en deux étapes (sms) est disponible... 
Ce changement n'est pas transparent pour les applications qui utilisent les services Google avec les fonctions Ggl*. En effet, historiquement les fonctions Ggl utilisaient l'API "ClientLogin" comme mécanisme d'authentification. Avec ce dernier Google ne demandait que l'envoi d'un couple utilisateur/mot de passe, qui permettait d'obtenir un "token" de session à utiliser pour l'accès aux API. Avec l'authentification OAuth 2.0, il faut dans un premier temps "déclarer" l'application sur sa console développeur Google. Cela permet d'obtenir de Google un identifiant client, ainsi qu'un code secret propre à l'application : ils servent à la place du couple utilisateur/mot de passe à se connecter.

La fonction de connexion GglConnecte et le type de variable gglconnexion ont donc été adaptés pour cette échéance d'avril 2015 :

Toutes les applications qui utilisent des services de Google via les fonctions Ggl* du Wlangage
devront être donc recompilées avec l'une de ces versions pour continuer
à utiliser les services de Google à partir d'avril 2015. 


Recommandation importante : avec cette nouvelle syntaxe adaptée à l'authentification OAuth 2.0, il est fortement conseillé d'appeler explicitement la fonction GglConnecte en donnant en paramètre l'ensemble des services Google nécessaires à l'application (syntaxe 2 de la fonction GglConnecte). Sans cela, l'utilisateur final de l'application devra en plus de la connexion initiale, valider une demande d'autorisation lorsqu'il tentera d'accéder à un service Google. En effet, toutes les fonctions Ggl* sont adaptées afin d'ouvrir automatiquement une fenêtre de connexion ou d'autorisation si l'application n'est pas connectée ou autorisées à accéder à Google ou l'un de ses services. Il est donc préférable via GglConnecte de provoque une connexion unique incluant l'autorisation d'utilisation des services désirés.

Voici les liens directs vers les pages d'aide qui ont été mises à jour :

Aide des différentes jeux de fonctions d'utilisation des services Google :

Et enfin voici un exemple de code de connexion "avant / après" :

Exemple de code de connexion type "ClientLogin" utiliser jusqu'à présent pour se connecter à Google :
googleConnexion est un gglConnexion
googleConnexion.Email=gsGoogleCompte
googleConnexion.MotDePasse=gsGoogleMotDePasseCompte
googleConnexion.NomApplication=gsGoogleNomApplication
//Connexion au compte Google
SI PAS GglConnecte(googleConnexion) ALORS
 Erreur(ErreurInfo(ErreurDétectée))
SINON
 //Récupération de l'agenda par défaut
 AgendaExistant est un gglAgenda
 AgendaExistant= GglRécupèreAgenda(googleConnexion)
 SI ErreurDétectée ALORS
  Erreur(ErreurInfo(ErreurDétectée))
 SINON
  Info("Agenda récupéré !")
 FIN
FIN


Exemple de code de connexion nécessaire pour une authentification OAuth 2.0 (version minimale requise 190056S + mise à à jour 89 795 des ressources pratiques :
 googleConnexion est un gglConnexion googleConnexion.Email=gsGoogleCompte //de la forme : nomutilisateur@gmail.com
googleConnexion.ClientID=gsGoogleClientID // de la forme : 568705434218-sed6r7rgd7alcnbehs67f1k5s6ixqz84q.apps.googleusercontent.com
googleConnexion.ClientSecret=gsGoogleClientSecret // de la forme : kshKqXQPxUWmGLDiyBcmrCR2
// Pour créer un ID et un secret il faut :
// 1 - Avoir un compte Google (par forcément celui auquel on se connecte, ce sera le compte associé à cette application)
// 2 - Crée un projet dans la console Google (https://code.google.com/apis/console)
// 3 - Crée un projet dans la console en indiquant l'identifiant voulez (avec les restrictions Google : entre 6 et 30 caractères, que des minuscules...)
// note : ce n'est pas cette identifiant qu'il faudra utiliser
// 4 - Sélectionner le projet dans la console Google et choisissez "Activer une API", et activez "Calendar API" (et "Contact API" si vous utilisez les contacts)
// 5 - Dans la console aller sur "Identifiant", puis "Créer un identifiant client", et "Application installée"
// ==> la Google donne l'identifiant et la clé secrète

//Il faut mémoriser et le cas échéant restaurer les informations de connexion pour éviter de re- demander l'autorisation à chaque connexion
bufGoogleConnexion est un Buffer
sNomFichierTokenGoogleest une chaîne=fRepDonnées()+"\tokengoogle.bin"

//on a précédemment mémorisé une connexion ?
SI fFichierExiste(sNomFichierTokenGoogle) ALORS
 //On restaure la connexion avec les autorisation qu'elle a pour ne pas re-demander à chaque fois les autorisations
 QUAND EXCEPTION DANS
  Désérialise(googleConnexion,fChargeBuffer(sNomFichierTokenGoogle),psdBinaire)
 FAIRE
  //Echec de la dé-sérialisation, le fichier est peut-être endommagé
  //=> il y aura une nouvelle demande d'authentification à l'utilisateur
 FIN
FIN

//Connexion au compte Google
SI PAS GglConnecte(googleConnexion,gglServiceAgenda) ALORS //==> Ici la première fois une fenêtre d'authentification va s'ouvrir à l'utilisateur
 Erreur(ErreurInfo())
SINON
 //Mémorisation de la connexion Google avec les informations d'autorisation
 Sérialise(googleConnexion,bufGoogleConnexion,psdBinaire)
 fSauveBuffer(sNomFichierTokenGoogle,bufGoogleConnexion)
 Info("Connecté")
FIN

Publié par
17:00 Mardi
18 Nov. 2014

[Billet publié dans le blog Le blog du ST]

Il est possible dans un site WEBDEV d'inclure des javascript externes dans un projet et/ou des pages d'un projet. Cet aspect est détaillé dans les pages suivantes : 

Avant la version 19 de WEBDEV, les javascript externes étaient chargés dès le début des pages générées. En version 19, le chargement des .JS a été déplacé en fin de page. Cela permet de ne pas bloquer le chargement et l'affichage de la page dans le navigateur, par l'exécution et l'inclusion de script JS : la page s'affiche plus vite !

Ce changement, bon pour la rapidité des sites, peut avoir un "effet de bord" dans le cas très particulier d'un site qui utiliserait un javascript externe à partir d'un code html ou javascript :
  • placé dans la description d'un champ, dans le HTML inséré avant ou le HTML inséré après,
  • affecté par programmation avec les propriétés ..HTMLAvant ou ..HTMLAprès
En effet, dans ce cas, le javascript externe est bien accessible s'il est chargé en début de page, par contre avec un chargement en fin de page il sera manquant. Cela provoque une absence de résultat et une erreur de type "Uncaught ReferenceError : xxxx is not defined" visible dans la console du navigateur (F12 sous Chrome ou Internet Explorer).

La solution recommandée consiste donc à placer les traitements qui utilisent les javascript externes dans une fonction navigateur de la page. Cette fonction sera appelée dans le code navigateur "onload" de la page, permettant ainsi :
  • l'utilisation du .JS externe puisque la page et ses dépendances sera chargée lors de l'appel du code onload,
  • un affichage plus rapide de la page. 

Astuce : si le javascript externe doit faire référence à des champs de la page, ils pourront être passés en paramètres (NomChamp..Alias) à la fonction navigateur appelée en "onload" de la page.
Publié par
15:04 Vendredi
14 Nov. 2014

[Billet publié dans le blog Le blog du ST]

Les fonctions JSONExécute et JSONExécuteExterne permettent via une url d'obtenir d'un serveur des données au format JSON (JavaScript Object Notation).

Dans le cas général le serveur donne directement la réponse et se trouve sur le domaine qui héberge le site. C'est la fonction JSONExécute qui permet directement d'obtenir la réponse.

Il est également fréquent d'interroger un serveur d'un autre domaine (un service de Google par exemple), qui va attendre un paramètre permettant la mise en place d'un mécanisme de "callback". C'est alors la fonction JSONExécuteExterne qui permet d'obtenir la réponse JSON.


Un cas supplémentaire peut se produire : le serveur à contacter retourne une réponse directe sans attendre de paramètre avec le nom d'une "callback", et ce serveur n'est pas dans le domaine. Dans ce cas précis, c'est à nouveau la fonction JSONExécute qui devra être utilisée, et non pas JSONExécuteExterne. En effet, JSONExécuteExterne impose l'utilisation d'un paramètre elle n'est pas adaptée, en revanche JSONExécute peut faire un appel vers un autre domaine, à condition que le serveur cible l'autorise via une entête (header) http supplémentaire : "Access-Control-Allow-Origin" adaptée.

Si la fonction JSONExécuteExterne est utilisée pour tenter d'obtenir une réponse d'un serveur qui n'attend pas de paramètre, en fonction du navigateur une erreur sera obtenue :
  • Chrome : Failed to execute 'send' on 'XMLHttpRequest' : Failed to load <url>  
  • IE : Erreur lors de l'envoi de la requête : NetworkError  

Liens utiles pour cerner ces mécanismes :


Publié par
10:15 Lundi
27 Oct. 2014

[Billet publié dans le blog Le blog du ST]

Des nouveautés et spécificités apportées par la version 8 de iOS peuvent avoir une incidence sur les applications exécutées sous cette version du système des iPad, iPhone et iPod.

Afin de conserver sous iOS 8 un comportement identique à celui obtenu sous iOS 7, il faut inciter les mises à jour vers iOS 8.1 qui apporte de nombreux correctifs et fonctionnalités. D'autre part une mise à jour du framework a été faite pour la version 190056s de WINDEV Mobile 19. 

Le pack de mise à jour est dans l'espace téléchargement de WINDEV Mobile : 

Cette mise à jour permet principalement de :
  • conserver l'application active lors de la mise en veille (cf. FAQ 9726), 
  • rétablir le positionnement des champs lors de l'affichage du clavier de saisie sur iPAD orienté en paysage, 
  • utiliser les notifications Push, 
  • récupérer la position courant avec la fonction GPSRecupèrePosition,
  • afficher les pastilles avec la fonction SysIconeBadge,
  • éviter un blocage dans le cas d'une animation de fenêtre de gauche à droite 
  • sélectionner un agencement par programmation avec la fonction FenChangeAgencement ...


Publié par
08:34 Jeudi
09 Oct. 2014

[Billet publié dans le blog Le blog du ST]

Le sommaire de la LST 98 est en ligne !


  • WINDOWS : SCANNER UN CODE-BARRES À L'AIDE D'UNE WEBCAM 
  • PROGRAMMATION OBJET : MISE EN PLACE DU DESIGN PATTERN OBSERVATEUR 
  • SÉCURISER UNE APPLICATION WINDOWS OU UN SITE GRÂCE À LA DOUBLE AUTHENTIFICATION 
  • GROUPWARE INTRANET : “CHANGER D'UTILISATEUR” 
  • PAYBOX : NOUVELLE VERSION DU COMPOSANT DE PAIEMENT SÉCURISÉ 
  • DES COPIES D'ÉCRAN DE QUALITÉ POUR GOOGLE PLAYSTORE ! 
  • BEST PRACTICE : EXECUTER DE MANIERE PERIODIQUE UN TRAITEMENT 
  • PDF : LIRE OU REMPLIR UN FORMULAIRE AUTOMATIQUEMENT 
  • FINIES LES VALIDATIONS ACCIDENTELLES ! 
  • DÉCOUVERTE DE FONCTIONS WINDEV 
  • QUESTIONS & RÉPONSES 
  • PERSONNALISEZ VOS SITES AVEC UNE NOUVELLE AMBIANCE 
  • VOS APPLICATIONS MOBILES AVEC UN NOUVEAU GABARIT 
  • UTILITAIRE : “WD FILEBOX” POUR SYNCHRONISER OU PARTAGER DES FICHIERS 
  • FORMULAIRE/SONDAGE : AUGMENTEZ LE TAUX DE RÉPONSE ! 
  • DO YOU SPEAK ENGLISH? ¿ HABLAS ESPAÑOL ? 
  • PROPOSEZ UNE SAISIE RAPIDE OU UN MODE SIMPLIFIÉ D'UNE FENÊTRE SANS DUPLIQUER ! 
  • MAC OS X : 6 POINTS IMPORTANTS LORS DU DÉVELOPPEMENT 
  • TRANSFORMER UNE BASE DE NUMÉROS DE TÉLÉPHONE AU FORMAT INTERNATIONAL 
  • ZOOM SUR LA FONCTION SQL “DECODE” 
  • IMPRIMER “TEL QUEL” CE QUE L'UTILISATEUR VOIT À L'ÉCRAN 
  • DES TEXTES TOUJOURS LISIBLES ! 
  • LE SAVIEZ-VOUS ? 

Disponibilité prévisionnelle :
  • à partir du 27 Octobre 2014 pour la France métropolitaine , 
  • DOM-TOM et hors France, prévoir une semaine supplémentaire.
Publié par
15:31 Mardi
07 Oct. 2014

[Billet publié dans le blog Le blog du ST]

Le rendu des site dans les navigateurs est un vaste sujet, au fil des versions des navigateurs les technologies évoluent et donc les façons de développer les sites progressent. WEBDEV gomme la majeure partie des différences entres les moteurs de rendu des navigateurs, comme cela a souvent été abordé dans le blog (cf. "liens sur le même sujet" en fin de billet). 

Cependant pour profiter pleinement de tout le "savoir-faire" de la génération des pages de WEBDEV, il est important d'utiliser ses solutions de mises en page les plus récentes. Voici donc les recommandations principales à appliquer pour la création de vos sites, mais également en "repassant" pour mise à jour sur les pages d'un site développé il y a quelques années :

  1. Norme de génération, paramétrable dans le volet "Avancé" de la description du projet : utiliser HTML 5.



    Les sites utiliseront ainsi le mode de rendu le plus récent des navigateurs, et non pas un de leurs modes de compatibilité. 

    Attention, bien vérifier que les pages utilisent la norme du projet :
  2. Champs superposables : les supprimer !
    S'il y a quelques années l'option "le champ peut être superposé" proposée pour tous les champs était pratique pour forcer la position d'un champ, à l'inverse avec les navigateurs actuels elle peut provoquer des effets inattendus sur les ancrages. 
    Si un champ doit obligatoirement être au dessus d'un autre, seul le champ par dessus doit avoir l'option "le champ peut être superposé" cochée.
  3. Superpositions invalides et erreurs d'IHM : toujours les activer ! 
    Ces deux options sont fondamentales. Toute erreur d'ihm ou de superposition laissée dans un site, provoquera invariablement un positionnement erroné dans un navigateur ou un autre.



  4. Positionnement et regroupement des champs : supprimer les cellules qui ne sont plus obligatoires maintenant grâce au zoning !
    Surtout pour les sites créés avant la version 17, ou après sans utiliser le zoning, supprimer les cellules qui servaient à positionner les champs afin de les remplacer par des zones de mise en page : 



  5. Mention spéciale pour Internet Explorer : supprimer les méta "X-UA-Compatible = IE???".
    Avant la version 11 de IE, il n'était pas rare de devoir "forcer" le moteur de rendu de IE à utiliser un de ses nombreux modes de compatibilité afin d'avoir le bon résultat. De nombreuses pages contiennent pour cela une commande "méta-http" de type "X-UA-Compatible IE???". A partir du moment ou le site est maintenant généré en HTML 5 en appliquant les conseils ci-dessus, les commandes "méta" peuvent être retirées.
    Exception pour confirmer la règle, les sites sous IE toutes versions confondues utilisés dans un contexte Intranet sécurisé : FAQ 6 756.

Pour les nouvelles pages créées en version 19 il est facile d'utiliser directement le zoning et d'appliquer toutes ses recommandations.

Dans le cas de la reprise de pages existantes pour leur évolution, la tâche peut sembler complexe ou coûteuse en temps. En pratique grâce à la simplicité du mode d'édition en zoning, l'opération est rapide à condition de ne pas avoir peur d'y aller franchement.
En cas de fausse manipulation un paire de Ctrl+Z ou une annulation de l'extraction du GDS permet tout de suite de faire marche arrière. En découle une méthodologie "radicale" pour "rajeunir" une page utilisant des cellules et superpositions :

  • s'assurer que les erreurs d'IHM et de superposition sont affichées, 
  • éditer la description des cellules qui regroupent les champs dans la page, 
  • utiliser le bouton "enlever" afin de supprimer les champs des cellules, 
  • supprimer les cellules une fois qu'elles n'ont plus de champs, 
  • passer sur le volet "Zoning" de l'éditeur de pages, 
  • définir l'ancrage voulu pour la zone unique qui constitue la page, 
  • utiliser "découper" et "subdiviser" afin de délimiter les différentes zones qui composent la page (les cellules utilisées précédemment), 
  • ajuster couleurs de fond et cadres des différentes zones (si une couleur n'est pas affichée, c'est que l'affichage de la table de positionnement est en cours, ctrl+u permet de revenir à l'affichage des couleurs), 
  • placer les différents ancrages de chaque zone (bandeau en haut, à droit, centrage dans le navigateur d'une des zones...), 
  • repasser en édition de page, 
  • sélectionner tous les champs (ctrl+A), dans la fenêtre de description volet "ihm" décocher "le champ peut être superposé", 
  • ajuster les différents champs sur les zones. 
  • C'est terminé ! 
La page utilise maintenant les solutions les plus actuelles : elle est plus rapide, son rendu sera plus fiable d'un navigateur à l'autre. Bien sûr WEBDEV assure toujours la compatibilité, il n'y a donc aucune obligation à reprendre "immédiatement" toutes les "anciennes" pages. C'est à faire progressivement pour l'existant.


Liens sur le même sujet :



Publié par
13:16 Lundi
06 Oct. 2014

[Billet publié dans le blog Le blog du ST]

Parmi nos dizaines de milliers d'utilisateurs, une centaine vous fait partager leur expérience. Vous trouverez dans les témoignages un aperçu de leurs réalisations, et leurs réflexions.


Publié par
13:10 Mercredi
17 Sep. 2014

[Billet publié dans le blog Le blog du ST]

Un changement important visant à remplacer tous les certificats de sécurité déployés qui utilisent l'algorithme SHA-1 est amorcé par Google à partir de la version 39 de Chrome qui sera disponible en bêta le 26/9/2014.

En fonction de la date d'expiration des certificats SHA-1, un avertissement de sécurité pourra apparaître :

Il est donc vivement recommandé de vérifier les certificats de vos sites sécurisés afin d'éviter un avertissement pouvant dérouter les Internautes utilisant Chrome.

Liens utiles sur le sujet :

Publié par
09:42 Vendredi
12 Sep. 2014

[Billet publié dans le blog Le blog du ST]

De nouvelles dates sont disponibles pour les formations WINDEV, WEBDEV et WINDEV Mobile.

Retrouvez toutes les dates dans la rubrique formation du site, ainsi que les inscriptions en province, et à Paris sur les Champs-Élysées.
Publié par
09:31 Lundi
08 Sep. 2014

[Billet publié dans le blog Le blog du ST]

Cette possibilité ajoutée au Wlangage en version 19 est sous utilisée : piqûre de rappel ! 

Lorsqu'une variable source de données est déclarée et réservée à un type de données connu lors du développement, il est possible de préciser ce type avec la syntaxe <description=fichier ou requête>.

Cela permet de profiter de la complétion automatique dans l'éditeur de code, afin d'avoir toutes les rubriques proposées lors de l'utilisation de la variable.