Blogs officiels sur tous les services et produits de PC SOFT
Publié par
15:19 Mardi
16 Déc. 2014

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

Dans un contexte Intranet, il peut être intéressant de donner à la session WebDev les droits réseau de l'utilisateur final. Cela permet par exemple de connaître son login (RéseauUtilisateur), de lancer une application sur son poste (LanceAppliDistante), etc...
Pour donner les droits réseau de l'utilisateur connecté, il faut indiquer à IIS que l'authentification ne sera pas anonyme mais qu'elle sera de type authentification Windows. 

1 – Ajouter à IIS, la fonctionnalité " Authentification Windows " : 

Dans le panneau de configuration du serveur, choisissez l'option Programmes et Fonctionnalités, puis Activer ou désactiver des fonctionnalités de Windows.


Ajoutez l'option Authentification Windows

Redémarrez le serveur.

2 – Modifier les paramètres d'authentification de IIS :

Dans le gestionnaire de service Internet (IIS) accessible depuis le panneau de configuration, Outils d'administration, Gestionnaire de services Internet (IIS), choisissez votre serveur Web, puis double cliquez sur Authentification.


Il faut désactiver l'Authentification anonyme et activer l'Authentification Windows.

Enfin, Redémarrez IIS et votre site Web Intranet donnera les droits utilisateurs Windows à vos sessions WebDev. 



Publié par
20:03 Lundi
15 Déc. 2014

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

WINDEV WEBDEV et WINDEV Mobile 20 sont disponibles en version finale !



Publié par
18:19 Vendredi
12 Déc. 2014

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

Les index full-text de HFSQL sont enrichis en version 20 :

La documentation de ces nouvelles possibilités vient d'être mise en ligne, voici les pages concernées :  

Bonne lecture, bons développements !
Publié par
17:39 Vendredi
12 Déc. 2014

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

L'offre Apple a été considérablement étoffée ces dernières années, il y a maintenant une grande diversité de matériels : 
  • iPhone : 4, 4s, 5, 5c, 5s, 6, 6+ 
  • iPad : 1, 2, 3, air, mini (...)
  • iPod.

Ces périphériques utilisent des processeurs différents (32 ou 64 bits à partir de l'iPhone 5s), des résolutions différentes (une même application peut nécessiter de plus de mémoire si l'écran est "rétina").

En parallèle il y a les évolutions de iOS. Les nouvelles versions ajoutent le support des fonctions supplémentaires des nouveaux périphériques, tout en restant compatibles avec la majeure partie des périphériques plus anciens. Par exemple iOS 8 de septembre 2014 incluant les nouveautés pour l'iPhone 6 et 6+, peut être installé sur un iPhone 4s de 2011.

Cette multiplication des périphériques, des processeurs, des résolutions et des versions de iOS peut être à l'origine de "comportements" différents d'une même application sur différents appareils, indépendamment de l'environnement de développement.

Ainsi pour toute demande formulée à notre support par "Requête au support technique" (bouton "Aide") de WINDEV Mobile, relative à une application iOS, précisez bien systématiquement : 
  • la version exacte de iOS qui est concernée, 
  • le modèle exact du périphérique,
  • si vos tests ont déjà mis en évidence un lien avec un périphérique ou une version de iOS, précisez également les périphériques et/ou les versions de iOS avec lesquels à l'inverse le cas n'est pas reproductible.

Notez qu'en phase de sortie d'une version de iOS, comme pour tout système d'exploitation, il y a nécessairement besoin de réglages réguliers de la part de l'éditeur. Par exemple avec iOS 8 de septembre 2014, il y a eu en moins de 3 mois les versions 8.0.1, 8.0.2, 8.1, 8.1.1, 8.1.2, et la bêta 8.2 est annoncée. Dans les semaines qui suivent une mise à jour majeure d'un système, il est donc important de bien vérifier que les périphériques sont à jour, de nombreuses difficultés sont supprimées simplement par l'application de la dernière version mise à disposition de l'OS...

Publié par
20:23 Mercredi
03 Déc. 2014

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

Pré-Versions 20 de WINDEV, WEBDEV et WINDEV Mobile disponibles dans l'espace téléchargement de notre site !

Voici les liens vers les pages détaillant les nouveautés activées dès les Pré-Versions :

La brochure des nouveautés habituellement disponible uniquement en PDF et EBook est cette année également intégrée à l'aide en ligne. Il est donc possible depuis l'aide d'accéder aux descriptions des nouveautés :

Si une nouveauté n'est pas encore documentée, la rédaction de l'aide et ses illustrations peut parfois nécessiter un délai supplémentaire, il est ainsi toujours possible d'avoir la description de la nouveauté parue dans la brochure !

Consultez régulièrement notre blog et Twitter pour être informé "en live" des nouvelles documentations disponibles (doc manquantes actuellement mais qui vont être ajoutées en priorité : racinisation, vues HFSQL, Pull To refresh, tables mobiles, jauges infinies).
Publié par
10:12 Vendredi
28 Nov. 2014

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

Notre support peut être amené à vérifier la liste des modules en place sur un poste de développement. Voici la méthode à utiliser afin d'obtenir simplement une copie de tous les modules installés : 

  1. "à propos" dans l'éditeur de WINDEV, WEBDEV ou WINDEV Mobile 

  2. cliquer sur le bouton "..."

  3. dans la fenêtre "Informations sur les fichiers...", cliquer sur "Copier"

Le presse-papier contient alors l'ensemble des modules de la station, il suffit de le coller en réponse à la demande envoyée par notre support.

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 ...