SmartDoc : Différence entre versions

De YoWiki
Sauter à la navigation Sauter à la recherche
Ligne 184 : Ligne 184 :
 
<p><code>:join</code> : '''utilisable uniquement pour les variables [[Fields-Form|multiples-choices]]''' → permet d'afficher les différentes valeurs de la liste dans le SmartDoc sous la forme suivante : <code>Valeur1, Valeur2, Valeur3, et Valeur4</code>. Les différentes valeurs contenues dans la variable sont affichées les unes à la suite des autres, séparées par des virgules; la dernière valeur est précédée de la conjonction de coordination <code>et</code></p>
 
<p><code>:join</code> : '''utilisable uniquement pour les variables [[Fields-Form|multiples-choices]]''' → permet d'afficher les différentes valeurs de la liste dans le SmartDoc sous la forme suivante : <code>Valeur1, Valeur2, Valeur3, et Valeur4</code>. Les différentes valeurs contenues dans la variable sont affichées les unes à la suite des autres, séparées par des virgules; la dernière valeur est précédée de la conjonction de coordination <code>et</code></p>
 
<p><code>:list</code> : '''utilisable uniquement pour les variables [[Fields-Form|multiples-choices]]''' → permet d'afficher les différentes valeurs de la liste dans le SmartDoc sous la forme d'une liste à puce; chacune des valeurs de la liste démarre une nouvelle puce</p>
 
<p><code>:list</code> : '''utilisable uniquement pour les variables [[Fields-Form|multiples-choices]]''' → permet d'afficher les différentes valeurs de la liste dans le SmartDoc sous la forme d'une liste à puce; chacune des valeurs de la liste démarre une nouvelle puce</p>
 +
<p><code>:label</code> : dont le fonctionnement est expliqué plus haut.</p>
 
<h3 id="options">Options</h3>
 
<h3 id="options">Options</h3>
 
*<code>break</code> (facultatif) : valeur possible <code>none</code> , <code>before</code> ou  <code>after</code>.
 
*<code>break</code> (facultatif) : valeur possible <code>none</code> , <code>before</code> ou  <code>after</code>.

Version du 18 septembre 2020 à 14:01

SmartDoc

Introduction

En premier lieu, un SmartDoc doit être clairement identifié par son doc-id, qui doit être strictement le même que le doc-id spécifié dans la DocList

La nouvelle feuille du Fichier de Paramétrage qui a vocation à être un SmartDoc doit donc se nommer précisément : Doc “le_doc-id”

Par exemple :

Ici, la DocList mentionne un seul SmartDoc, dont le doc-id est “demo-hercule” :

Une DocList classique

En conséquence, la feuille correspondante se nomme demo-hercule

Capture d’écran 2019-07-24 à 11.19.59.png

Quant aux colonnes détaillées ci-dessous, elles doivent toutes obligatoirement être remplies, à l’exception de la colonne D “List Labels”

Metadonnées, datastore, options, list labels

Smartdoc options 1.png

Métadonnées

C'est un simple espace de commentaire

DataStore

DataStore : C’est l'id du DataStore auquel les variables utilisées dans le document sont associées. Par défaut, mainstore.

Options - title-num-display

title-num-display : cette colonne permet de définir le format d’affichage pour la numérotation de chaque titre du document. Cette option attend un tableau, où chaque clé est un niveau de titre (de 1 à 6 inclus), et pour chaque niveau, deux attributs à configurer : style et format .

Les valeurs possible pour les attributs style sont :

"upper-roman" : nombre romain majuscule (I, II, III, IV etc...)

"decimal" : numérotation décimale / chiffres arabes (1, 2 , 3 ...)

"lower-roman" : nombre romain minuscule (i, ii, iii, iv etc.)

"lower-alpha” : numérotation alphabétique minuscule (a, b, c, d...)

"upper-alpha" : numérotation alphabétique majuscule (A, B, C, D, E)

En ce qui concerne l’attributs format : Il attend une chaîne de caractère dans laquelle $1, $2, $3 … $6 seront remplacés par la numérotation (au style attribué). Exemple : “Article $1.$2” peut donner “Article 3.a”.

Exemple complet :

Gestion du format des titres

Où les titres :

de niveau 1 seront de la forme : “ARTICLE 8 - Lorem ipsum”

de niveau 2 seront de la forme : “2 Lorem ipsum ”

