A partir de la version 25 le framework des applications WINDEV autorise la génération d'un PDF à partir d'un état dans un thread secondaire ou une tâche parallèle.

C'est la nouveauté 85 : éditeur d'états, générer des PDF en masse (threads)

 

Qu'il s'agisse d'une génération "en masse" par milliers, ou de seulement quelques PDF, cette nouveauté est vraiment importante pour accélérer les traitements. Car grâce à l'utilisation des tâches parallèles, un code existant qui "boucle" pour répéter la sortie d'états en PDF, est très vite optimisé de façon sidérante pour l'utilisateur final, avec un minimum de modifications pour le développeur.


Voici un exemple sur un parcours d'une table de factures, qui va générer un PDF pour toutes les factures du jour. Dans une application existante, on aura ce code :

 

c est un Chrono ; ChronoDébut(c)
soit nCombien = 0
POUR TOUT Facture AVEC DateFacture = DateSys()
nCombien++
iDestination(iPDFGénérique,fRepDonnées()+[fSep()]+"Facture_"+Facture.IDFacture+".pdf")
iImprimeEtat(ETAT_Factures, Facture.IDFacture)
FIN
Info(nCombien+" PDF générés "+ DuréeVersChaîne(c..Valeur, "SSs LLL"))

 

Autrement dit, exécution du premier état et génération du PDF correspondant, ensuite génération du second, du troisième … et ainsi de suite.


Pour aller beaucoup plus vite, le code est quasiment inchangé, une déclaration à ajouter, et une exécution de tâche à lancer plutôt que l'état directement :

 

tabGenerationPDF est un tableau de TâchesParallèles
c est un Chrono ; ChronoDébut(c)

POUR TOUT Facture AVEC DateFacture = DateSys()
tabGenerationPDF.Ajoute(TâcheParallèleExécute(GenerePDF,(Facture.IDFacture),tpoCopieComplèteContexteHFSQL))
FIN
TâcheParallèleAttendToutes(tabGenerationPDF)
Info(tabGenerationPDF..Occurrence+" PDF générés " +DuréeVersChaîne(c..Valeur, "SSs LLL"))

PROCEDURE INTERNE GenerePDF(LOCAL nIdFacture)
iDestination(iPDFGénérique,fRepDonnées()+[fSep()]+"Facture_"+nIdFacture+".pdf")
iImprimeEtat(ETAT_Factures,nIdFacture,nIdFacture)
FIN

 

L'utilisation des tâches parallèles et des procédures internes reviennent fréquemment dans le blog c'est dernières semaines. Mais j'insiste sur ces sujets, qui offrent un rapport travail du développeur / gain pour l'utilisateur final exceptionnel.

 

Rappelons que le code serveur d'un site WEBDEV partage le framework des applications WINDEV. Il donc également possible de générer un lot de PDF depuis un état dans un traitement serveur d'une page d'un site, ou une tâche planifiée gérée par le serveur d'application de WEBDEV.

 

Liens utiles sur le thème de la programmation avec des threads ou tâches :

< Retour