22 décembre 2006

Fonctions WLangage dans le code SQL, mais également procédures stockées...

L'appel d'une fonction du WLangage dans une requête SQL est permis, mais bien évidement il est possible d'appeler une procédure stockée sur le serveur avec la même méthode.

La méthode est on ne peut plus simple :
- dans l'analyse, créer une collection de procédures, puis une fonction par le clic droit dans le volet,
- dans un traitement, appeler la fonction "HMiseAJourCollection" qui permet de copier la collection de procédures, sur le serveur.

A ce stade, il est possible d'insérer l'appel des procédures de la collection, dans les requetes SQL lancées. Exemple avec le même modèle de traitement que dans le précédent billet :

sNomFichierTXT est une chaîne = "c:\temp\commande.txt"
sListeCommande est une chaîne
sCodeSQL est une chaîne
sdReq est une Source de Données

sCodeSQL = [
SELECT ProcServeur(DateCommande) as DateCommandeformatée,
NumCommande,
TotalHT
FROM COMMANDE
]

HExécuteRequêteSQL(sdReq, sCodeSQL)

POUR TOUT sdReq
sListeCommande += [RC]+HRécupèreEnregistrement(sdReq,TAB)
FIN

fSauveTexte(sNomFichierTXT, sListeCommande)
LanceAppliAssociée(sNomFichierTXT)

La procédure "ProcServeur" aura un code WLangage qui pourra traiter la date reçue en paramètre, pour la formater différemment par exemple, ou pour la modifier en fonction de données, requêtes de la base.

Attention, dans la version en cours de WINDEV 11 je n'ai pu appeler la procédure que par la fonction "HExecuteRequeteSQL". Sauf mauvaise manipulation de ma part, l'éditeur de requêtes n'a pas encore l'air adapté à l'appel des procédures stockées.

20 décembre 2006

Fonctions Wlangage dans les requêtes Hyper File avec l'opérateur "WL." (WINDEV 11)

Le moteur Hyper File Client/Serveur propose les procédures stockées, et de ce fait permet l'appel de fonctions du Wlangage, directement dans le code SQL des requêtes !

J'ai fait quelques tests de procédures stockées, et au passage j'ai utilisé cette possibilité. Cela va simplifier bien des traitements nécessitant le formatage du résultat d'une requête, en vue d'une exportation par exemple.

Un cas typique, je dois générer un fichier texte contenant des dates / numéros / montants de commandes. La date doit être lisible, et non pas au format "AAAAMMJJ" utilisé pour le stockage et l'affectation des champs ou colonnes de type date des interfaces.

Le résultat peut être obtenu immédiatement dans la requête, ce qui évite un traitement des données lors du parcours qui suit la requête.

Voici un exemple utilisant cette possibilité (il s'agit du code de l'image de ce billet) :

sNomFichierTXT est une chaîne = "c:\temp\commande.txt"
sListeCommande est une chaîne
sCodeSQL est une chaîne
sdReq est une Source de Données

sCodeSQL = [
SELECT WL.DateVersChaine(DateCommande) as DateCommandeformatée,
NumCommande,
TotalHT
FROM COMMANDE
]

HExécuteRequêteSQL(sdReq, sCodeSQL)

POUR TOUT sdReq
sListeCommande += [RC]+HRécupèreEnregistrement(sdReq,TAB)
FIN

fSauveTexte(sNomFichierTXT, sListeCommande)
LanceAppliAssociée(sNomFichierTXT)
A noter qu'il est possible de donner un formatage spécifique à la date avec le code SQL suivant :
sCodeSQL = [
SELECT WL.DateVersChaine(DateCommande,'JJJ JJ MMM AAAA') as DateCommandeformatée,
NumCommande,
TotalHT
FROM COMMANDE
]
Le fichier généré aura les dates dans un format "Ven. 28 Jan. 2000" par exemple.

Ndlr : la requête est volontairement simpliste pour l'illustration, elle permet dans un cas réel une sélection de données. Ce qui est très intéressant, c'est le code d'exportation qui est simplifié à l'extrême, et qui dit code simple, dit code plus rapide avec un risque d'erreur de programmation moindre !

19 décembre 2006

Nouveau site WINDEV : Ed4u

Apparition d'un nouveau site de ressources WINDEV : Ed4u. Peu d'informations dans l'immédiat, le site basé sur un CMS vient d'être publié ces derniers jours c'est donc un peu tôt. Les auteurs semblent cependant très motivés, je leur souhaite de réussir dans leur projet !

15 décembre 2006