de niveau 3 seront de la forme : “2-5 Lorem ipsum ”

de niveau 4 seront de la forme : “2-5-10 Lorem ipsum ”

de niveau 5 seront de la forme : “a. Lorem ipsum ”

de niveau 6 seront de la forme : “ iv ) Lorem ipsum”

List-Labels

Introduction

List-Labels : cette colonne permet d’effectuer une conversion entre des choix d’une variable de type “choices” du SmartForm et le SmartDoc. Autrement dit, elle permet d'établir des "dictionnaires de correspondance" permettant de faire correspondre un libellé à une valeur.

Par exemple :

La gestion des List Labels

Une fois un List-Label préparé, il est possible de l'utiliser grâce au traitement Label

Contexte

La colonne "Choices" du `Fields-Form` vous permet de spécifier les choix qui doivent apparaitre dans le formulaire. Chaque choix :

- s'écrit sur une ligne différente, ligne qui doit se terminer par un point-virgule ;

- chaque choix s'écrit en deux parties séparées par un ":" afin d'indiquer, à gauche, la valeur à stocker en base de données (et à utiliser dans les visible ifs) et à droite la valeur à afficher dans le formulaire. On parle de couple "valeur : libellé".

Par exemple

Dg.png

Mise en place

Le document n'est pas à même de décider sous quelle forme afficher la variable correspondante aux choix d'un champ de type "choix"

Si rien n'est spécifié, le document affichera ce qui est stocké dans la base de données

Il est toutefois possible d'indiquer au document des libellés et pour cela intervient le filtre :label(xxx)`.

Par exemple, on peut imaginer un dictionnaire nommé "fonctions" pour indiquer que "dg" doit s'afficher "Directeur Général", et un autre dictionnaire nommé "fonctions_abrégées" qui indiquerait au contraire que "dg" doit s'afficher "Dir. G.".

Il sera alors possible, dans le contenu du SmartDoc, de faire appel au dictionnaire de votre choix :

  • - M. Dupond occupant le poste de {VARFONCT:label(" fonctions")}
  • - M. Dupond occupant le poste de {VARFONCT:label(" fonctions_abrégées")}

Les dictionnaires sont définis via la case D2 (List Labels) des onglets "Doc".

Ils sont écrits sous la forme suivante :

D2.png

⚠ Notez les espaces d'indentation qui permettent d'indiquer au système l'imbrication / hiérarchie de l'info. C'est à dire qu'ici, val1 et val2 appartiennent au premier dictionnaire, alors que valA et valB appartiennent au second dictionnaire. Sans cette indentation, le système ne saurait pas reconnaitre si la ligne correspond à la déclaration d'un nouveau dictionnaire ou à un couple valeur/libellé.

→ A noter : On peut aussi utiliser un libellé référencé dans une “Choice-List”.

Par exemple, il est possible de créer un List Label nommé “countries” qu’on configurerait de la manière suivante : countries: @pays .

On peut alors l’utiliser de la même façon au sein d’un document avec, par exemple, {PAYS_NAISS:label("countries")}.

La colonne A qui donne France si la variable PAYS_NAISS vaut “FR”.


Les modèles .docx


Le SmartDoc consiste à définir du "contenu dynamique", bien qu'il soit possible de définir certains styles de base (couleurs, gras, italiques, titres etc.), la mise en page du document lui même reste limitée. C'est en cela que les "modèles .docx" peuvent être utile.

Chaque SmartDoc peut se baser sur un modèle de fichier, au format .docx. Le contenu dynamique sera tout simplement "injecté" dans le document à l'endroit indiqué. Le modèle peut, par exemple, prévoir un habillage (page de couverture, page de garde etc.), prévoir des entêtes et pieds-de-page, mais surtout, peut permettre de définir les marges du document et les styles des paragraphes et des titres (tailles, couleurs, espacement...). Le contenu dynamique, créé au travers du SmartDoc, se retrouvera simplement injecté dans le modèle prédéfini.

Définir un modèle et l'associer à un ou plusieurs SmartDoc

Pour pouvoir utiliser un modèle, il suffit de le rajouter dans la Doc-List, en lui donnant un identifiant unique, et en indiquant le type docx-template (vous pouvez aussi préciser un titre, une description).

Une fois le modèle présent dans la Doc-List, il est possible de l'associer à un SmartDoc en utilisant l'option : docx-template: mon-template.

Préparer son modèle et l'injection du contenu

