Dans l’optique d’aller toujours plus loin dans l’utilisation de standard établis, les éléments ci-dessous ont été ajoutés à Betula. Certaines données sont issues de la norme ISO et récupérées via Wikipedia, d’autres font appel à des micro-services. En accord avec le principe de Betula, l’accès à ces données se fait via des classes.
Pour rappel, l’utilisation de l’Unicode est omniprésente. En effet, toutes les données sont livrées, au minimum, en français et en anglais, avec parfois des synonymes ou leur traduction dans des langues régionales (ceci pour faciliter une recherche et trouver le code ISO correspondant). Sont aussi présents les sigles des devises (la plupart disponible uniquement à travers Unicode).
Unités
Ce sont 16 unités de mesure qui sont déjà présentes depuis les premières versions de Betula dans la collection de procédure COL_Conversion. Elle contiennent évidemment les unités du Système International (SI) qui sont issues de la norme ISO 80000-1:2009.
Jours fériés
A nouveau, le WLangage propose quelques fonctions pour la gestion des jours fériés.
Betula étend le concept aux « jours spéciaux » (pas uniquement fériés) via la procédure COL_Données.JoursSpéciauxCharge(). Ces jours ne sont pas décrits comme norme ISO évidemment mais ils peuvent être filtrés selon les codes 3166-1 des pays et des départements/provinces (non livrés ici).
Le premier paramètre est le pays (code ISO 3, voir ci-dessus) et la fonction couvre, pour l’instant, 4 pays francophones : Belgique (22), Canada (38), France (25) et Suisse (36). Ceci avec les particularités par région/province le cas échéant.
L’on peut ajouter facilement une nouvelle date grâce à la fonction JourSpécialAjoute() qui a besoin du code ISO du pays et du département/province concerné.
Parfois, ces dates sont relatives à d’autres (ex : Pâques) ou sont dans la Nième semaine d’un mois. Pour cela, une fonction DateRelative() a été ajoutée dans COL_Conversion. On peut, avec ça, aller trouver, par exemple, le mardi avant le 3ième jeudi du mois. Simple et puissant.
Pays
La liste des pays est déjà présente dans le WLangage (DonneListePays). Elle donne les éléments essentiels pour une utilisation de base dans une application.
Pour récupérer plus de détails sur chaque pays (39 informations y compris l’image du drapeau) selon la norme ISO 3166-1, il faut utiliser les classes cePays et csdPays (téléchargeables ci-dessous), qui récupèrent les données d’un micro-service gratuit : https://restcountries.com/#api-endpoints-v3 (préféré à celle d’APILayer car plus complète et toujours gratuite).
Les 250 pays et territoires sont mis dans un tableau global csdPays.mg_tabPays.
Vous aurez ainsi votre liste de pays toujours à jour, quelque soit la version de WinDev.
Exemple de code :
clPays est un csdPays(*,fRepExe()+["\"]+"flags",16) SI clPays.Liste(ceRestCountriesV3_com.CodeISO3+ceRestCountriesV3_com.Nom+ceRestCountriesV3_com.Noms+ceRestCountriesV3_com.Drapeau,ceRestCountriesV3_com.Europe,*,csdRestCountriesV3_com.NomCommunFR_ASC) ALORS POUR TOUT pclPays DE clPays.m_tabPays ListeAjoute(COMBO_Pays1,gImage(pclPays.p_sDrapeau)+" "+pclPays.m_sNomCommunFR+gLien(pclPays.m_sCodeISO3)) FIN SINON Erreur(clPays.p_sErreur) FIN
Continents et régions
Les pays ci-dessus sont liés à leur continent respectif (le membre cePays.m_sContinent). Du fait de leur faible nombre, ces continents sont ajoutés « en dur » dans la méthode csdContinent.Liste() qui a comme paramètre le découpage à prendre en compte (entre 3 et 7 continents). Les continents sont alors accessibles dans le membre m_tabContinent.
Les informations contenues dans cePays classe aussi les pays dans leur « subregion » (nommée Région dans cePays), comme par exemple « Europe de l’Ouest ». Ces 22 régions sont disponibles dans le membre m_tabRégions après avoir appelé la méthode csdContinentRégion.Liste().
Langues et dialectes
Les données des pays contiennent les codes ISO_639-1 des langues utilisées dans chacun des pays mais seul le nom anglais de la langue est récupéré.
C’est pourquoi une liste des langues, avec leur traduction en français et quelques autres informations, ont été rassemblés dans un fichier Excel. Ce sont donc 180 langues (dont quelques langues anciennes et 460 dialectes nommés en anglais uniquement) qui sont accessibles dans le membre csdLangue.mg_tabLangues après avoir exécuté la méthode csdLangue.Liste().
Les langues, elles-mêmes, sont classées selon 26 familles disponibles dans la classe csdLangueFamille, membre global mg_tabFamilles.
Exemple de code :
clFichier est un cBaseDeDonnéesExcel nIndiceConnexion est un entier = clFichier.Connecte("C:\Temp\langues_V1.xlsx") SI nIndiceConnexion>0 ALORS clLangues est un csdLangue(nIndiceConnexion) clLangues.m_bNePasLirePremierEnreg=Vrai SI clLangues.Liste() ALORS POUR TOUT pclLangue DE csdLangue.mg_tabLangues SI PAS pclLangue.m_bEstDialecte _ET_ PAS pclLangue.m_bEstLangueAncienne ALORS ListeAjoute(COMBO_Langue,pclLangue.m_sCode3+gCoord(35,0)+pclLangue.p_sNom) FIN SINON Erreur(clFichier.p_sErreurTout) FIN clFichier.Déconnecte() SINON Erreur(clFichier.p_sErreurTout) FIN
Devises
Contrairement aux pays, WinDev ne donne pas accès à une liste de devises (à part en faisant soi-même une boucle et utiliser la fonction eNomDevise mais cela ne couvre pas toutes les devises mondiales).
Ici, 156 devises sont également chargées depuis un fichier Excel grâce à la méthode . Ce fichier contient beaucoup plus d’informations que ce que WinDev pourrait fournir (ex : numéro, code ISO 4217, sigle, nom au singulier ou au pluriel, …).
Les codes ISO des devises font le lien avec le membre cePays.m_taDevises. Attention, les devises liés aux « fonds », aux crypto-monnaies ou aux métaux en sont exclus dans cette version 1.
La méthode ceDevise.Format permet de formater une variable monétaire en utilisant le sigle de la devise choisie et son nombre de décimales.
En utilisant la classe cAPILayer_currency, vous avez aussi accès aux taux de change en temps réel ou dans le passé. Une inscription gratuite ou payante est nécessaire sur le site https://apilayer.com/
Exemple de code :
clFichier est un cBaseDeDonnéesExcel nIndiceConnexion est un entier = clFichier.Connecte("C:\Temp\devises_V1.xlsx") SI nIndiceConnexion>0 ALORS clDevises est un csdDevise(nIndiceConnexion) clDevises.m_bNePasLirePremierEnreg=Vrai SI clDevises.Liste() ALORS POUR TOUT pclDevise DE csdDevise.mg_tabDevises ListeAjoute(COMBO_Devise,pclDevise.m_sCode+gCoord(35,0)+pclDevise.p_sNomComplet+" ("+pclDevise.p_sSigleDeviseInternational+")") FIN SINON Erreur(clFichier.p_sErreurTout) FIN clFichier.Déconnecte() SINON Erreur(clFichier.p_sErreurTout) FIN
Proposées auparavant comme un « plug-in », ces classes sont maintenant intégrées à Betula depuis la version 0.40.