Les tables des documents 4D Write Pro ont été considérablement améliorées au cours des dernières versions. En fait, l’équipe 4D s’est beaucoup investie pour faire de 4D Write Pro un puissant générateur de documents basés sur des modèles. Nous avons déjà mis en place des avancées telles que les en-têtes, les sources de données, les lignes de report… entre autres fonctionnalités puissantes qui me viennent à l’esprit.
Maintenant, avec 4D v20, c’est au tour des lignes de rupture de faire leur apparition !
Mesdames et messieurs, roulements de tambour, s’il vous plaît !
L’objectif à atteindre
Quelle que soit votre activité, vous avez certainement besoin de créer des listes.
Ces listes sont triées selon vos propres critères, et il est généralement nécessaire de créer des blocs pour chacun de ces critères afin d’obtenir des totaux ou des statistiques. C’est ce que vous propose cette nouvelle fonctionnalité de 4D Write Pro !
Quand et comment ? Voici un exemple concret
Lorsqu’une table est alimentée par une source de données triées, le but est d’insérer une ligne de rupture lorsque la valeur correspondant au critère de tri change.
Imaginez que vous connaissiez des personnes de plusieurs continents, pays et villes.
Vous souhaitez créer une liste de ces personnes regroupées par continent, pays et ville.
Ou bien vous voulez créer un rapport basé sur la relation avec l’entreprise et créer une liste d’employés groupés par l’entreprise sur chaque continent.
Dans les deux cas, vous devez d’abord vous assurer que cette sélection est triée en fonction de ces trois critères.
Cas 1 :
ds.people.all().orderBy("continent asc, country asc, city asc")
Cas 2 :
ds.People.all().orderBy("worksFor.name asc, continent asc)
Pour chaque critère de tri, une ligne de rupture
Une fois la source de données associée à la table, les personnes seront affichées dans la ligne répétée et dans l’ordre souhaité. Voyons comment les regrouper par critère de tri.
Utilisation de l’interface
De nouveaux éléments sont désormais disponibles dans le menu de la ligne. Ils sont contextuels et n’apparaissent que si le curseur se trouve à l’intérieur d’un tableau (et sous l’en-tête, le cas échéant).
Par exemple, la formule peut être basée sur le nom d’un attribut (This.item.country) ou sur le chemin d’un attribut connexe (ex : This.item.worksFor.name) ou sur toute autre formule (Substring(This.item.name;1;1)).
Une fois que l’attribut de rupture a été défini… vous pouvez voir sa formule en survolant le symbole de rupture « S » comme dans Sort (« Sort » signifie « Tri » en anglais).
Au-dessus ou au-dessous de BreakS ?
Les lignes de rupture peuvent se situer au-dessus ou au-dessous de la ligne répétée (remplie par la source de données du tableau).
Les ruptures seront rendues chaque fois que la valeur renvoyée par la formule de rupture changera, assurez-vous donc que la position des ruptures correspond aux critères de tri de la source de données.
Un nouvel attribut de ligne
L’attribut wk break formula contient la formule dont le résultat déterminera l’affichage de la ligne de rupture. La simple présence de cet attribut fera qu’une ligne sera considérée comme une ligne de rupture. Vous pouvez définir autant de lignes de rupture que nécessaire, par exemple, Formula(This.item.city) pour le niveau de rupture le plus bas et Formula(This .item.continent) pour le niveau le plus élevé.
WP SET ATTRIBUTES($row; wk break formula; Formula(This.item.country))
WP RESET ATTRIBUTES($row; wk break formula)
N’oubliez pas :
- Une ligne de rupture doit être située juste au-dessus ou au-dessous d’ une ligne répétée ou d’une autre ligne de rupture s’il y a plusieurs niveaux. Dans le cas contraire, elle ne sera pas prise en compte.
- Le nombre de niveaux est limité à cinq. Si vous ajoutez un sixième niveau, aucune erreur ne sera déclenchée, mais il ne sera pas pris en compte.
- L’insertion de lignes de rupture dans le tableau ne trie pas la source de données. La source de données doit être triée indépendamment.
Voilà, c’est tout !
Contenu des lignes de rupture
En plus du texte, les lignes de rupture peuvent contenir deux types de formules.
- La première possibilité consiste à utiliser les éléments présents – ou susceptibles d’être présents – dans les lignes répétées (Ex : This.item.continent).
La valeur renvoyée sera la dernière valeur utilisée avant la rupture (ou la première valeur utilisée si la ligne de rupture précède les lignes répétées). - La deuxième possibilité est nouvelle : la propriété breakItems ne peut être utilisée que dans le contexte des ruptures (Ex : This.breakItems).
Le breakItems est un sous-ensemble des données source du tableau qui correspond précisément aux lignes répétées de la ligne de rupture concernée.- Pour reprendre l’exemple des ruptures multiples par continent-pays-ville, lorsque le contenu change, le sous-ensemble correspond aux personnes du continent (avant le changement), et ce, que la ligne de rupture soit placée avant ou après la ligne répétée. Ce sous-ensemble peut donc être utilisé pour effectuer des calculs tels que sum(« salary »), average(« salary »), etc.
Enfin, précisons que ces sous-ensembles seront du même type que les données sources de la table, c’est-à-dire une sélection d’entités ou bien une collection.
Plus d’informations
Plus d’informations sur cette fonctionnalité peuvent être trouvées dans la documentation.
Conclusion
Cette nouvelle fonctionnalité démontre une fois de plus la puissance de 4D Write Pro en matière de création automatique de documents.
Avec les ruptures, une étape supplémentaire est franchie. Faites-nous savoir ce que vous en pensez du Forum 4D !