Étiquette : WebDev

[WD21] Erreur vTable invalide à l’adresse X

[WD21] Erreur vTable invalide à l’adresse X

Depuis hier l’Update 3 des éditeurs Windev, Webdev et Windev Mobile est disponible. Il s’agit de la version ayant passé avec succès le premier niveau de validation donc celle-ci n’est pas définitive. Installée sur deux PC différents, impossible de développer sans obtenir une erreur de ce genre :

vTable invalide à l'adresse 0x1f8e00e5
Pile:
0x1f8e00e5
0x7c406e56
0x98a28ab0
0x440f3678
0x601f527a

Cette erreur – qui apparait au bout d’une minute ou deux – est généralement liée au dongle / aux drivers de celui-ci (Sentinel HASP). Seulement voilà, les pilotes installés sont bien les derniers (7.41), et le problème se produit aussi bien sur Windows 8.1 que sur la 10.

Et bien sûr… Impossible d’aller plus loin. La seule issue possible est de cliquer sur le bouton Fermer. L’erreur a été signalée au support technique plus tôt dans l’après-midi, ainsi que sur les forums.

Si comme moi vous avez pris l’habitude de décocher la sauvegarde lors de l’installation des mises à jour de produits PC SOFT, alors vous risquez d’être à l’arrêt en attendant un correctif. Espérons que ça ne soit pas trop long…

Edit du 1/6/2016 – Pour information le bug se produit sur Windows 8.1 et 10 mais surtout, sur 3 machines au total, ayant des périphériques USB complètement différents. Tous étaient en Update 2 et Windev fonctionnait sans problème jusqu’à cette mise à jour.

Edit du 2/6/2016 – J’ai effectué quelques tests en ne laissant branché qu’un dongle et le phénomène est le même. J’ai dû lancer un outil de diagnostic et transférer un fichier au support, malheureusement en cette fin d’après-midi je n’ai aucune réponse concrète. J’ai en attendant désinstallé les pilotes et les 2 dongles, puis réinstallé proprement le dernier driver Sentinel HASP, sans succès.

Edit du 3/6/2016 – 3 jours déjà mais on tient le coup. Après l’exécution de l’outil de diagnostic, le support a relevé un conflit, sans en dire beaucoup plus. Si celui-ci est confirmé après l’envoi du deuxième fichier, l’article sera mis à jour en conséquence.

Le conflit est en fait dû à un pilote HP pour les claviers (à priori HP Hotkey Support). PC SOFT m’a envoyé un correctif, que vous pouvez télécharger en cliquant sur ce lien (pack_fr_98553.zip).

Ensuite, décompressez les exécutables de Webdev 21 dans :

Webdev21.exe, Webdev 21\Programmes
Webdev64local.exe, Webdev 21\Programmes
Webdev64net.exe, Webdev 21\Programmes
– Données\Webdev.wdl, Webdev 21\Programmes\Données

Idem pour Windev:

Windev21.exe, Windev 21\Programmes
Windev64local.exe, Windev 21\Programmes
Windev64net.exe, Windev 21\Programmes
– Données\Windev.wdl, Windev 21\Programmes\Données

Idem pour Windev Mobile :

Wd21Mobile.exe, Windev Mobile 21\Programmes
Windevmobile64local.exe, Windev Mobile 21\Programmes
Windevmobile64net.exe, Windev Mobile 21\Programmes
– Données\Windev Mobile.wdl, Windev Mobile 21\Programmes\Données

[WD21] Envoyer un email (II)

[WD21] Envoyer un email (II)

Nous avions vu il y a presque un an comment envoyer un email à l’aide de Windev. Cette fois nous allons utiliser les structures mises à notre disposition pour faciliter la programmation. C’est surtout au niveau de la connexion qu’il va y avoir du changement.

Connexion

Nous allons utiliser une structure de type EmailSessionSMTP. On va alors passer toutes les options à l’aide des différentes propriétés, puis appeler la fonction EmailOuvreSession() en passant cette unique variable.

MaSession est un EmailSessionSMTP
MaSession..AdresseServeur = GP_Param_s_SMTPServer
MaSession..Port = GP_Param_i_SMTPPort
MaSession..Nom  = GP_Param_s_SMTPUsername
MaSession..MotDePasse = GP_Param_s_SMTPPassword
MaSession..Option = emailOptionSécuriséTLS
bOpenSessMail = EmailOuvreSession(MaSession)