Exécuter une action lors du tri d'une colonne de table

Il est fréquent de devoir effectuer une action lorsque l'utilisateur trie les données d'une table. Une capture d'événement était requise jusqu'à la version 10, ce sujet a été fréquement abordé sur le forum. Le code nécessaire se trouve ci-dessous.

Il est cependant rendu obsolète, puisque WINDEV 11 permet d'ajouter aux colonnes un code "à chaque tri" !







//1. Code d'initialisation de la table :
Evenement("TRISPECIAL","TABLE1", 1529)

//2. Procédure TRISPECIAL
Procédure TRISPECIAL()
// _eve.wParam contient le numéro de la colonne
Trace("On a cliqué sur l'entête de la colonne n° "+_eve.wParam )
SI _eve.wParam = 2 ALORS
//On veut que la procédure TRISPECIAL permet d'obtenir un tri sur
//la colonne COL2 puis sur la colonne COL1:

// Annuler le tri automatique
_eve.retour = 0
tabletri("COL2"+TAB+"COL1")
FIN
Ndlr : ce code a pour origine un message du support.

Concaténation optionnelle avec WINDEV 11

Combien de bogues ont été générés par un caractère en trop en début ou fin de chaîne ? Ou un "\" manquant dans un chemin d'accès, ou un "/" dans une URL ?

Le cas de figure est très fréquent, on doit fournir une liste construire dans une itération, avec un séparateur bien déterminé. Le code à la forme suivante :

POUR TOUT Client AVEC CodePostal="26110"
sListeClient += Client.Nom+", "
FIN

Et il faut ensuite supprimer le ", " en trop en fin de chaîne s'il y a eu au moins un client. Ou alors faire une condition dans la boucle pour gérer le séparateur ... Bref plusieurs méthodes que l'on panache, ce qui augmente encore le risque d'erreur.