Le modèle .docx peut être préparé comme un document classique : définir les styles des titres et des paragraphes, définir les marges et les interlignes, une page de couverture et des pieds-de-pages etc. Pour définir où le contenu dynamique devra être injecté, il faut utiliser la syntaxe suivante : ${ @inject all }. Ainsi, l'intégralité du contenu du SmartDoc sera intégrée à cet endroit même du modèle. Il est aussi possible de demander l'intégration d'un seul bloc du SmartDoc, en indiquant, à la place de all, l'identifiant du SmartDoc et le nom exact du bloc.

Par exemple, dans un SmartDoc nommé contrat, un bloc défini par #BLOC dénomination, pourra être injecté dans le modèle .docx avec la syntaxe suivante :

${ @inject contrats :: dénomination }

Nb : notez les 2 fois 2 points (::) pour séparer l'identifiant du SmartDoc concerné et le nom exact du bloc à injecter.

Pour aller plus loin :

  • Vous pouvez trouver plus d'informations sur les modèles docx et sur la manière de les mettre en place sur la page dédiée du Wiki.
  • Il est parfaitement possible d'utiliser plusieurs injections dans un même modèle .docx. Il vous suffit d'utiliser plusieurs fois la syntaxe ${ @inject ... } dans le document modèle.
  • Le contenu injecté peut lui-même inclure d'autres blocs (voir les "inclusions" (includes) d'un SmartDoc), des boucles, des titres etc.
  • Dans certains cas, il peut être problématique d'injecter un bloc, lui même contenu dans une boucle du SmartDoc. En effet, la boucle a pour conséquence de "contextualiser" la variable sur laquelle elle boucle, si vous injectez ce contenu hors de ce contexte, le SmartDoc ne saura pas comment interpréter la variable correspondante à une occurence de la boucle.


Contenu, options, styles, visible ifs, commentaires

SmartDoc options 2.png

Contenu

Un SmartDoc est constitué d'une suite ordonnée d'élément de contenu. Dans la feuille du tableur de paramétrage, il faut créer autant de ligne que d'éléments de contenu dynamique. On défini un nouvel élément pour lui associer une condition de visibilité spécifique (ex : car cet élément ne doit pas s'afficher dans certains cas), ou on veut lui associer un "style" spécifique (ex : mettre une partie du paragraphe en couleur rouge).

Le “contenu” du SmartDoc est ce qui sera effectivement “imprimé” dans le document final qui sera transmis à l’utilisateur.

Ce contenu, en plus d’être dynamique grâce au “visible-ifs” comme le reste du système, accepte aussi l’utilisation de variables.

Bases

C’est ici qu’il faut entrer le contenu “brut” du texte : c’est-à-dire le corps du texte.

On peut se servir des balises HTML basiques pour mettre en forme le texte rentré ici.

Les balises suivants sont utilisables

  • a,
  • br,
  • b,
  • strong,
  • i,
  • em,
  • ol,
  • ul,
  • li,
  • hr,
  • span

Fonctionnalités spéciales dans la colonne "contenu"

{@line-break} : ajout un saut de ligne : il est possible de forcer un saut de ligne (ou plusieurs) en utilisant la syntaxe suivante dans un contenu HTML : {@line-break}
Plusieurs saut de ligne (par exemple 2) : {@line-break:2}

{@page-break} : ajout d’un saut de page : il est possible de forcer un saut de page en utilisant la syntaxe suivante dans un contenu HTML : {@page-break}.

Le saut de page est effectif dans les exports .docx ou .pdf, mais est simulé par une simple ligne verticale dans les prévisualisations HTML.

{@ref:my title id} : ajout d’une référence vers un titre : comme pour intégrer une variable, il est possible d’intégrer un lien vers un titre du document (le titre peut se trouver avant ou après la référence dans le contenu). Pour intégrer une référence, il suffit d’utiliser la syntaxe {@ref:my title id} pour laquelle “my title id” correspond à l’attribut title-id d’un bloc-titre existant dans le document. Le fonctionnement des références croisées est décrit en détail ici. Nb : si plusieurs titres ont le même title-id alors la référence pointe vers le premier de la page. Nb : si la référence pointe vers un titre qui n’existe pas dans le document (ou est invisible), elle sera remplacée par le texte “[référence manquante]”. Par défaut, la référence à un titre se contente d’afficher le titre (càd, le contenu du bloc titre). Une chaine de caractère étant retournée, il est possible d’appliquer les filtres classiques. Exemple : Comme décrit dans la section {@ref:droit-acheteur:uppercase},