Il faudra ensuite tester le booléen pour voir si la session est ouverte.

Préparer le message

Pour le coup, rien ne change. On construit le message à l’aide d’une variable de type Email.

MonMessage est un Email
MonMessage..AdresseExpéditeur = GP_Param_s_SMTPExpe
MonMessage..Expediteur  = "Nom <" + GP_Param_s_SMTPExpe + ">"
MonMessage..Sujet = "Reporting du 28/4/2016"
MonMessage..Message = "Contenu du message au format brut"

Il faut bien entendu spécifier les destinataires (à, Cc, Cci) :

Ajoute(MonMessage..Destinataire,sDesti)
Ajoute(MonMessage..Cc,GP_Param_s_SMTPCopyTo)
Ajoute(MonMessage..Cci,GP_Param_s_SMTPCopyTo2)

Ou une pièce jointe (par exemple un fichier PDF) :

monAttache..Nom=fExtraitChemin(sFile,fFichier+fExtension)
monAttache..Contenu=fChargeTexte(sFile)
monAttache..ContentType="application/pdf"
monAttache..ContentDescription="PDF Document"
Ajoute(MonMessage..Attache, monAttache)

Une fois que c’est fait, on peut envoyer…

Envoyer l’e-mail

Notre message est prêt : c’est parti ! Nous allons maintenant l’envoyer et puis fermer la session précédemment ouverte (voir plus haut). Nous allons utiliser la fonction EmailEnvoieMessage(). 2 paramètres doivent être passés en entrée : la structure contenant les infos de la session, et celle contenant les informations du message.

SI PAS EmailEnvoieMessage(MaSession,MonMessage) ALORS
 Erreur(ErreurInfo(errMessage))
SINON
 Utility.displayGreenToast("Email envoyé")
FIN

Ensuite, fermer la session…

EmailFermeSession(MaSession)

Et voilà 😉

[WB21] AWP et contextes

[WB21] AWP et contextes

J’ai récemment eu l’opportunité de suivre deux formations pour apprendre à utiliser Webdev. Il s’agit du logiciel développé par PC SOFT qui permet de réaliser des sites internet assez rapidement.

Lorsqu’on crée un site dynamique, le moteur WD210AWP.EXE va automatiquement instancier les contextes et la session de l’utilisateur. L’avantage est que toutes les variables et les connexions à la base de données sont persistantes tout au long de la session. Cependant, si la session est fermée, il faut impérativement en relancer une autre à l’aide de la fonction SiteDynamiqueAffiche() ou re-valider l’URL dans la barre d’adresses, sinon une erreur s’affiche lors des appels de page. Un comportement que l’on peut trouver rébarbatif.

Dans ce mode, il n’est pas possible de « structurer » le site ; toutes les pages sont appelées comme si elles se trouvaient à la racine du répertoire virtuel. De plus le référencement est impossible. On l’utilisera plus pour réaliser une application de type intranet.

L’autre solution consiste à utiliser les pages AWP. Ce sont des pages totalement indépendantes, un peu à l’image des pages PHP au final, et les contextes doivent être instanciés par le développeur. Cela nécessite bien sûr plus de manipulations mais cela entraine une grande liberté dans la gestion des sessions et des connexions utilisateur. Par exemple, cela vous permet de gérer votre espace membres sans avoir à utiliser le Groupware Utilisateur Intégré.

Les autres avantages sont les suivants :

  • La page existe physiquement en tant que fichier, pas de timeout lors de son appel.
  • Il n’y a pas de ressources consommée en continu sur le serveur.
  • Le référencement est possible.
  • Une page peut être mise à jour sans que tout le site ne doive être déployé à nouveau.

Bien sûr, comme ces pages ne permettent pas d’avoir une connexion permanente à la base de données, le positionnement dans les tables est perdu lors des appels suivants.

Variables globales

On va déclarer dans l’Initialisation du projet, des variables globales qui seront réutilisées partout sur notre site (par exemple, un identifiant de session que l’on générera, l’ID de l’utilisateur connecté, etc).

Configuration du contexte

Il faut alors demander à configurer le contexte ; cela se fait dans l’Initialisation du projet à nouveau (après connexion au site => permet d’éviter les soucis rencontrés avec les sessions prélancées).

ConfigureContexteAWP(ctxDisque,ctxIDCookieURL)

