4D Write Pro : Remplir dynamiquement les tableaux avec des sélections et des collections d’entités

Traduit automatiquement de Deepl

En tant que développeurs, nous créons souvent des documents 4D Write Pro complexes et avancés. Nous pouvons générer des tableaux qui doivent être remplis à partir d’une source de données, et nous pouvons ne pas être sûrs des lignes et des colonnes exactes. Remplir manuellement les tableaux avec des données à chaque fois est une tâche laborieuse. Nous vous avons entendu, et c’est ici que le contexte de données vient comme une option inestimable, ouvrant le monde de l’ORDA et du développement orienté objet aux documents 4D Write Pro.

Il est désormais possible de définir une « source de données » pour les tables de 4D Write Pro. Qu’il s’agisse d’une sélection d’entités ou d’une collection, cette « datasource » alimentera automatiquement les lignes de ces tables.

Entrons dans les détails !

Remplir dynamiquement les tables avec des sélections d’entités et des collections

Une image vaut 1000 mots.

Cette fonctionnalité vous permet de créer des documents comme celui-ci :

Une fois terminé, il peut être exporté(en PDF, en Docx, ou tout autre format d’exportation disponible.), imprimé, modifié, etc. Voyons, étape par étape, comment procéder !

Tableau, ligne d’en-tête, ligne « Modèle », autres lignes

Dans un document 4D Write Pro, un tableau peut désormais contenir une ou plusieurs lignes d’en-tête. La ligne qui suit immédiatement l’en-tête sera considérée comme une ligne modèle qui sera répétée et remplie par le contenu des éléments de la source de données. Les lignes suivantes (s’il y en a) seront automatiquement « poussées » vers le bas et pourront contenir plus d’informations, éventuellement aussi basées sur la source de données du tableau. Le document original utilisé pour générer le rapport ci-dessus ressemble à ceci :

blank

Le premier cadre, en haut, est rempli d’informations fournies par le contexte de données. Si vous n’êtes pas familier avec ce concept, nous vous recommandons vivement de commencer par lire cet article de blog. Voyons comment le tableau lui-même est défini.

Dans ce cas, le tableau contient trois parties (détaillées plus loin) :

  • La première ligne a été définie comme un en-tête.
  • La deuxième ligne est la ligne de modèle.
  • Les lignes suivantes contiennent des informations supplémentaires basées sur la source de données et les calculs du tableau.

ASSOCIATION D’UNE SOURCE DE DONNÉES À UNE TABLE

Comme son nom l’indique, une source de données fournit des données à une table. Par conséquent, cette source de données doit être une formule dont le résultat est soit une sélection d’entités, soit une collection. Si ce n’est pas le cas (après tout, une formule peut retourner n’importe quoi), on peut toujours accéder au résultat de la formule dans la table (voir ci-dessous), mais aucune ligne ne sera utilisée comme modèle.

Deux façons de procéder

#N° 1 : DÉFINIR LA DATASOURCE AVEC L’interface utilisateur

L’interface utilisateur a été modifiée de manière à ce qu’une formule puisse être directement associée à une table.

Imaginons une table « Company » connectée à une table « Employee » via un lien « employees ». Si une entité « Company » est accessible via un contexte dans le document, alors « employees » sera la source de données de la table.

La formule associée à la table peut être This.data.company.employees.

blank

blank

… où This.data (le contexte) va être fourni (plus tard) par la programmation :

$context:=New object("company";$company) // $company is a company entity
WP SET DATA CONTEXT(WParea;$context)

#2 : DÉFINIR LA DATASOURCE PAR PROGRAMMATION

La source de données peut également être définie à l’aide d’une seule ligne de code.
Chaque table peut maintenant contenir un nouvel attribut qui peut être défini avec la commande WP SET ATTRIBUTES.

WP SET ATTRIBUTES($table;wk data source;Formula(This.data.company.employees))

COMMENT DÉFINIR LE CONTENU DES LIGNES ?

Une fois la source de données de la table définie, il est temps de remplir les lignes !