:letters Le traitement ":letters" permet de convertir automatiquement les chiffres en lettres.

Par exemple, écrire une variable comme suit : {PRIX_TTC:letters} permet d'indiquer au système que la valeur stockée dans la variable PRIX_TT devra être affichée en lettres, et non en chiffres

:numLe traitement “:num” peut-être appliqué dans la syntaxe afin d’afficher la référence sous forme numérique et tenant compte des titres parents. Exemple : Comme décrit dans la section {@ref:droit-acheteur:num}, vous... devient : Comme décrit dans la section 3.1.1.2, vous …

Pour les cas des références vers des titres ayant l’option title-article à “true” le nombre retourné sera simplement celui de l’article dans le cas du traitement “:num”. Pour les cas des références vers des titres ayant l’option title-no-count , le traitement “:num” n’aura alors aucun effet.

{@summary}Ajout d’un sommaire automatique : il est possible d’ajouter un sommaire automatique au document (table of contents) en utilisant la syntaxe suivante : {@summary}

Comment insérer des variables dans un SmartDoc ?

La syntaxe dynamique à l’intérieur du contenu des SmartDoc est dans un format propre à Hercule, et se distingue du reste du texte car elle est entre { et }.

Il est possible d’utiliser les variables de deux manières : en “primitive” (c'est-à-dire : sans aucun traitement) ou en appliquant une modification qu’on appelle un "traitement".

Les primitives

Une primitive est un élément qui a une valeur.

Par exemple: la variable PRENOM va valoir “Damien”. Ou tout simplement un nombre (ex: 36) ou une chaine de caractère (ex: "une chaise")

Pour intégrer une valeur : les variables du dataset sont intégrées dans le contenu à partir d’une syntaxe simple : la variable est placée, sans espace, entre deux accolades. Exemple : Le vendeur, né le {DATE_NAISSANCE}, à {VILLE_NAISSANCE} ...

Les traitements

Les traitements peuvent être définies comme une modification appliquée sur une primitive. Par exemple, le traitement uppercase permet de mettre en majuscule une primitive de catégorie chaîne-de-caractère.

Pour appliquer un traitement sur une primitive, on utilise le signe : : Ce qui donne Mon prénom est {PRENOM:uppercase} qui donne Mon prénom est DAMIEN même quand la variable PRENOM vaut “DaMien”.

Comme vu précédemment, pour intégrer une valeur avec un traitement, on procède en utilisant : :

Exemple : Le vendeur s’appelle {PRENOM:uppercase}

Il est possible d'enchaîner les traitements.

Exemple : L'acheteur a payé {PRIX:letters:uppercase} euros. Ici, la valeur contenue dans la variable "PRIX" sera d'abord convertie en lettres, puis mise automatiquement en MAJUSCULES. On obtiendra un résultat du type : "L'acheteur a payé TRENTE euros", alors que la valeur de départ sera "30".

A noter : les traitements peuvent s’appliquer aussi sur de simples chaînes de caractères et pas seulement des variables. Ex : L'acheteur a payé {"32 000":letters:uppercase} euros.

Liste des traitements intégrés

Pour l’instant, les traitements intégrés sont :

:uppercase : force l’affichage d’une chaîne en majuscule

:lowercase : force l’affichage d’une chaîne en minuscule

:letters : uniquement pour les variables de type numérique. Converti une variable numérique en toutes-lettres.

:capitalize : force la majuscule sur la première lettre de chaque mot

:img : transforme une chaine de caractère (url) en image dans le document.

Exemple : {"http://www.gouache.com/logo.png":img}

:num: (uniquement pour les références). Pour une référence à un titre, affiche son numéro au lieu d’afficher le titre. Exemple : Comme décrit dans la section {@ref:droit-acheteur:num}, vous.... Le fonctionnement des références croisées est décrit en détail [[1]]

:french-date : force la valeur d’une variable de date à s’afficher au format jj/mm/aaaa.

:french-datetime : force la valeur d’une variable de date à s’afficher au format 30/12/1985 à 12h45.

:letters : force la valeur d’une variable numérique à s’afficher en toutes lettres.

:join : utilisable uniquement pour les variables multiples-choices → permet d'afficher les différentes valeurs de la liste dans le SmartDoc sous la forme suivante : Valeur1, Valeur2, Valeur3, et Valeur4. Les différentes valeurs contenues dans la variable sont affichées les unes à la suite des autres, séparées par des virgules; la dernière valeur est précédée de la conjonction de coordination et

:list : utilisable uniquement pour les variables multiples-choices → permet d'afficher les différentes valeurs de la liste dans le SmartDoc sous la forme d'une liste à puce; chacune des valeurs de la liste démarre une nouvelle puce

:label : dont le fonctionnement est expliqué plus haut.

Options

  • break (facultatif) : valeur possible none , before ou after.

Permet d’intégrer un saut de ligne. Par défaut, toutes les entrées sont en break: after.

Si after est indiqué (ou si rien n’est indiqué puisque c’est la valeur par défaut), alors le bloc se terminera par un saut de ligne et le bloc suivant s’affichera sur une nouvelle ligne.

Si before est indiqué, l’entrée s’affiche sur une nouvelle ligne (le saut de ligne intervient avant l’entrée).

Si none est indiqué, il n’y a pas de saut de ligne, les entrées s'enchaînent.

  • title-level (facultatif) : valeurs possibles : 1, 2, 3, 4, 5, 6.
  • title-id (facultatif) : la valeur attendue est une chaîne de caractères alpha-numériques sans sauts de ligne et dont les caractères suivants sont interdits : :, {, }, "

Cette option permet d’assigner un identifiant au titre concerné, de cette façon il sera possible de faire référence à ce titre via un “bookmark” (voir plus haut, “ajout de référence”).

Nb: cet attribut n’est possible QUE si l’attribut title-level est lui aussi renseigné.

  • title-article (facultatif) : valeur booléenne attendue. Par défaut, la valeur est “false”.

Quand cette option est à “true”, le titre sera considéré comme un “titre d’article”. Il sera donc préfixé par "ARTICLE 1 - " ou le nombre “1” sera remplacé par l’index de l’article en question.

  • title-no-count (facultatif) : valeur booléenne attendue. Par défaut, la valeur est “false”. Quand cette option est à “true”, le titre ne sera pas numéroté, ni dans les sommaires, ni préfixe par aucun type de numérotation.

Styles

La colonne Styles est facultative, et permet de traiter différemment le contenu de la ligne concernée.

A chaque traitement utilisé, on retournera à la ligne après avoir écrit un ;

  • Définir la police :

Le traitement “font-family” permet de spécifier la police utilisée.

Ce traitement peut prévoir plusieurs polices, comme un système à plusieurs détentes : si le navigateur utilisé ne supporte pas la première police, le système tentera d’utiliser la deuxième police, puis la troisième, ainsi de suite ...

Exemple :

font-family: Times New Roman, Times, serif;

Dans cet exemple, on prévoit d’utiliser Times New Roman en priorité.

Si le navigateur ne supporte pas cette police, on cherchera à afficher une police de la famille “Times”.

Enfin, si rien de tout cela ne marche, on cherchera à afficher une police de type “Serif”

  • Définir la taille de la police :

font-size: XXpt;

On remplacera XX par la taille de police souhaitée

  • Mettre en gras :

font-weight: bold

  • Mettre en italique :

font-style: italic;

  • Souligner le texte :

text-decoration: underline;

  • Définir une bordure

border: 1px #777777 solid

  • Aligner le texte

text-align: right text-align: left text-align: center text-align: justify

  • Choisir une couleur de fond pour le texte

background-color: #FFFF00

La couleur doit être indiquée au format hexadecimal

  • Choisir une couleur pour le texte

color: #FF0000

La couleur doit être indiquée au format hexadecimal

Les références croisées

Les références croisées font l'objet d'une page dédiée.

Visible if

Ici, les visible ifs permettront de conditionner logiquement l’apparition du texte se trouvant dans la colonne “Contenu” Le fonctionnement est similaire au reste du système, et est détaillé dans la page relative aux Visible ifs

Utiliser les Boucles

Les boucles permettent de répéter un groupe d'informations autant de fois que nécessaire, cette notion est détaillée dans la page correspondante

Commentaire

Ce champ permet à celui qui paramètre de laisser toute indication utile à la compréhension de son fichier de paramétrage.

L’utilisateur final ne verra jamais ce qui est écrit dans ce champ.

Autres fonctionnalités présentes dans le SmartDoc