On demande à Webdev d’utiliser le contexte sur disque plutôt que par cookie. On va alors spécifier qu’on veut transmettre l’identifiant prioritairement par l’intermédiaire du cookie puis de l’URL. Nous n’utiliserons cependant pas cet identifiant.On va ensuite indiquer à Webdev les variables à déclarer dans le contexte pour qu’elles soient réutilisées à chaque fois lors d’un changement de page. La fonction DéclareContexteAWP(var) doit être utilisée dans l’Initialisation du projet s’il s’agit de variables globales au projet, ou dans les pages s’il s’agit de variables globales aux pages. En règle général il faut donc l’utiliser là où on déclare et instance ces variables.

DéclareContexteAWP(gsSessionId)
DéclareContexteAWP(gsUsername)
DéclareContexteAWP(gsKey)
DéclareContexteAWP(gsIP)
DéclareContexteAWP(gdhSessionDt)

Après, toujours dans l’initialisation, on peut imaginer la connexion à notre base de données.

// Initialiser la connexion.
gcMaConnexion..Provider  = hAccèsHFClientServeur
gcMaConnexion..BaseDeDonnées  = "MonSiteAwp"
gcMaConnexion..Utilisateur  = "admin"
gcMaConnexion..MotDePasse  = "password"
gcMaConnexion..Serveur   = "MONPC"
SI HOuvreConnexion(gcMaConnexion) ALORS
  gbDbConn = True
  SI HChangeConnexion("*",gcMaConnexion) ALORS
    gproc_initSession()
  SINON
    ...
  FIN
FIN

Une fois la connexion établie on a donc demandé à ouvrir la session. Dans cette fonction nous allons regarder à chaque fois si l’identifiant de session personnalisé n’est pas déjà défini (gsSessionId). Si celui-ci est vide, le contexte a été détruit (session fermée), sinon la session est considérée comme toujours active.

  • Si la variable est vide, on recrée tout simplement un identifiant de session et on écrit dans la base de données. Celui-ci doit bien sûr être unique.
  • Si ce n’est pas vide, on vérifie les variables utiles (IP, utilisateur, date de création) et on réagit en conséquence – soit suppression dans la base de données puis recréation, soit modification de la date de dernière action.

Les variables pour lesquelles on a déclaré le contexte peuvent être utilisées dans toutes les pages.

Quelques notes à propos de Webdev

En mode AWP on s’affranchit du surplus de Javascript dans les menus, dans les liens, ce qui peut assurer une meilleure compatibilité si l’utilisateur désactive l’exécution des scripts dans son navigateur.

Bien que l’outil soit très pratique dans l’ensemble, et que le résultat soit plutôt convaincant, on peut être dubitatif quant au code généré. En effet, le moteur crée de nombreuses tables en guise de layout, ce qui n’est pas recommandé en HTML5. On retrouve également dans ces éléments « table » de nombreux attributs « style » (notamment avec la hauteur définie à 100%). Tout cela fait penser à un code un peu… historique.

Une option dans la description du projet permet le positionnement par balise « div ». Celle-ci ne semble être prise en compte que pour les pages sans zone extensible. Dans mon projet l’activation de cette option n’a eu aucun effet, ce qui signifierait que mon layout actuel ne rentre pas dans les conditions. On pourrait aussi s’interroger sur la mention « déconseillé » placée juste à côté de la case à cocher. On peut supposer que cela entraine des problèmes lors de la disposition des différents éléments.

[WD21] Activation du Dump de débogage

[WD21] Activation du Dump de débogage

Quand WinDev se casse lamentablement la poire en indiquant que l’application a cessé de fonctionner et que Windows recherche une solution, vous avez la possibilité d’activer la génération du « dump de débogage« . Il ne restera alors qu’à essayer de reproduire le bug afin d’envoyer le fichier au support technique.

Ouvrez le menu Aide, ensuite cliquez sur « A propos de WINDEV« .

Tout en maintenant la touche CTRL enfoncée, cliquez sur le logo de WD, qui se trouve juste à droite des informations de version. Une boite de dialogue apparait alors.

Cliquez sur le bouton « Activer pour 10 jours« . Redémarrez ensuite l’EDI. Vous constaterez un changement au niveau des couleurs de l’interface pour vous indiquer que le débogage est actif. Essayez alors de reproduire votre bug ; si WD se plante, un fichier dump est alors généré dans C:\PCSOFTDUMP. Transmettez alors le fichier au support. Pour désactiver le mode de débogage, retournez dans la fenêtre « A propos« , effectuez de nouveau un CTRL+Clic sur le logo, puis choisissez tout simplement « Désactiver ». Relancez à nouveau pour que les changements soient effectifs.