Du coup la fonctionnalité "concaténation optionnelle" avait attiré mon attention dans la brochure, je l'ai mise en ouvre et immédiatement adoptée !
Voici un exemple (j'en proposerai un plus parlant prochainement en situation) :
POUR TOUT Client AVEC CodePostal="26110"
sListeClient += [", "] + Client.Nom
FIN

Composant, partage par le GDS

Essai suivant sur la version 11 de WINDEV, l’intégration des composants dans le GDS.

Je ne pense pas qu'il soit nécessaire de rappeler l'intérêt des composants, salutaires dans les projets pour partager des fonctionnalités entre les différents modules, et surtout pour sécuriser les accès au système d'information.

De la même manière, le GDS est également devenu totalement incontournable pour gérer les modifications des projets, et leur partage entre les développeurs.

Mais la gestion des composants n’étant pas intégrée au GDS en version 10, des gymnastiques étaient souvent nécessaires pour assurer la mise à jour des composants d’un projet, et il ne fallait pas non plus oublier de les transmettre d’un développeur à l’autre, ou d’un site à un autre suivant le cas. Ayant plusieurs fois mentionné ces difficultés à PC SOFT, j’ai prioritairement regardé les possibilités du GDS en matière de gestion des composants. Nouvelle bonne surprise, puisque le GDS a inclus le nécessaire.

La création d’un composant tout d’abord permet dans son assistant de placer le composant dans l’arborescence du GDS, en plus du centre de réutiliabilité (ce dernier n’était pas facilement partageable entre sites distants comme l’est le GDS).

Ensuite l’intégration d’un composant dans le projet propose également la récupération d’un composant, depuis le GDS. La mise en place des ressources partagées va être facilitée. Par contre je ne crois pas avoir vu d’option permettant d’inclure les composants utilitaires fournis par PC SOFT dans le GDS. Il me semble que l’installation de WINDEV pourrait proposer d’ajouter ses composants dans la base GDS, la réutilisation sera encore accrue. Peut être ma première suggestion pour WINDEV 11 !

Le plus bel effet, sans compétence infographique, c'est WINDEV 11

Malgré la "suractivité" qu’entraîne la période de fin d'année, je débute la découverte de WINDEV 11 installé il y a quelques minutes sur mon portable. Je manque cruellement de temps ces jours-ci, mais je ne peux pas résister à quelques essais !

Le premier lancement est une surprise visuelle, l'interface est profondément améliorée en terme d'esthétisme : effets de transparence, animation des boutons, halos, alors que mon poste est équipé de Windows XP SP2 et non pas de Vista !

Comme je suis d'un naturel envieux, je me suis en priorité demandé s'il serait aisé de reproduire ces effets dans des modules existants.

Pour test, j'ai utilisé un programme permettant aux enfants de réviser leur vocabulaire, en répondant aux interrogations de l'agent Microsoft !

Et bien plus que jamais, le savoir faire PC SOFT est bien présent dans cette version, puisque avec mes piètres compétences graphiques, sans programmation, "Appliquer un gabarit" et quelques clics m'ont permis d'obtenir une interface "Vista" telle que la propose WINDEV 11, toujours sur mon système XP !

14 décembre 2006

IE7 et le volet "Quick tab" ou "Aperçu mosaique"

La nouvelle version du navigateur Internet Explorer propose une fonctionnalité bien intéressante, avec l'ouverture des sites dans des volets. Cette possibilité n'a rien de révolutionnaire, Firefox la propose depuis longtemps, et la navigation par des volets dans une application est chose commune. Par contre, dès qu'au moins deux volets sont ouverts, un volet "Quick tab", ou "Aperçu mosaïque" est ajouté. Là c'est une révolution dans la présentation des données pour l'utilisateur, en un coup d'œil il repère le volet sur lequel il souhaite retourner. Et à tout moment le raccourci Ctrl+Q permet de revenir à la mosaïque.

Au quotidien, cette méthode de présentation peut faire gagner un temps précieux en Alt+tab, "non c'est pas celui là", Alt+tab, "non c'est pas celui là" ...

Pour les applications, cette possibilité sera peut être proposée par WINDEV pour les champs onglets ou boite à outils ! C'est en tout cas une suggestion que je vais m'empresser de faire à PC SOFT !

La copie d'écran ci-dessus montre IE7 en position de recherche d'informations WINDEV. Mais j'en ai également un ouvert avec des volets remplis de cadeaux, Noël oblige !

Un bémol tout de même dans la fonctionnalité, elle est gourmande en mémoire. 100 Mo de RAM sont rapidement nécessaires pour ouvrir plusieurs volets.

05 décembre 2006

Fonctionnalités d'exportation (RTF, XLS, RTF ...) depuis l'aperçu pour les impressions programmées

L'aperçu des états imprimés créés avec l'éditeur d'états propose par défaut des sorties dans différents formats : RTF pour Word, XLS pour EXCEL, PDF, XML, ou envoi par email.

Cette même possibilité n'est pas disponible pour les impressions programmées par les fonctions "iImprime", "iImprimeMot", "iImprimeZone", "iImprimeImage"... alors qu'elle est bien utile !

Il existe un moyen de combiner ces deux "méthodes" d'impression pour avoir une impression programmée, imprimée au travers d'un état. Ainsi l'impression programmée bénéficie des possibilités d'exportation dans l'aperçu.

Le moyen pour y parvenir est très facile à mettre en œuvre, il suffit de :
- créer un état ne parcourant aucune donnée, sans aucune champ,
- placer le code de l'impression programmée dans traitement de fermeture de l'état.
Le lancement de cet état "spécial" avec la commande "iImprimeEtat" permettra d'avoir un aperçu contenant une impression programmée, et les possibilités d'exportation.

04 décembre 2006

Pacte écologique / Etre un bon citoyen sans faire de politque...

Je ne profite d'aucune ressource de façon abusive (chômage, RMI, allocations...). Tous mes revenus sont déclarés, et j'estime mérités, car je ne profite pas de l'argent d'autres contribuables.

C'est ma façon d'être un "bon citoyen".

Je ne fais pas de politique : gauche ou droite au pouvoir ne change rien à mon quotidien. L'un comme l'autre au travers de leurs représentants n'ont qu'un objectif, la présidence en 2007, le reste n'a que peu d'importance. Même armé de très bonnes intentions le meilleur des candidats ne pourra pas mettre les fainéants au travail, soigner les malades imaginaires ou mettre au pas ceux qui n'ont aucune règle.

Cela ne m'empêche pas d'être optimiste pour l'avenir, car je ne suis pas le seul à rester animé des saines valeurs héritées du travail des générations précédentes. Aussi, j'ai signé le "Pacte écologique", qui j'en suis sûr rencontrera un vif succès, et permettra de montrer que finalement, tout le monde ne se fout pas de tout.

Vous pouvez signer le "Pacte écologique", et peut être plus encore, ajouter quelques gestes quotidiens supplémentaires en faveur de l'environnement. Par exemple si vous faites plus de 20 minutes de bouchon le matin, demandez-vous si le vélo n'est pas plus rapide au final (tout en permettant au passage de profiter pleinement des friandises de noël sans crainte pour votre ligne).