Présentation


Le projet open-source Betula est un framework multilingue (FR/EN) orienté objet pour les produits PC SOFT (WinDev, WebDev et WinDev Mobile).

Objectif du framework

Le framework est d’abord là pour faciliter la vie du programmeur en ne réinventant pas, à chaque projet, la même roue.  De même, puisque faites une fois pour toute, les fonctions qui s’y trouvent peuvent atteindre un haut degré de complexité tout en restant simple lors de l’appel. L’objectif final est de diviser le temps de développement par 2 et d’augmenter la fiabilité du même facteur tout en offrant des fonctions inédites par la même occasion.

Dès son démarrage, en janvier 2018, il a été pensé pour devenir open-source.  Sachant que plus de 50% des développeurs participent activement à des projets open-source, nous espérons qu’il attirera, autour de lui, une petite communauté de développeurs senior pour qu’il grandisse et devienne une référence. L’open-source est également apprécié par les utilisateurs finaux/les clients puisque ça les assure une pérennité du noyau tout en bénéficiant des nouveautés et corrections.

Structure des classes du framework


Le framework se compose, pour l’instant, d’une petite 30aine de classes, chacune spécialisée. Les héritages sont peu nombreux, ce qui rend la compréhension rapide (un niveau avancé est quand même nécessaire).

Il est accompagné de 11 collections de procédures (une est illustrée ci-dessous), rassemblant 120 fonctions.

Afin d’avoir une compatibilité multi-plateforme, des contraintes liées au WLangage ont imposé au framework quelques tours de passe-passe dans le code. Entre-autres exemples : une classe ne peut hériter que d’une seule autre classe, des syntaxes de déclaration d’objet dynamique sont possibles pour certaines plateformes et pas d’autres, des constantes ne sont pas reconnues partout …

 

 

Concepts de la programmation orientée objet

Le framework est conçu principalement pour être utilisé en programmation orientée objet (POO).  Pour ceux qui veulent commencer ou se perfectionner dans cette voie,

Ce framework permet pour l’instant

de démarre facilement un projet
Dans le code d’initialisation du projet, 1 ligne pour initialiser la gestion des « plantages » et 2 lignes pour instancier la classe principale cApplication et récupérer une erreur le cas échéant.  L’application est alors prête à fonctionner avec le framework.
d'utiliser une syntaxe simplifiée
Les classes présentes dans le framework utilisent des mots simples : Lit, Écrit, Ajoute, Recherche … le contexte de ces méthodes étant déjà donné par le nom de l’objet manipulé. Les outils PC SOFT sont choisis, entre-autre, pour leur syntaxe francophone. Dans le même esprit, toutes les méthodes sont en français pour éviter le « franglais » dans la programmation.
d'accéder aux données via les accès natifs ou l'ODBC
Faites tout d’abord deux classes par table manipulée : une héritée de cEnregistrement pour décrire un enregistrement (et son mapping et/ou ses balises de sérialisation) et une héritée de cSourceDeDonnées pour gérer les résultats multiples (p.e. suite à une requête). La seconde doit évidemment connaître la première puisqu’elle va mettre, en mémoire, un tableau de cet objet cEnregistrement.

Vos classes métier hériteront de ces classes de base dans l’esprit de la programmation 3-tier.