Gardez à l’esprit que, malheureusement, PC SOFT n’interviendra pas si vous utilisez une version antérieure à celle qu’ils proposent en téléchargement / achat. En effet, une fois la nouvelle version sortie, il n’y a (presque) plus la possibilité de demander un patch correctif.Notez enfin que l’astuce fonctionne pour toutes les versions (et les éditeurs), même si la façon d’accéder à la fenêtre « A propos » peut différer.

[WD21] La pré-version en téléchargement

[WD21] La pré-version en téléchargement

Vous pouvez dès à présent télécharger la pré-version de l’AGL Windev, développé par PC SOFT. Il s’agit de la version 21 01F210039d. Si vous possédez déjà vos licences pour exécuter l’environnement, alors vous allez pouvoir découvrir les nombreuses nouveautés présentées au TDF et dans le magazine.

Attention, il ne s’agit pas de la version finale. Certaines fonctionnalités ne sont peut-être pas encore actives et d’autres peuvent tout simplement être instables. Ne migrez donc pas vos applications existantes dans cette version.

Qu’y-a-t-il de nouveau ?

  • Télémétrie : permettez aux applications de collecter et envoyer des données à un serveur pour faciliter le développement. A tout moment vous pourrez savoir quelles sont les fenêtres les plus / moins utilisées, obtenir le détail des erreurs qui se sont produites sur les différents postes, etc.
  • Champ note : si vous utilisiez déjà les notes intégrées à Windows, vous devriez vous habituer à celles de Windev. Rédigez des notes directement depuis les applications. Celles-ci peuvent alors être déplacées et sont également mémorisées et restaurées à chaque lancement du logiciel. Elles sont bien sûr programmables.
  • Amélioration des éditeurs : interface épurée, mémorisation de l’état de l’explorateur de projets, support des hautes résolutions (4K), affichage des raccourcis dans les menus contextuels, recherche avancée en langage (presque) naturel, fenêtre des 7 onglets non modale lors de l’édition d’états, et encore bien d’autres petites nouveautés ici et là.
  • Modification de l’interface utilisateur… par l’utilisateur : cette fonctionnalité permettra aux utilisateurs de modifier la position et la taille des champs à leur guise et ce sans modifier l’agencement initial. Les informations sont mémorisées et l’utilisateur retrouvera sa configuration au prochain lancement de l’application. Et bien sûr, il sera possible à tout moment de revenir à l’interface initialement prévue par le développeur.
  • Modification des fenêtres pendant le débogage : en plein développement et donc en pleine opération « go », vous pourrez modifier l’agencement de vos champs et répercuter cela dans l’éditeur de fenêtres de Windev.
  • Compression de chaines « gzip ».
  • Nouveaux formats d’archivage TAR et GZ.
  • Accès natif à la base de données Hadoop.
  • Authentification Facebook à partir de vos applications mobile.
  • Nouvelles fonctionnalités pour les développements mobile : effet de parallaxe sur les images lors du défilement, développement pour les terminaux tels que les iWatch ou iPhone 6S, support des protocoles FTP/FTPS, support de 3D Touch pour les périphériques Apple compatibles, support de l’écriture sur les cartes SD à partir d’Android, etc.
  • HFSQL : nouvelles fonctions, notamment pour les dates et les heures, ou la conversion, nouveaux types, récupération de l’utilisateur courant (CURRENT_USER), « explain » visuel dans le centre de contrôle du serveur, etc.
  • Responsive Web Design : si vous utilisez Webdev, la conception de vos sites « responsive » sera plus facile. L’agencement d’une page pourra être défini en fonction d’une ou plusieurs résolutions / plateformes afin de faire bénéficier aux internautes d’une expérience de navigation optimale.
  • Universal Windows 10 Apps : développez des applications dites responsive pour un déploiement sur plusieurs types de périphériques Windows 10 (mobile, desktop, etc). Plus d’informations : « A first look at the Windows 10 Universal app platform« .

Vous vous doutez que cette liste est loin d’être complète. Vous pouvez consulter la brochure disponible sur le site de PC SOFT pour obtenir plus d’informations ou tout simplement télécharger cette nouvelle version.

Bon développement à tous.