Table des matières

Normes de développement Gestan

Normaliser, c'est empiéter sur la créativité des auteurs, mais au plan de l'UI, cela permet de ne pas déconcerter l'utilisateurs, et au plan du code, cela permet à plusieurs développeurs de travailler en commun plus facilement.

Aucune norme ne saurait prétendre à un idéal, mais seulement un choix subjectif parmi tous les choix possibles.

Elles ne sont pas strictement obligatoires, mais il est demandé de les respecter autant que possible.

Normes communes

Gabarit

Vous trouverez ces éléments sur la page ressources.

La police des menus est Segoe UI, de couleur gris 546368, de couleur bleu clair au survol E8F0FE

Ecrans

Table standard

Le bouton Fermer est toujours en bas à droite.

Fiche standard

Le bouton Annuler est en bas de la colonne des boutons. Les boutons Valider et Annuler peuvent être à même hauteur en bas à droite. Dans ce cas, Annuler est à droite de Valider.

Traductions

Gestan est actuellement traduit en espagnol (langue 1) et en anglais (langue 2) : il faut intégrer ces deux langues dans les langues du projet.

Pour les libellés devant être traduits, il faut générer la pré-traduction avec un Ctrl+T sur chaque libellé concerné.

Pour faciliter la traduction, tous les libellés composés dynamiquement doivent utiliser la fonction ChaineConstruit, par exemple :

// A ne pas faire
Info("Le contact " + CONTACT.NOMFAMILLE + " est inconnu.")
// A faire
Info(ChaineConstruit("Le contact %1 est inconnu.", CONTACT.NOMFAMILLE))

Fichiers

Tous les fichiers doivent posséder :

Conventions de nommage

La charte de programmation Windev nous paraît ajouter un alourdissement non indispensable. Des conventions de nommage plus légères sont suffisantes, voir ci-dessous.

Fichiers

Rubriques des fichiers

Variables

Écrans

Images

Dans la mesure du possible, n'utilisez que les images présentes dans le set d'icônes de Gestan.

Si vous utilisez une image propre à votre extension, nommez-la selon cette convention : [extension]_nomimage_[couleur]_[taille]_[nb états].png, avec [extension]=préfixe de votre extension, [couleur]=couleur de la variante de couleur éventuelle. Par exemple z27_thunder_64_1.png, ou z27_bullet_red_64_1.png. L'usage du préfixe évite que votre image soit remplacée par une image de Gestan core.

Format des zones numériques

Zones représentant des montants monétaires

Le nombre de décimales des montants monétaires est paramétrable. Pour prendre ce paramètre en compte et mettre les montants au bon format, utilisez la fonction gf_Renvoyer_MasqueNum().

Par exemple, dans le code d'initialisation de l'écran ou de l'état :

MTTHT_Crédit..MasqueSaisie	= gf_Renvoyer_MasqueNum()
MTTHT_Débit..MasqueSaisie	= MTTHT_Crédit..MasqueSaisie

Pour le mode test, vous pouvez faire :

MTTHT_Crédit..MasqueSaisie	= EnModeTest() ? "999 999,99" SINON gf_Renvoyer_MasqueNum()
MTTHT_Débit..MasqueSaisie	= MTTHT_Crédit..MasqueSaisie

Le nombre de décimales des prix d'achat reste libre (notamment pour tenir compte des prix d'achats au mille d'éléments devant être revendus).

Zones représentant des quantités de produit

Le nombre de décimales des quantités de produit est paramétrable dans Gestan. Pour prendre ce paramètre en compte et mettre les quantités de produit au bon format, utilisez la fonction gf_Renvoyer_MasqueNum()avec le paramètre “QTPROD”.

Par exemple :

QTE_PRODUIT..MasqueSaisie	= gf_Renvoyer_MasqueNum("QTPROD")

Normes de développement pour les programmes

Commentaires

Commentez vos programmes !

Une proportion de 20% de commentaire par rapport aux lignes de code est un minimum.

N'écrivez pas pour ne rien dire, comme par exemple :