Dans l’application :
Il faut tout d’abord créer la connexion à la base de données. Il suffit ici d’appeler la méthode Connecte de la classe liée à la base de données manipulée (HFSQL local, HFSQL client/serveur, SQLServer, Oracle, SQLite, MySQL, PostgreSQL et LDAP (Active Directory). A noter qu’il n’est pas indispensable d’avoir une analyse dans le projet.

Instanciez ensuite des classes qui vont manipuler vos tables. Vous pouvez ensuite « binder » les classes de type « enregistrement » avec leur fenêtre « formulaire » et les classes de type « source de données » avec leur fenêtre « liste ».

Le framework propose 3 manières d’accéder aux données : soit grâce aux instructions Hxxxxx, soit via des requêtes SQL (entièrement gérées par le framework), soit via l’ODBC (plus besoin d’accès natif avec cette méthode). Un seul paramètre à changer, le framework s’occupe du reste.

d'optimiser les accès réseau/base de données
Toute connexion ouverte sur un serveur, avec les instructions décrites au point précédent, est ouverte une seule fois. Tout le trafic des données passera par le canal ouvert, même si l’on déclare plusieurs fois la même connexion.

Lors de l’instanciation des classes qui accèdent aux données, il y a également des paramètres pour télécharger, ou pas, les mémos au moment de la lecture de l’enregistrement et pour déclarer un répertoire « cache ». Grâce à ce dernier, le framework va utiliser, en priorité, les fichiers locaux dans cEnregistrement, le trafic vers la base de données est donc réduit.

de gérer des 'mémos' en-dehors des tables
Quand on manipule des mémos nombreux et/ou de grande taille (ex : des photos), on peut avoir envie de les mettre hors de la base de données, tout simplement pour réduire les sauvegardes ou accélérer la récupération des données. Le framework permet ce paramétrage, en toute transparence, sur un répertoire local/réseau ou un serveur FTP.
de gérer les valeurs par défaut
Que ce soit dans les paramètres (ex : fichier ini) ou dans les classes cEnregistrement, des valeurs par défaut peuvent être facilement ajoutées.

Celles pour les paramètres de l’application peuvent ainsi « initialiser » un fichier INI créé après une installation. Si certains mots clés sont respectés, les connexions aux données est également facilité.  La valeurs par défaut dans les cEnregistrement sont utiles pour être indépendant des valeurs par défaut décrites dans la base de données et/ou quand aucune analyse n’est dans le projet. Une méthode RazDéfaut fait ainsi son apparition.

de gérer des logs et la trace
Les logs et les traces se ressemblent.

Les logs servent à historiser des passages, à des endroits précis, dans le logiciel ou a informer l’utilisateur et/ou le développeur de problèmes. Les logs se gèrent sur 4 niveaux : information, avertissement, erreur et aussi crash. Un 5eme niveau interne permet d’identifier les interactions de l’utilisateur avec les boites de dialogue (en loguant le message et la réponse de l’utilisateur) et les demandes d’impressions. Les logs s’enregistrent dans des fichiers texte et/ou une base de données et/ou sont envoyés par courriel. L’appel aux fonctions de log doit être faits par le programmeur.

La trace, si elle est active, historise systématiquement tous les appels aux fonctions du framework avec leurs paramètres. On peut facilement suivre ce qui se passe à l’intérieur puisque chaque écriture de trace s’accompagne du nom de l’utilisateur, de la date et heure et de la pile d’appels à la fonction tracée. C’est très utile pour le programmeur.

Dans les deux cas, un mécanisme existe pour protéger les mots de passe.

de modifier/corriger des fonctions standard du WLangage
Certaines fonctions du WLangage ont des comportements différents selon la plateforme sur laquelle elles sont exécutées. Pour éviter des erreurs de compilation dans le framework, certaines fonctions sont mises dans du code-cible.

D’autres fonctions ne réagissent pas « comme attendu » à tel point qu’un contact est fait avec le support technique de PCSOFT. Mais force est de constater qu’il n’y a aucune garantie sur le délai de réponse de la part de l’éditeur. Voila pourquoi certains fonctions ont été refaites. Certes, elles sont plus lentes mais surtout plus efficaces. Aussi, si vous souhaitez les adapter, le code est là ! D’autres, qu’on peut considérer comme « manquantes », ont été ajoutées (exemples : DateHeureSys() n’existe pas pour Windows Mobile, SansEspace ne permet pas d’options en Mobile, Java et PHP).

d'avoir accès à des constantes (API, couleurs web, ...)
Certaines classes ont besoin de constantes pour fonctionner, d’autres sont ajoutées pour le confort. Ce sont donc des centaines de constantes qui sont accessibles sans devoir instancier les classes correspondantes.

Contexte légal

La licence choisie pour Betula est LGPL (Licence publique générale GNU amoindrie) qui n’oblige pas à ce que le logiciel qui utilisera ce framework soit aussi open-source.  De ce fait, Betula peut être intégré, sans contrainte, dans un produit commercial ou un logiciel interne d’entreprise.

Garantie

Malgré toute l’expérience cumulée de l’équipe originale et de tous les autres contributeurs, malgré l’attention à coder et à tester correctement, nous savons tous que des erreurs peuvent se dissimuler dans un tel projet.  De même, nous ne sommes pas à l’abri d’un problème dans les éditeurs eux-même.

De ce fait, tant l’équipe originale que tous les contributeurs à ce projet déclinent toute responsabilité sur le fonctionnement du framework quelque soit la situation dans laquelle il est utilisé.

En pratique

Betula est livré complètement anonymisé (le seul « programmeur » visible est Betula) et en Unicode. Tous les projets qui l’utilisent doivent donc être en Unicode.

Tous les messages et libellés sont traduits en 4 langues : Francais (code Nation 5), Anglais (code Nation 3), Canadien Français (code Nation 9) et Américain (code Nation 2).

Code source

Pour chaque release, l’ensemble des sources sera disponible sous format ZIP (voir ci-dessous).

Composant

Pour ceux qui ne veulent pas « mettre les mains dans le cambouis » ou qui veulent « figer » le framework pour assurer sa stabilité, un composant externe sera proposé pour chaque release de Betula (voir ci-dessous).  Pour rappel, les composants externe sont utilisables en WinDev et WebDev, pas en WinDev mobile.

Ce framework se comportera alors comme une « boite noire ». Raison supplémentaire de parfaitement tester et documenter toutes les fonctions (voir ci-dessous).

Version : celle de PCSOFT – 1

Betula a été développé, initialement, en WD23 afin de profiter des dernières évolutions de l’outil, notamment pour la POO, mais aussi dans un esprit d’aller « vers l’avant ».

Chaque programmeur est libre de passer le framework à une autre version Wx. Par contre, l’équipe originale ne publiera pas de version majeure du framework avant le 15 octobre. En effet, la version suivante des éditeurs est habituellement annoncée en novembre, ce qui implique qu’il n’y a plus de mise-à-jour pour les éditeurs courants après mi-octobre. L’éditeur courant n’évoluant plus après cette date et est considéré au « maximum de sa stabilité », le framework sera alors testé et compilé avec cette version de l’éditeur.

Betula va donc suivre, pour la version majeure du framework, la fréquence de mise à jour de PCSOFT avec un décalage d’un an : Betula 23 est sorti en novembre 2018, Betula 24 sortira après le 15 oct 2019, Betula 25 sortira après le 15 oct 2020, etc …

  Cliquez ici pour téléchargez l’ensemble des sources ou le composant
  Parcourez le menu « Framework Betula » / « Documentation » pour en savoir plus
  Cliquez ici pour télécharger un exemple d’utilisation du framework dans un modèle Commande / détail / client / produit.
Un forum de discussion est à votre disposition pour poser des questions, proposer des idées, discuter de concepts, suggérer des modifications et corrections …
  Pour ceux qui veulent participer, merci de respecter quelques règles et recommandations pour faciliter l’intégration de votre code dans la version de référence. Cette page contient aussi quelques pistes d’évolution est une section du forum vous permet d’en proposer d’autres.

Statut du framework

Le framework, qui fait presque 20.000 lignes de code, est encore en cours de développement et de debugging. De même, le nom Betula n’est pas définitif.

Le framework est présentement en cours de documentation et est déjà utilisé dans plusieurs projets, permettant de tester ses limites :

  • Logiciels divers de gestion (Windows/service Windows/webservice, SQLServer via Accès Natif,active directory, en production)
  • Logiciel de gestion d’employés (Windows, SQLServer via ODBC, en production)
  • Logiciel de gestion de flux XML (Windows, SQLServer via Accès natif, en développement)
  • Logiciel de gestion clientèle (Java/MariaDB/mémo par ftp) qui deviendra par la suite un exemple open-source de l’utilisation du framework (en développement)
  • Logiciel de gestion de stock (Android/SQLite) utilisant un webservice (service Windows, HyperFile+SQLServer, développé autour de la classe cHTTPServer du framework, en test)