De nouveaux attributs sont disponibles grâce au mot clé This qui se base sur les éléments du datasource.

Dans la ligne modèle, vous pouvez utiliser This.item.xxx où xxx (nom, adresse, code postal…) seront les attributs de l’entité courante à laquelle vous voulez accéder comme This.item.name ou This.item.age. Vous pouvez également accéder à l’index de l’élément dans la sélection (ou collection) avec l’attribut This.itemIndex

blank

Une fois calculées (à l’aide de WP COMPUTE FORMULAS), les lignes calculées peuvent être affichées comme indiqué dans l’introduction.

D’autres attributs de table !

Certains autres attributs peuvent également être utilisés n’importe où dans le tableau, généralement dans les lignes suivantes.

This.table.datasource renvoie la formule associée au tableau. Néanmoins, il sera probablement préférable d’utiliser This.tableData, dont la valeur est le résultat déjà évalué de cette formule (généralement une collection ou une entité de sélection).

Cela permet d’optimiser le traitement, bien sûr, et d’assurer la cohérence du document.

A partir de ce dernier attribut (tableData), il devient facile de calculer des sommes, des moyennes, des valeurs minimales ou maximales grâce à des formules comme celles-ci :

This.tableData.min(age)
This.tableData.average(salary)

blank

Encore plus d’attributs ?

De nouveaux attributs ont été ajoutés, accessibles dans n’importe quelle table (même sans source de données définie). Ils permettront d’avoir accès à :

  • La table elle-même avec This.table,
  • La ligne actuelle avec This.row,
  • Le numéro de la ligne courante via This.rowIndex.

Imprimez des rapports complets en quatre lignes de code !

Une fois ce type de document créé, il peut être utilisé comme modèle.

For each ($company; $companies)
  WP SET DATA CONTEXT($template; New object("company"; $company))
  WP PRINT($template) // (before printing, expressions will be recomputed by default)
End for each 

PERSONNALISER DES RAPPORTS, DES LISTES, ETC.

Vous pouvez également utiliser un modèle dont les tableaux ont été remplis avec les valeurs de la source de données. Vous pourrez mettre en évidence les lignes, modifier les couleurs et les styles, et même supprimer ou ajouter des lignes vides !

La meilleure façon de procéder est de geler d’abord le document afin que toutes les données insérées soient maintenant des lignes et du texte ordinaires. Il n’est pas obligatoire de geler le document, mais vous devez savoir que toutes vos modifications seront perdues si les formules sont recalculées.

Enfin, si votre document doit être sauvegardé (et pas seulement imprimé ou exporté), vous devez utiliser une copie de vos modèles afin de ne pas perdre les modèles eux-mêmes.

MyWorkingDocument :=WP New($template))

Conclusion

Cette nouvelle fonctionnalité vous permet de générer des documents à partir de modèles. Leur contenu peut être basé sur ORDA avec un minimum de lignes de programmation.

Ces documents peuvent être exportés en PDF, Docx, eMail. Ils peuvent également être utilisés comme améliorations des formulaires de liste et de sélection d’impression.

La génération automatique de documents est maintenant grandement facilitée, que ce soit pour des factures, des catalogues ou des inventaires.

Plus de détails sur le centre de documentation(ici et ). Et comme toujours, n’hésitez pas à nous contacter sur les forums 4D.

Roland Lannuzel
- Product Owner & 4D Expert - Après avoir étudié l'électronique, Roland s'est lancé dans l'informatique industrielle en tant que développeur et consultant, créant des solutions pour les clients avec une variété de bases de données et de technologies. À la fin des années 80, il est tombé amoureux de 4D et l'a utilisé pour écrire des applications commerciales, notamment des systèmes de comptabilité, de facturation et de messagerie électronique. Il a rejoint la société en 1997 et a contribué à la conception de spécifications, d'outils de test et de démonstrations, ainsi qu'à la formation et à la présentation de la communauté 4D lors de nombreuses conférences. Il continue à façonner activement l'avenir de 4D en définissant de nouvelles fonctionnalités et des outils de développement de bases de données.