// Fermeture de l'écran
Ferme()

mais écrivez pour expliquer ce que fait votre programme et pourquoi.

Fonctions normalisées :

Fonction de gestion des erreurs, à mettre dans le code d'initialisation de la fenêtre.

A noter que la fonction gf_InfoErreur est utilisable dans beaucoup de cas d'erreurs. Le premier paramètre est le type d'erreur : c'est une variable globale commençant par MSG_

// Gestion des erreurs d'accès à la base de données
SI PAS EnModeTest() ALORS
	QUAND EXCEPTION
		gf_InfoErreur(MSG_ERRINATTENDUE,2,ExceptionInfo(errMessage))
		ExceptionActive()
		RepriseSaisie()
	FIN
FIN

Coloration des zones de l'écran

A mettre dans l'init

gf_Coloriser()

** Alimentation de la zone “timestamp”**

A mettre juste après le FichierVersEcran() qui est habituellement en fin d'initialisation de la fiche. Le libellé TimeStamp doit s'appeler lib_DateHeure.

lib_DateHeure = gf_Alimenter_DateHeure("JRFERIE")

Fonction de contrôle de lecture : gf_InfoPasTrouve. Cette fonction affiche un message standard pour enregistrement non trouvé.

SI PAS HLitRecherche(CONTACT,IDCONTACT,VALKLE) ALORS gf_InfoPasTrouve("CONTACT",VALKLE);RETOUR

Fonction de suppression d'enregistrement :

Ici, un exemple de suppression dans la table des absences.

SI TableSelect(tbl_ABSENCE)=-1 ALORS RETOUR
// Contrôles avant validation (éventuellement)
SI ABSENCE.IVALIDE ALORS Info("Cette absence est validée, suppression non autorisée.");RETOUR

SI PAS gf_Info_Erreur(MSG_SUPPRIMER,3) ALORS RETOUR	
TableSupprime(tbl_ABSENCE)
TableAffiche(tbl_ABSENCE, taCourantPremier)

Fonction d'exécution d'un traitement batch : gf_Info_Traitement. Cette fonction affiche un message standard à la fin d'une exécution, par exemple la mise à jour d'un fichier. Par exemple :

gf_Info_Traitement(nbOK,"M",nbKO,nbParcours,"Libellé complémentaire éventuel")

affichera : “Opération terminée OK, 10 enregistrements parcourus, 7 enregistrement modifiés, 0 erreurs détectées, Libellé complémentaire éventuel.”

Aide de vos programmes

La présence d'une documentation est obligatoire. Elle doit être disponible dans les trois langues, et accessible via un bouton de type F1, avec le code suivant :

gf_Aide("https://manuel.gestan.fr/doku.php?id=fr:wiki:referentiel:joursferies")

Ce code va ouvrir la page d'aide dans la bonne langue (fr, es, ou en), en fonction de la lange de l'interface.

Normes de développement pour les états

Il faut activer les masques d'affichage des monétaires et des quantités de produit, en utilisant les fonctions ad hoc, comme par exemple, dans la fonction d'initialisation de l'état :

MONTANT_1..MasqueSaisie	= gf_Renvoyer_MasqueNum()
MONTANT_2..MasqueSaisie	= MONTANT_1..MasqueSaisie

Vous pouvez mettre dans la fonction d'initialisation de l'état les lignes suivantes :

// Initialisations de l'état
HLitPremier(PARAMAPPLI,RAISON_SOCIALE)
IMG_LOGO = PARAMAPPLI.LOGO_R
LIB_BASETAT = PARAMAPPLI.LIB_BAS_ETAT
GP_ENTETE..CouleurFond = PARAMAPPLI.CL_FONDCOL
LIB_IDETAT=ExtraitChaîne(MonEtat..Nom,2,"_")+" - "+DateVersChaîne(DateSys(),"JJ/MM/AA")+" "+HeureVersChaîne(HeureSys(),"HH:MM")+" - "+gCdUser




ℹ️ Autres articles “Développement Windev pour Gestan”