Fabrication de formulaires Cahier de recommandations
Transcription
Fabrication de formulaires Cahier de recommandations
Fabrication de formulaires Cahier de recommandations Juillet 2016 Fabrication de formulaires Cahier de recommandations v0.01 – 13/09/2006 BVG ▪ « Cookbook » v1.00 – 21/01/2009 BVG ▪ Réunions du comité des rédacteurs Jpublisher v5.00 – 29/10/2010 BVG ▪ adaptation à FormPublisher v6.06 – 07/10/2011 BVG ▪ nouvelle numérotation des recommandations ▪ adaptation pour un lecteur extérieur à eWBS V6.30 – 31/07/2015 BVG ▪ Qualité de l'XSD V6.31 – 31/07/2015 BVG ▪ Ordre des paramètres dans publication.properties V6.32 – 21/08/2015 FMO ▪ Subversion V6.33 – 04/09/2015 BVG ▪ Fragments XSD V6.34 – 10/09/2015 FMO ▪ Fréquence et qualité des commits V6.35 – 04/02/2016 BVG ▪ FOP en mode serveur en FP33 V6.36 – 29/04/2016 FMO ▪ Comment retrouver l'XSD dans un war (FP33) V6.37 – 11/07/2016 BVG ▪ Logging maximum pour debug V6.38 – 16/12/2016 IMI ▪ Notes en bas de page V6.39 – 16/12/2016 IMI ▪ Utilisation des champs memo Contact eWBS: Bernard VANGEYTE | [email protected] | 081/40 98 78 Table des matières Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation n° n° n° n° n° n° n° n° n° n° n° n° n° n° n° n° n° n° n° n° n° n° 1.Degrés de liberté du rédacteur............................................7 2.Moteur deux temps..........................................................10 3.Check-list du rédacteur.....................................................12 4.Qualité de l'environnement...............................................14 5.Qualité d'un projet...........................................................17 6.Ressources communes.....................................................23 7.Dépôt des sources et versionning.......................................25 8.Plan de test....................................................................30 9.Déploiement sur serveur...................................................32 10.Règles de nommage des variables....................................36 11.Pré-remplissage.............................................................43 12.Layout..........................................................................54 13.Nouveau projet..............................................................56 14.Rubriques de renseignements..........................................57 15.Ordre des sections.........................................................60 16.Liste des documents à joindre.........................................62 17.Enquête de satisfaction...................................................66 18.Voies de recours et vie privée..........................................67 19.Typographie..................................................................68 20.Dénominations et logos officiels.......................................72 21.Recommandations de lisibilité..........................................74 22.Principes de mise en page...............................................75 Page 1 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation Recommandation n° n° n° n° n° n° n° n° n° n° n° n° n° 23.Tableaux.......................................................................77 24.Formattage des champs..................................................83 25.Libellés des questions.....................................................84 26.Blocage de l'accès direct.................................................85 27.Accès DB en lecture.......................................................87 28.Utilisation des champs mémo..........................................90 29.Recalcul des totaux........................................................92 30.Liste de paires codes libellés............................................93 31.Itérations......................................................................95 32.Ensemble de questions...................................................97 33.Notifications multiples....................................................98 34.Problèmes de session...................................................100 35.Calcul du pdf avec FOP.................................................101 Page 2 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Synthèse N 1 Titre Recommandation Degrés de liberté du rédacteur Le rédacteur doit toujours retranscrire exactement ce qui est demandé (description du travail dans le « Mandat » ou faite par les experts en lisibilité), mot à mot, sauf → si c'est contraire à une recommandation du présent cahier, → si c'est une faute d'orthographe, → si c'est contraire aux règles de lisibilité ou à la charte graphique. Toujours récupérer les logs après un plantage du Studio et les déposer à l'endroit ad hoc. 2 Moteur deux temps À la fin de la réalisation du prototype, certains éléments clefs doivent avoir été validés définitivement par l'administration responsable du formulaire. Celle-ci peut faire cette validation, par exemple, sur base du pdf produit lors de la publication du prototype. 3 Check-list du rédacteur Avant de commencer à travailler sur l'intelligence du formulaire, le rédacteur doit s'assurer de disposer de tous les éléments nécessaires à sa réalisation. 4 Qualité de l'environnement Toujours minimiser l'utilisation de l'APPLI.REF au strict nécessaire. Toujours essayer d'abord de trouver une solution valable pour tous les formulaires, donc au moyen du MY.REF. Ceci permet d'éviter des fourches (« fork ») de développement et de minimiser les risques d'erreur, les efforts et les coûts lors d'une mise à jour ou d'une migration. 5 Qualité d'un projet Tous les autres fichiers de type bureautique qui sont liés au formulaire doivent être sortis du projet (et du dépôt Subversion). Tous les autres fichiers de type image doivent figurer dans un répertoire image de l'APPLI.REF. Tous les autres fichiers de travail doivent être sortis du projet (et du dépôt Subversion). S'il y a un seul formulaire (et aucune annexe), il doit s'appeler formulaire.jxml et alors le fichier de branchement.jxml n'existe pas. S'il y a plusieurs formulaires et/ou annexes, tous les formulaires se nomment formulaire_*.jxml et toutes les annexes annexe_*.jxml (tout en minuscules, séparation des mots par « _ »). Alors branchement.jxml doit exister. Les fichiers dépendants doivent se nomment include_*.jxml (au niveau d'un <content>) ou miniclude_*.jxml (à l'intérieur d'un <content> ou équivalent). Les include et les miniclude ne figurent jamais dans le branchement.jxml. Les autres fichiers de metadonnées sont dans des fichiers nommés x*_*.jxml (xatoms, xcomon, xfaq, xinstructions, xvalidation) Les fichiers publication.properties contiennent 2 volets clairement distincts : « eWBS PARAMETERS » et ensuite, toutes les autres rubriques communes à jway. Le premier volet eWBS est dans common/publication.properties et contenir les 3 variables easi.form.direct, easi.form.uploadable, easi.form.sign.type Le second volet Jway est en partie dans common/publication.properties et contient 3 variables jway.reference.MyRef, jway.reference.Images, jway.reference.Includes. et en partie dans desktop/publication.properties et contient 3 variables jway.publication.name, jway.publication.version, jway.boot.edoc Toujours utiliser le MetaField « departmentLogo ». Toujours utiliser le logo du SPW (et non le logo de la DG) pour les formulaires du SPW. La catégorie (meta-field category), la nature (subtitle) et le titre (title) obéissent à quelques règles éditoriales 6 Ressources communes Les ressources communes sont à ne JAMAIS modifier. Leur création et mise à jour suivent un processus indépendant de tout projet de formulaire. Toujours reprendre (subversion>update) la dernière version en date des @COMMUN avant de travailler avec FormPublisher, surtout quand on commence un nouveau Page 3 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 N Titre Recommandation formulaire ou quand on fait une nouvelle version du formulaire. Ne pas particulariser un bloc commun. Dès qu'on particularise un bloc commun, on s'expose à de grosses difficultés d'évolution ou de mises à jour. Il faut éviter au maximum cette pratique. → Si on ne peut l'éviter, il faut d'abord soumettre à la réflexion des autres rédacteurs la possibilité de paramétrer le bloc commun pour le rendre plus flexible. → Si vraiment aucune solution n'est possible, la particularisation du bloc commun se fait en copiant le bloc de @COMMUN vers le projet, et en lui adjoignant un suffixe explicitant la particularité : « include_particulier » 7 Dépôt des sources et versionning Il faut ajouter systématiquement le numéro de version si le commit correspond à un déploiement d'un war sur l'environnement de test (et à fortiori sur tout autre environnement). Le format du commentaire doit être comme suit : « *** vMM.mm.cc *** » + le commentaire après. Dans le commentaire après, toujours commencer par rappeler la référence de la demande JIRA correspondante « JIRA-xxx » Terminer par un commentaire libre si pertinent. Nomenclature du nom du war : DGXX_FORM_vMM.mm.cc.Lxx.jjj.eID.war Lorsque la version en cours (trunk dans subversion) est la version en production : → soit on incrémente la version majeure (MM = MM+01) et on remet les autres à 01 (mm=01, cc=01), → soit on incrémente la version mineure (mm = mm+01) et on remet les autres à 01 (cc=01). Lorsque la version en cours (trunk dans subversion) n'est pas la version en production (version de travail), on incrémente la version correction (cc = cc+01). Il faut TOUJOURS concordance de numéro de version s'il y a concordance de traduction. 8 Plan de test Le rédacteur doit appliquer lui-même la chek-list des tests à son propre développement, ceci permettant de réduire au maximum les erreurs que le testeur aura à découvrir. 9 Déploiement sur serveur Toujours revérifier l'installation des Metrics lors d'une mise à jour de FormPublisher !!! Règles de nommage des variables 1. pas deux fois le même nom de variable !!! 10 2. pas de caractères spéciaux dans le nom de la variable 3. surtout pas de chiffre au début du nom de la variable !!! 4. utilisation correcte des « pipe » (« | ») pour construire un arbre xml pertinent, en regroupant les variables, en groupes, sous-groupes, etc. (cf. exemple ci-dessous) 5. ne pas oublier les <Customizer> pour TOUS les include et les gosub 6. toujours nommage en notation « java », c'est-à-dire une minuscule au début du nom, avec les mots accolés (pas de « _ ») et séparés simplement par la majuscule du mot suivant 7. toujours nommage avec des mots lisibles par un humain 8. nommage avec des mots en anglais de préférence 11 Pré-remplissage Utiliser le bloc commun include_preremplissage_profil.jxml. 12 Layout Il ne faut pas vouloir modifier les aspects graphiques de présentation de façon ponctuelle sur un projet de formulaire. → Toujours laisser faire le layout. C'est malgré tout très faisable (au moyen de l'APPLI.REF), mais cela engendre beaucoup de problèmes d'efficacité de développement ou de mise à jour, et surtout, de cohérence pour l'usager. Règle d'or Page 4 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 N Titre Recommandation L'usage d'un layout particulier défini dans l'APPLI.REF est à éviter au maximum. Pour les RadioBox, on utilise <RadioBox OptionsPerLine="1">. 13 Nouveau projet Utiliser EASI_ZeroVierge dans Subversion qui contient toutes les rubriques possibles. 14 Rubriques de renseignements Les rubriques de renseignement obéissent à quelques règles éditoriales. Pour la personne de contact : Il faut toujours faire figurer les renseignements suivants lorsqu'on mentionne une personne de contact : → civilité : « M. » ou « Mme » car il est possible que le prénom ne permette pas de fixer le genre de la personne, ce qui peut mettre mal à l'aise l'usager → prénom en minuscules, nom en majuscule pour distinguer les noms qui ressemblent à des prénoms → téléphone, marqué « Tél. : » et le numéro en notation IBPT On peut y ajouter : un titre, une adresse courriel, le fax, le site web, etc. 15 Ordre des sections Objectif de la standardisation de l'ordre des sections Permettre aux usagers qui utiliseront plusieurs formulaires différents de retrouver toujours la même trame, le même ordre, la même structure, autant que possible. Éviter que le rédacteur traite les contenus similaires de façon trop hétéroclite. Liste des documents à joindre Il FAUT que le <Title> de la section appelante soit « Liste des documents à joindre ». 17 Enquête de satisfaction L'enquête de satisfaction doit figurer dans TOUS les formulaires, SAUF exceptions précisées dans la liste. 18 Voies de recours et vie privée Le titre de la section contenant l'appel au gosub doit être « Protection de la vie privée et voies de recours » (ou « Protection de la vie privée » dans le second cas) 19 Typographie Objectifs des règles typographiques 16 Recommandation importantissime !!! Il FAUT que l'Id de la section appelante soit "depotDocuments", au caractère près. Montrer une image sérieuse de la Wallonie, de respect de la langue utilisée. Garantir une certaine harmonie et une cohérence dans la présentation pour l'usager. 20 Dénominations et logos officiels En accord avec la Direction de la Communication, les dénominations et logos officiels doivent être utilisés. Jamais les raccourcis DGO1, etc. 21 Lisibilité Suivre les 10 règles d'or de la lisibilité. 22 Principes de mise en page Minimiser la mise en page, laisser faire les feuilles de style au maximum. 23 Tableaux Il faut garder le plus possible la structure xml du formulaire conforme à la structure réelle des données. La mise en évidence de texte se fait exclusivement en gras. Le développeur de formulaire doit être très attentif en codant une table avec des conditions sur les cellules <Td>. Soit on évite absolument de mettre une condition sur toutes les lignes <Tr> Soit il faut s'assurer que toutes les conditions couvrent l'ensemble des valeurs possibles pour la variable de test dans la condition IsVisible. Ne jamais placer de condition sur un <Paragraph> seul dans une cellule. 24 Formattage des champs [À ré-écrire] 25 Libellés des Toujours utiliser un <Label> pour le libellé d'un champ, dans une <Question>. Page 5 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 N Titre Recommandation questions Ne jamais mettre « : » à la fin du libellé. 26 Blocage de l'accès direct Pour éviter que les usagers accèdent directement à un formulaire sans session, on bloque l'accès en direct. 27 Accès DB en lecture [Pour mémoire, obsolète] 28 Utilisation des champs mémo D'une manière générale, l'utilisation du champ mémo n'est pas recommandée. Il faut toujours préférer proposer de joindre un fichier word, permettant de rédiger en texte riche. Attention aux libellés trop longs Si on utilise les champs mémo malgré la première recommandation, toujours essayer de limiter la taille des champs, et en particulier celle des champs mémo. Utiliser le compteur de caractère OBLIGATOIREMENT dès lors qu'il y a une limite sur la taille d'un champ mémo. 29 Recalcul des totaux Lorsqu'il y beaucoup de données sur une page, avec un calcul sur ces données, il faut ajouter un petit bouton pour que l'usager puisse « Cliquer pour recalculer les totaux ». 30 Liste de paires codes libellés On utilise cette technique lorsque l'usager doit pouvoir faire une recherche sur base d'une paire codes-libellés, c'est-à-dire rechercher un libellé sur base d'un code ou l'inverse, et lorsque cette liste de paires codes-libellés est peu variable dans le temps, c'est-à-dire pas de modification plus fréquentes que les mises à jour du formulaire correspondant. 31 Itérations Utiliser le DataIterator sur l'objet à multiplier. 32 Ensemble de questions Ne pas utiliser l'objet <QuestionSet>. 33 Notifications multiples Utiliser le code approprié pour la notification courriels multiples. 34 Problèmes de session Pages de longueur raisonnable dans les formulaires Calcul du pdf avec FOP Il faut utiliser le mode serveur. 35 Ne pas fabriquer une page avec trop long tableau ou trop de champs mémo. Le cas échéant, toujours essayer de les subdiviser. Page 6 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 1. Degrés de liberté du rédacteur 1.1 CONTEXTE DE L'OUTIL FORMPUBLISHER L'outil FormPublisher Factory est une « moulinette » automatique qui manipule (« input ») des fichiers .jxml et des fichiers d'environnement (MY.REF) pour produire (« output ») une application web en langage java (war). L'outil FormPublisher Studio est un éditeur expert qui aide le rédacteur à éditer les fichiers .jxml. NB : cette opération pourrait également être faite dans tout autre éditeur xml que FormPublisher Studio, ou même dans un éditeur texte simple. Environnement MY.REF FormPublisher Studio Fichiers .jxml FormPublisher Factory Code java .war L'environnement de référence (MY.REF) est défini dans la recommandation n° 4. Les fichiers .jxml décrivent les formulaires en particulier. Avantages de l'outil : → réduire au maximum le travail de mise en page ou de développement de code → ce qui permet au rédacteur de pouvoir se concentrer sur l'essence-même du formulaire : le bon ordre des questions et leur libellé le plus lisible possible. 1.2 FAIRE LA MÊME CHOSE DE 2 FAÇONS ÉQUIVALENTES ? Cependant, l'outil permet, dans de nombreux cas, de faire la même chose de plusieurs façons quasi équivalentes, mais pas totalement équivalentes. Exemple, pour faire une liste numérotée, il y a deux solutions : • soit l'objet <List> <List MarkerStyle="number"> <ListItem><Paragraph>Premier objet</Paragraph></ListItem> <ListItem><Paragraph>Second objet</Paragraph></ListItem> </List> • soit un tableau <Table> <Table> <ColumnDefinitions> <ColumnDefinition Width="3%" /> <ColumnDefinition WidthPaper="97%" /> </ColumnDefinitions> <TableBody> Page 7 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 <Tr> <Td><Paragraph>1.</Paragraph></Td> <Td><Paragraph>Premier objet</Paragraph></Td> </Tr> <Tr> <Td><Paragraph>2.</Paragraph></Td> <Td><Paragraph>Second objet</Paragraph></Td> </Tr> </TableBody> </Table> Ceci oblige souvent le rédacteur à se poser des questions, voire le pousse à « réinventer la roue ». Les présentes recommandations ont pour but de réduire cet effet. Objectif des recommandations : → réduire le degré de liberté du rédacteur → en lui permettant de rédiger toujours les mêmes choses de la même manière → de suivre des recettes toutes faites → pour gagner du temps de fabrication, de mise à jour et de maintenance et surtout → pour uniformiser au mieux l'aspect des formulaires. Pour l'exemple, la recommandation sera d'utiliser toujours l'objet <List> qui est prévu à cet effet, qui numérote automatiquement et qui fixe automatiquement la largeur réservée à la numérotation de la liste. 1.3 RÉDACTION D'UN FORMULAIRE Recommandation générale concernant la rédaction du formulaire : Le rédacteur doit toujours retranscrire exactement ce qui est demandé (description du travail dans le « Mandat » ou faite par les experts en lisibilité), mot à mot, sauf → si c'est contraire à une recommandation du présent cahier, → si c'est une faute d'orthographe, → si c'est contraire aux règles de lisibilité ou à la charte graphique. 1.4 CONCLUSION L'application stricte des présentes recommandations doit produire des formulaires wallons harmonisés pour les usagers, en bénéficiant toujours des dernières améliorations ergonomiques de l'outil, et doit optimiser le rendement de fabrication de ceux-ci. Page 8 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 1.5 RAPPORT DES BUGS DE FORMPUBLISHER STUDIO Dans un souci d'amélioration continue, il est évidemment important de corriger l'outillage de ses bugs. Lorsque l'application FormPublisher Studio se plante, il faut récupérer les logs qui se trouve dans C:\Documents and Settings\[User]\Local Settings\Temp\FormPublisherStudio.log et les copier sous le nom suivant : S:\developpement\jpublisher\00.installJway\Jway bug report\FP31\AAAAMMJJx_FormPublisherStudio.log où AAAAMMJJx est la date à l'envers suivi de « x », une lettre en commençant par « a », puis « b », etc. Les logs sont envoyés régulièrement à Jway pour corrections. Recommandation générale concernant l'utilisation de FormPublisher Studio : Toujours récupérer les logs après un plantage du Studio et les déposer à l'endroit ad hoc. ***** Page 9 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 2. Moteur deux temps Le rédacteur utilisant l'outil FormPublisher peut être amené à intervenir à 2 moments distincts dans le processus de fabrication du formulaire. 2.1 LE PROTOTYPE La première chose à fixer dans la réalisation d'un formulaire, c'est une forme d'ébauche, appelée « prototype » ou « maquette » en interne chez eWBS, qui doit contenir : • le titre (<Title>), la nature (<Subtitle>) et la catégorie du formulaire (<MetaField Name="category">), • les rubriques de renseignement (complètes et exhaustives), cf. recommandation n° 14, page 57, • la structure du formulaire, c'est-à-dire les sections et les sous-sections, leur bon ordre et leur titre, cf. recommandation n° 15, page 60, • les questions et leur libellé exact et définitif, • les parties de texte d'explication ou de commentaire, • la liste des documents à joindre, cf. recommandation n° 16, page 62, • le libellé de la déclaration sur l'honneur éventuelle, avant la signature, • la référence aux annexes. Les éléments de cette ébauche peuvent être : • soit présentés sur une feuille manuscrite, un mail ou un document électronique (MS Word ou tableur), • soit développé directement dans l'outil FormPublisher Studio, donc sous format pdf. Pour fixer les idées, le premier temps représente, typiquement, 20 % du temps total d'utilisation de FormPublisher Studio pour la réalisation complète d'un formulaire. Recommandation : À la fin de la réalisation du prototype, certains éléments clefs doivent avoir été validés définitivement par l'administration responsable du formulaire. Celle-ci peut faire cette validation, par exemple, sur base du pdf produit lors de la publication du prototype. 2.2 L'INTELLIGENCE DU FORMULAIRE Le second temps du rédacteur consiste d'abord à encoder l'ébauche validée (uniquement si elle n'a pas déjà été réalisée dans l'outil pour la validation du prototype). Ensuite, il s'agit de fixer les aspects dynamiques du formulaire, ce qu'on peut appeler « l'intelligence », c'est-à-dire, entre autres : • vérifier le versionning, fixer les paramètres généraux (publication.properties), Page 10 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 • • • • • • • • • • • fixer les <Question>, le contrôle, le nommage de la variable, les options, le format, la taille, etc. fixer les conditions sur les <Section>, les <Content>, les <Paragraph>, etc., fixer les itérations, les sous-itérations, développer les codes particuliers (code JIL), développer les éléments de l'environnement qui doivent être particularisés (APPLI.REF), fixer la mise en page pdf (sauts de page + présentation des tableaux), tester l'intelligence, vérifier les connexions avec le portail (pré-remplissage, upload de documents, sauvegarde, soumission), vérifier la production statique et dynamique du pdf, préparer à la mise en production (dictionnaire, war) etc. Pour fixer les idées, le second temps représente, typiquement, 80 % du temps total d'utilisation de FormPublisher Studio pour la réalisation complète d'un formulaire. Recommandation : Avant de commencer à travailler sur l'intelligence du formulaire, le rédacteur doit s'assurer de disposer de tous les éléments nécessaires à sa réalisation et à sa mise en ligne. La check-list du rédacteur est là pour l'y aider. La check-list du rédacteur est détaillée dans la Recommandation n° 3, page 12. ***** Page 11 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 3. Check-list du rédacteur Cette recommandation détaille la 2e partie de la Recommandation n° 2, page 10. Avant de commencer à travailler sur l'intelligence du formulaire, le rédacteur doit s'assurer de disposer de tous les éléments nécessaires à sa réalisation et à sa mise en ligne. La check-list du rédacteur est là pour l'y aider. 1. La description complète mais très synthétique du processus de constitution du dossier de demande : qui signe, quand, où renvoyer, pour quand, combien de formulaires, combien de documents joints, etc. 2. La validation définitive du prototype par l'administration, qu'il soit déjà dans FormPublisher ou non. 3. L'accord définitif de l'administration sur la charte graphique par défaut, en montrant par exemple, le prototype en pdf et en html (cf. pour éviter par exemple que l'administration concernée ne trouve les formulaires « pas assez sexys » à la fin du projet). 4. La source (MS Word, pdf ou autre) du formulaire original, si elle existe, ainsi que les annexes et la notice éventuelles. 5. Un exemple de formulaire complètement rempli (avec des données réelles, anonymisées si besoin), en essayant d'avoir autant d'exemples que de cas représentatifs différents. 6. Une indication sur la taille de tous les champs textes, sur le format de tous les champs avec nombre, sur la taille de tous les champs mémo (soit en terme de 1/4 de page, de 1/2 page, etc., soit en nombre de caractères, maximum et éventuellement minimum). 7. Une indication sur le nombre d'éléments (maximum et minimum) pour un tableau ou une liste itérative. 8. Une indication sur le contrôle de chaque champs où un contrôle spécifique est souhaité. 9. Une indication sur le caractère obligatoire ou optionnel de chaque champs. 10. Une indication sur les éventuelles conditions de visibilité (IsVisible) d'un champs, et les éventuelles conditions du caractère modifiable (IsReadOnly) d'un champs. 11. La description (la plus précise possible) de l'intelligence et des fonctionnalités souhaitées dans le formulaire html (exemples : le calcul de sommes, la vérification de dates, les liens DB, les appels à des WS, etc.) 12. Les fonctionnalités de base à supprimer éventuellement (formulaire vierge, accès direct au formulaire, sauvegarde sur portail, pré-remplissage, etc.) 13. Le nombre de pages maximum si impression papier à grande échelle par exemple. 14. La traduction à faire (en allemand ou autre). 15. La signature eID ou non et la description des implications procédurales et organisationnelles pour le backoffice. 16. La connexion technique avec le backoffice si pertinent, et l'expression explicite du besoin de nommage des variables spécifiques pour le BO. 17. La nécessité de récupérer du contenu backoffice dans le formulaire (via WebService) 18. La confirmation de la mention vie privée et médiateur. Page 12 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 19. La confirmation de la présence de l'enquête de satisfaction. 20. La description des documents de complément : ◦ la page de validation, ◦ la page après validation (portail), ◦ le glossaire, ◦ la faq, ◦ les instructions pour le remplissage, ◦ les instructions après validation, ◦ les instructions après envoi, ◦ les instructions après signature, ◦ le mail de retour à l'usager (portail), ◦ le mail de retour à l'administration (portail), ◦ le compte récepteur pour l'administration (portail). 21. L'accord (négocié) définitif de l'administration sur la durée des tests, que ceux-ci soient réalisés en interne exclusivement (tests qualité MAM-NSI + tests avec des données réelles), ou partiellement à l'administration (tests avec des données réelles uniquement). Auquel cas, il faut également la mention des personnes qui vont les réaliser et le temps qu'ils vont pouvoir y consacrer. 22. L'accord définitif de l'administration sur la procédure de validation et la mention de la personne qui validera. 23. L'accord définitif de l'administration à propos des demandes de corrections éventuelles : ◦ qui doivent être faites sur un support provenant de la publication de la dernière version FormPublisher en chantier (et non, par exemple, de la version MS Word originale), ◦ et qui ne peuvent pas être l'expression de besoins non préalablement définis (« change request »), auquel cas, une renégociation du délai de réalisation doit pouvoir être attendue. 24. L'accord définitif de l'administration sur la durée de la mise en ligne incompressible de 1 semaine, nécessaire notamment pour les tests de charges à la DEX. 25. La date de mise en ligne voulue, en ayant négocié une date pas trop proche d'un congé ou d'un long week-end (idéalement entre mardi et jeudi). Idem pour la date éventuelle de fin de mise en ligne voulue, qui est encore plus délicate, car celle-ci concentre très potentiellement un surplus de connexions par les usagers. 26. La mention des endroits où apparaissent le lien vers le formulaire (site formulaires, avec le contenu exacte à afficher pour présenter ce lien, et/ou sites spécifiques) et du co-marquage éventuel. ***** Page 13 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 4. Qualité de l'environnement 4.1 DÉFINITION L'environnement contient : • l'ensemble des trames de formulaire (« templates »), • le recueil de segments linguistiques (phrases ou mots dans un fichier i18n) utilisés par ces trames, • les caractéristiques de présentation (layout, c'est-à-dire feuilles de style, images, etc.) • et les codes informatiques de contrôle, c'est-à-dire « la mécanique » ou « l'intelligence » (xsl, javascript et java, notamment pour les champs du formulaire). 4.2 PRINCIPE DE SUR-DÉFINITION Les fichiers pris en compte lors de la publication obéissent au principe de surdéfinition (« overruling »). REF fichiers de l'environnement commun à tous les clients de Jway, interne au moteur de FormPublisher Factory MY.REF fichiers de l'environnement commun à tous les projets de formulaires eWBS APPLI.REF fichiers particuliers à un seul projet de formulaires D'une manière générale, lors d'une publication, → FormPublisher Factory prend d'abord le fichier dans APPLI.REF, → s'il n'existe pas dans APPLI.REF, il le prend dans MY.REF, → s'il n'existe pas ni dans APPLI.REF, ni dans MY.REF, il prend le fichier par défaut de l'outil dans REF. 4.3 PARAMÈTRES DE PUBLICATION.PROPERTIES Il existe une exception au principe de recommandation n° 4, page 14 : les fichiers sur-définition mentionné dans la APPLI.REF/common/publication.properties APPLI.REF/desktop/publication.properties Dans ce cas, ils n'écrasent pas les fichiers correspondants du MY.REF, mais ce sont les paramètres définis dedans qui s'ajoutent ou écrasent à celles définies dans les fichiers correspondants du MY.REF. Page 14 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Pour publication.properties, le principe de « sur-définition » s'applique aux paramètres et pas aux fichiers entiers. Ces paramètres peuvent également formPublisherConfig.properties sur le serveur. être définis dans un fichier Il faut distinguer l'utilisation de ces paramètres en conception (publication par le BA avec FormPublisher) ou au fonctionnement (exécution par l'usager). Certains paramètres n'ont d'effet qu'au moment de la conception, d'autres qu'en fonctionnement. L'utilisation de formPublisherConfig.properties du serveur de déploiement pour y placer des propriétés doit être réservée aux propriétés utilisées au fonctionnement (ex: adresse de webservices,..). Les propriétés utilisées à la conception (ex: liées à l'affichage, aux thèmes) seront ignorées sur le serveur de déploiement. En résumé, voici l'ordre de priorité des propriétés lors de la conception (ou publication par le BA) : 1. APPLI.REF\desktop\publication.properties 2. APPLI.REF\common\publication.properties 3. MY.REF\desktop\publication.properties 4. MY.REF\common\publication.properties 5. .jway\formPublisherConfig.properties (sur le PC du FormPublisherStudio) Voici l'ordre de priorité lors du fonctionnement (ou déploiement ou exécution) : 1. APPLI.REF\desktop\publication.properties 2. APPLI.REF\common\publication.properties 3. MY.REF\desktop\publication.properties 4. MY.REF\common\publication.properties 5. .jway\formPublisherConfig.properties (sur le serveur de déploiement) 4.4 GARANTIES DE DÉVELOPPEMENT POUR EWBS Pour eWBS, la garantie corrective (bugs) et évolutive (nouvelles versions ou nouvelles fonctionnalités) s'applique sur le MY.REF propre à eWBS. Celui-ci est unique. NB : Le MY.REF est décliné en autant de versions que de langues utilisées, il existe donc actuellement un MY.REF traduit en allemand. Toute correction ou évolution de l'outil ne sera donc JAMAIS répercutée automatiquement, ni garantie, sur l'APPLI.REF. C'est un point important, car il guide toute l'approche transversale de la fabrication des formulaires électroniques. Recommandation : Page 15 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Toujours minimiser l'utilisation de l'APPLI.REF au strict nécessaire. Toujours essayer d'abord de trouver une solution valable pour tous les formulaires, donc au moyen du MY.REF. Ceci permet d'éviter des fourches (« fork ») de développement et de minimiser les risques d'erreur, les efforts et les coûts lors d'une mise à jour ou d'une migration. ***** Page 16 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 5. Qualité d'un projet 5.1 STRUCTURE DE FICHIERS La structure recommandée pour le répertoire d'un projet de formulaires est : APPLI.REF/common/publication.properties APPLI.REF/common/* APPLI.REF/desktop/publication.properties APPLI.REF/desktop/* annexe_*.jxml branchement.jxml formulaire_*.jxml index_glossary.jxml robots.txt xatoms.jxml xcommon.jxml xfaq.jxml xinstructions_*.jxml xvalidation_*.jxml Recommandation : Tous les autres fichiers de type bureautique qui sont liés au formulaire doivent être sortis du projet (et du dépôt Subversion). Tous les autres fichiers de type image doivent figurer dans un répertoire image de l'APPLI.REF. Tous les autres fichiers de travail doivent être sortis du projet (et du dépôt Subversion). Les fichiers de type bureautique doivent être déposés dans le dépôt des fichiers http://forms6.wallonie.be/formulaires/, • soit via l'url avec le nom du fichier en direct (si très très peu de mises à jour), • soit via slot TYPE=OLD si mises à jour possibles (préférable). Objectifs : Le problème des fichiers de type bureaucratiques dans le war du formulaire, c’est qu’en cas de modification du fichier, il faut republier. Il faut découpler le cycle de vie de ces fichiers du formulaire proprement dit. Le problème des autres fichiers de travail et des images, c’est rendre le répertoire principal lisible, sinon on ne s’y retrouve pas. 5.2 NOMMAGE STRICT DES FICHIERS Recommandation : Page 17 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 S'il y a un seul formulaire (et aucune annexe), il doit s'appeler formulaire.jxml et alors le fichier de branchement.jxml n'existe pas. S'il y a plusieurs formulaires et/ou annexes, tous les formulaires se nomment formulaire_*.jxml et toutes les annexes annexe_*.jxml (tout en minuscules, séparation des mots par « _ »). Alors branchement.jxml doit exister. Les fichiers dépendants doivent se nomment include_*.jxml (au niveau d'un <content>) ou miniclude_*.jxml (à l'intérieur d'un <content> ou équivalent). Les include et les miniclude ne figurent jamais dans le branchement.jxml. Les autres fichiers de metadonnées sont dans des fichiers nommés x*_*.jxml (xatoms, xcomon, xfaq, xinstructions, xvalidation) Exceptions : • index_glossary.jxml ne peut pas changer de nom • actuellement, les fichiers liés au listDataHandler n'obéissent pas (encore) à ces recommandations, mais un travail sera fait pour que ce soit le cas. Objectif du nommage strict des fichiers : → Ceci permet de faire plus facilement des recherches (et remplacement) massives de chaînes de caractères dans plusieurs projets à la fois, avec des shell scripts ou avec un éditeur texte tel que Notepad++. → Ceci permet aussi au projet d'être facilement testé sur le serveur de tests en relation avec le portail, sur un slot prédéfini sur des DocumentId="formulaire", par exemple. → Ceci permet également aux rédacteurs de voir d'un seul coup d’œil où sont les formulaires et annexes, puisque le classement alphabétique des fichiers d'un répertoire les positionne toujours au même endroit visuellement. 5.3 PUBLICATION.PROPERTIES L'APPLI.REF est donc TOUJOURS présent dans un projet de formulaire, car au minimum deux fichiers common/publication.properties et desktop/publication.properties doivent y être. Le contenu de ces fichiers publication.properties doit être typiquement rédigé en anglais. La structure obligatoire suivante, calquée sur la structure des fichiers publication.properties présents dans le MY.REF et ceux du REF : APPLI.REF/common/publication.properties : # ============================================ # eWBS PARAMETERS # ============================================ # Permit direct access to eform # values : ENABLED / DISABLED easi.form.direct=DISABLED # Permit document upload # values : ENABLED / DISABLED easi.form.uploadable=DISABLED # Indicate slot signature type # values : # NOSIGN => no signature Page 18 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 # NORMAL => paper only # SIGNABLE => paper or eID # ESIGNONLY => eID only easi.form.sign.type=NORMAL # ============================================ # PUBLICATION # ============================================ # Common references jway.reference.MyRef=D:\\data\\jpublisher\\03.publications\\@COMMUN\\Template_f older jway.reference.Images=D:\\data\\jpublisher\\03.publications\\@COMMUN\\Images_fo lder jway.reference.Includes=D:\\data\\jpublisher\\03.publications\\@COMMUN\\Include _folder # ============================================ # VALIDATION # ============================================ # Environment cleaning jway.clean.referenceRepository=true jway.clean.tmp.file.fo=true jway.clean.tmp.file.pdf=true jway.xml.validation=false APPLI.REF/desktop/publication.properties : # ============================================ # PUBLICATION # ============================================ # Indicate the starting document of the publication # values : formulaire.html/branchement.html jway.boot.edoc=formulaire.html # Indicate the name of the publication jway.publication.name=EASI_DEFAULT_v01.01.01.L3.FP22 # Indicate the version of the publication jway.publication.version=v01.01.01.L3.FP22 # Indicate if the WAR must be secured or not jway.secure.war=false # Disable conditions in PDF until form is completed jway.xsl.param.disableConditionsInPDF=true Recommandation : Les fichiers publication.properties contiennent 2 volets clairement distincts : « eWBS PARAMETERS » et ensuite, toutes les autres rubriques communes à jway. Le premier volet eWBS est dans common/publication.properties et contenir au minimum les 3 variables suivantes : easi.form.direct=ENABLED/DISABLED easi.form.uploadable=ENABLED/DISABLED easi.form.sign.type=NOSIGN/NORMAL/SIGNABLE/ESIGNONLY Le second volet Jway est en partie dans common/publication.properties et contient au minimum les 3 variables suivantes : Page 19 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 jway.reference.MyRef=D:\\data\\jpublisher\\03.publications\\@COMMUN\\Template _folder jway.reference.Images=D:\\data\\jpublisher\\03.publications\\@COMMUN\\Images_ folder jway.reference.Includes=D:\\data\\jpublisher\\03.publications\\@COMMUN\\Inclu de_folder et en partie dans desktop/publication.properties et contient au minimum les 3 variables suivantes : jway.publication.name=DGOX_NOM_v01.01.01.L3.FP22 jway.publication.version=v01.01.01.L3.FP22 jway.boot.edoc=formulaire.html/branchement.html 5.4 PARAMÈTRES EWBS • • • easi.form.direct=ENABLED/DISABLED permet/ne permet pas l'accès direct à un formulaire sans passer par le portail (cf. recommandation n° 26, page 85) easi.form.uploadable=ENABLED/DISABLED permet/ne permet pas la possibilité de joindre des documents électroniquement, via les include_annexe (cf. recommandation n° 16, page 62) easi.form.sign.type=NOSIGN/NORMAL/SIGNABLE/ESIGNONLY précise le mode de signature du formulaire ◦ NOSIGN pour un formulaire à ne pas signer ◦ NORMAL pour un formulaire signable sur papier uniquement ◦ SIGNABLE pour un formulaire signable sur papier ou avec l'eID, au choix ◦ ESIGNONLY pour un formulaire signable avec l'eID uniquement 5.5 PARAMÈTRES JWAY • • • • DANS PUBLICATION.PROPERTIES DANS PUBLICATION.PROPERTIES jway.publication.name=DGOX_NOM_v01.01.01.L3.FP22 donne le nom du war jway.publication.version=v01.01.01.L3.FP22 donne le numéro de version et doit être exactement le nom du war tronqué de son suffixe jway.boot.edoc=formulaire.html/branchement.html donne le DocumentId cible : ◦ soit « formulaire » si 1 seul formulaire dans le projet ◦ soit « branchement » si plusieurs formulaires dans le projet Les références doivent absolument être présentes dans le publication.properties du projet, car si elles sont dans le publication.properties des @COMMUN, cela ne suffit pas : ◦ jway.reference.MyRef=D:\\data\\jpublisher\\03.publications\\@COMMUN\\Te mplate_folder ◦ jway.reference.Images=D:\\data\\jpublisher\\03.publications\\@COMMUN\\I mages_folder ◦ jway.reference.Includes=D:\\data\\jpublisher\\03.publications\\@COMMUN\ \Include_folder 5.6 LOGO DE L'ADMINISTRATION ÉMETTRICE Le logo est dorénavant appelé par le nom du fichier image Page 20 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 <MetaField Name="departmentLogo">logoXXX.png</MetaField> dans le formulaire.jxml. Les images actuellement disponibles sont placées dans MY.REF\images\logo : logoASE_fr.png logoEASI.png logoEurodyssee_fr.png logoIFAPME.png logoSPW_fr.png/logoSPW_de.png logoVide.png Cette image sert à préciser le logo de l'administration émettrice qui apparaît en haut à droite du pdf et qui apparaît dans les pages Renseignement en html. Attention ! Comme convenu avec la Direction de la Communication (réunion du 22 juin 2009), le logo de l'administration sera la logo du Service public de Wallonie dans le cas de toutes les DG, et non le logo de la DG (cf. recommandation n° 20, page 72). Recommandation : Toujours utiliser le MetaField « departmentLogo ». Toujours utiliser le logo du SPW (et non le logo de la DG) pour les formulaires du SPW. 5.7 TITRES DU FORMULAIRE Comme spécifié dans la Recommandation n° 2, page 10, le prototype est l'étape de fabrication dans laquelle on doit avoir fixé définitivement 3 éléments identitaires du formulaire importants : • La catégorie (<MetaField Name="category">) est un libellé placé dans le header du formulaire électronique et dans le header de la première page du formulaire papier. Ce libellé doit permettre de regrouper (de façon très lisible et compréhensible) plusieurs formulaires ayant un point commun (dispositif commun, service administratif commun, démarche commune, événement déclencheur commun, ou autre). • La nature du formulaire (<Subtitle>) doit permettre (par un vocabulaire cohérent entre tous les formulaires wallons) à l'usager de comprendre rapidement ce que le formulaire va lui apporter. La nature du formulaire doit, sauf rares exceptions, être choisi dans une liste exhaustive de possibilités : ◦ Déclaration ◦ Demande de prime ◦ Demande de subside ◦ Demande d'enregistrement ◦ Demande d'agrément ◦ Inscription ◦ Rapport d'activité • Le titre (<Title>) doit donner l'identité du formulaire, sans reprendre ni le mot « formulaire », ni les mots repris dans la nature, ni les mots repris dans la catégorie. Page 21 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation : La catégorie (meta-field category), la nature (subtitle) et le titre (title) obéissent à quelques règles éditoriales 5.8 NETTOYAGE • Toujours nettoyer le répertoire d'un projet de tous fichiers inutiles (sources « word », fichiers .jxml non utilisés, fichiers doublons ou de backup *.~jxml, etc.). • Toujours revalider l'APPLI.REF et ne garder que les différences qu'il faut réellement garder pour le formulaire. Objectifs du nettoyage : Garder un environnement le plus générique possible, pour minimiser le travail sur les mises à jour, et surtout éviter de « forker ». Éviter de déposer des fichiers inutiles dans le dépôt de sources subversion. ***** Page 22 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 6. Ressources communes 6.1 DESCRIPTION Les ressources communes à tous les formulaires eWBS sont : @COMMUN\Images_folder banque d'images @COMMUN\Include_folder blocs communs : gosub_XXXX.jxml include_XXXX.jxml + miniclude_XXXX.jxml @COMMUN\Template_folder environnement MY.REF robot.txt fichier obligatoirement présent dans le répertoire de tout projet / nécessaire pour éviter aux robots internet de scanner les formulaires Mode d'emploi ensemble de fichiers communs à tous les formulaire, déposés sur le portail + Recommandation : Les ressources communes sont à ne JAMAIS modifier. Leur création et mise à jour suivent un processus indépendant de tout projet de formulaire. 6.2 DÉPÔT DE SOURCES Les ressources communes (@COMMUN) sont déposées dans subversion. Le répertoire @COMMUN doit être placé dans le même répertoire que les répertoires projet des formulaires, soit dans D:\data\jpublisher\03.publications\@COMMUN Recommandation Toujours reprendre (subversion>update) la dernière version en date des @COMMUN avant de travailler avec FormPublisher, surtout quand on commence un nouveau formulaire ou quand on fait une nouvelle version du formulaire. 6.3 BLOCS COMMUNS Règle d'or Ne pas modifier un bloc commun, puisque c'est une ressource commune. Les blocs communs sont utilisés dans de nombreux projets de formulaire, et l'impact d'une modification peut être grand. Les blocs communs peuvent évoluer, mais cette évolution relève d'une réflexion commune à tous les rédacteurs de formulaire et transversale à tous les projets de formulaire. Page 23 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation Ne pas particulariser un bloc commun. Dès qu'on particularise un bloc commun, on s'expose à de grosses difficultés d'évolution ou de mises à jour. Il faut éviter au maximum cette pratique. → Si on ne peut l'éviter, il faut d'abord soumettre à la réflexion des autres rédacteurs la possibilité de paramétrer le bloc commun pour le rendre plus flexible. → Si vraiment aucune solution n'est possible, la particularisation du bloc commun se fait en copiant le bloc de @COMMUN vers le projet, et en lui adjoignant un suffixe explicitant la particularité : « include_particulier » ***** Page 24 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 7. Dépôt des sources et versionning 7.1 DÉPÔT DES SOURCES SVN eWBS utilise Subversion (« SVN ») pour conserver et partager tous les fichiers liés à la conception des formulaires. Subversion est un serveur, accessible via internet, qui permet la mise en commun de fichiers, en vue d'un travail collaboratif tel que le développement informatique, en permettant de partager et de synchroniser les dossiers de travail de plusieurs développeurs. Le serveur SVN de eWBS est accessible via l'url http://svn.easi.wallonie.be et est soumis à un accès autorisé. eWBS utilise Subversion associé à Tortoise (http://tortoisesvn.net/downloads pour son téléchargement et son installation par un administrateur du PC). Tortoise, une fois correctement installé, ajoute des fonctionnalités nouvelles (options) au « clic droit » sur un fichier ou un dossier dans l'explorer de Windows (cf. screenshot cicontre). Voici la description des principales options : 7.1.1 Checkout Le dépôt est le dossier commun sur le serveur et la copie de travail est le dossier sur le PC du développeur. SVN Checkout permet de créer une copie de travail à partir du dépôt. Il est alors nécessaire de préciser l'url du dépôt (url repository) et l'url de la copie de travail sur son PC (checkout directory). Pour un projet de formulaires dont le nom est DGXX_FORM (cf. section 7.2 pour la définition de la nomenclature à suivre), l'url repository sera : http://svn.easi.wallonie.be/DGXX_FORM /trunk/fr 7.1.2 Copie de travail Une fois déposés sur son PC, tous les fichiers ont un statut « vert » (marque « v » dans un cercle vert devant le fichier). Dès qu'un fichier est modifié sur le PC par le développeur, il passe au statut « rouge » (marque « ! » dans un cercle rouge devant le fichier), ce qui signifie qu'il devient différent du dépôt et qu'il est désynchronisé. Pour qu'il soit transmis, partagé et utilisable par les autres développeurs, il faudra d'abord à nouveau le resynchroniser (cf. commit section 7.1.3 ci-dessous). 7.1.3 Update et Commit Les options Tortoise sont disponible via un clic droit sur n'importe quel fichier ou dossier de la copie de travail. Les plus importantes et utiles sont « update » et « commit ». Commit permet de mettre à jour le dépôt avec les éléments (fichiers ou dossiers) désynchronisés (marqués en rouge) de la copie de travail. C'est en quelque sorte « l'upload » du travail du développeur. Update permet de de mettre à jour la copie de travail avec les éléments qui ont été modifiés et commités par d'autres depuis la dernière synchronisation. Page 25 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 C'est en quelque sorte le « download » du travail des autres développeurs. Il est vivement conseillé de mettre à jour la copie de travail (update) avant toute modification et de transmettre le travail réalisé (commit) après chaque étape importante de développement. Bonne pratique Limiter les commits : pas besoin de commiter à chaque modification d’un fichier, regrouper de manière cohérente les commits. Lors d'un commit, il est très important de bien commenter le travail réalisé, car cette information sera utile plus tard et sera utilisée par tous les autres développeurs pour s'informer rapidement de la teneur du travail réalisé. Un numéro de version peut être ajouté pour mieux faire le lien entre la release dans SVN et le nom du war publié. Recommandation Il faut ajouter systématiquement le numéro de version si le commit correspond à un déploiement d'un war sur l'environnement de test (et à fortiori sur tout autre environnement). Le format du commentaire doit être comme suit : « *** vMM.mm.cc *** » + le commentaire après. Dans le commentaire après, toujours commencer par rappeler la référence de la demande JIRA correspondante « JIRA-xxx » Terminer par un commentaire libre si pertinent. Objectif de la recommandation : Il faut toujours pouvoir retrouver la release exacte dans SVN qui correspond exactement au war déposé quelque part. Et toujours pouvoir raccrocher la release à la tâche JIRA. NB : Les règles de nomenclatures pour le numéro de version sont expliquées aux sections 7.2 et 7.3 infra. 7.1.4 Show log Show log permet d'afficher le résumé des dernières actions effectuées sur le dépôt : qui a fait quoi, et quand. C'est très utile pour visualiser les modifications apportées. 7.1.5 Clean up Parfois, les marqueurs rouges et verts ne reflètent pas le statut réel d'un fichier après de multiples update et commit. Il se peut également qu'un marqueur jaune apparaisse, signalant un réel problème de conflit de statut entre le dépôt et la copie de travail. Clean up permet de tenter (et souvent, il y arrive) de nettoyer les marqueurs. Page 26 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 7.1.6 Autres options En dehors des options décrites ci-dessus, il existe de nombreuses options dont la description est moins utile pour une utilisation basique. 7.2 NOMENCLATURE À SUIVRE Nomenclature du nom DGXX_FORM → pour les formulaires SPW d'un projet OIP_FORM → pour les formulaires des OIP exemples : DGO5_InfraPersAgees, FOREM_AccompagnementChomeurs /!\ Il faut que ce nom de projet soit EXACTEMENT celui du projet dans le dépôt de sources SVN. Nom du war correspondant, pour la mise en chantier DGXX_FORM_vMM.mm.cc.Lxx.jjj.eID.war exemple : DGO5_InfraPersAgees_v01.04.06.L3.FP2.eID.war DGXX_FORM_vMM.mm.cc.war Nom du war correspondant pour la exemple : mise en production DGO5_InfraPersAgees_v01.04.06.war Où DGXX = DGT, DGO1, DGO2, DGO3, DGO4, DGO5, DGO6, DGO7 OIP = ASE, IFAPME, FOREM, etc. FORM est le nom du formulaire (règle de nommage : nom composé, pas séparé par des « _ », mais séparé par la majuscule du mot suivant) Version = vMM.mm.cc MM = version majeure mm = version mineure cc = version corrective Information après la version : Lxx.jjj.eID 7.3 INCRÉMENT Lxx = version du layout (L1, L2A, L3, etc.) jjj = version de l'outil (II.2.1, II.3.1, II.4, FP1, FP2, etc.) eID = si signature eID DE VERSION Recommandation Lorsque la version en cours (trunk dans subversion) est la version en production : Page 27 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 → soit on incrémente la version majeure (MM = MM+01) et on remet les autres à 01 (mm=01, cc=01), → soit on incrémente la version mineure (mm = mm+01) et on remet les autres à 01 (cc=01). Lorsque la version en cours (trunk dans subversion) n'est pas la version en production (version de travail), on incrémente la version correction (cc = cc+01). 7.4 VERSION MINEURE OU MAJEURE ? L'incrément de version mineure est le plus courant. L'incrément de version majeure n'intervient que lorsque : • soit le formulaire est revu fondamentalement, • soit le formulaire subit une mise à jour correspondant à un changement annuel (ou trimestriel ou autre, cf. « runs » pour Prime à l'emploi), • soit à fortiori lorsque cette nouvelle version doit cohabiter avec la précédente (exemple : les primes énergie), • soit une combinaison de plusieurs de ces raisons. 7.5 PROCÉDURE POUR INCRÉMENT DE VERSION 1. Vérifier si la version en cours (dans le trunk de subversion) est une version en chantier ou une version en production. 2. Incrémenter le numéro de version tel qu'expliqué à la section 7.3 ci-dessus et modifier les éléments suivants : ◦ APPLI.REF/publication.properties/jway.publication.name=DGXX_FORM_v MM.mm.cc.Lxx.jjj.eID ◦ APPLI.REF/publication.properties/jway.publication.version=vMM.mm.cc.L xx.jjj.eID ◦ commit dans subversion avec le commentaire obligatoire suivant : « *** vMM.mm.cc *** », cf. section 7.1.3. 7.6 CONCORDANCE DES VERSIONS LINGUISTIQUES Recommandation Il faut TOUJOURS concordance de numéro de version s'il y a concordance de traduction. Ce qui signifie par exemple que lorsqu'un formulaire existe en version FR et DE, lors de sa mise à jour : • si modification FR uniquement (c'est-à-dire qu'on n'a pas le temps de modifier immédiatement la version DE), alors on incrémente la version FR uniquement, Page 28 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 • ensuite, après mise à jour de la version DE, on incrémente les 2 versions FR et DE, même si la version FR n'a pas subi de modification ; il est d'ailleurs très très rare que la version FR ne soit pas modifiée lors de la traduction en DE... Il existe donc souvent de 2 étapes de versionning lors de l'existence d'une traduction : Étape Version FR Version DE initiale vMM.mm.cc vMM.mm.cc 1: màj FR cc=cc+1 cc (car inchangé) 2: màj DE cc=cc+2 cc=cc+2 ***** Page 29 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 8. Plan de test 8.1 CONTENU DES TESTS Les tests eWBS sont décomposés en 8 axes : 1) PDF frontpage 2) Structure xml du formulaire 3) PDF typographie 4) PDF corps 5) WEB 6) WEB relation avec le portail 7) Structure xml du datastore (avec analyse du tableau produit par 1 xslt) 8) Tests spécifiques au formulaire Chaque axe est décomposé en une liste de points à vérifier de façon exhaustive et commentée. Cf. document de plan de test. Le dépôt du war de test doit se faire sur forms6.test.wallonie.be, et le lien doit être fait avec l'un des slots de test mentionnés à la recommandation n° 9, page 32. Recommandation : Le rédacteur doit appliquer lui-même la chek-list des tests à son propre développement, ceci permettant de réduire au maximum les erreurs que le testeur aura à découvrir. 8.2 ARCHIVAGE DES TESTS Les résultats des tests font l'objet par l'analyste de la rédaction d'une tâche JIRA à laquelle on attache le plan de tests. Pour stockage consolidé, on peut ranger les résultats des tests avec les anciens sur S: dans le répertoire S:\developpement\jpublisher\06.planTests\DGXX_FORM\TESTS_yyyymmdd_TRI\*.odt Les datastores utilisés sont rangés sur S: dans le répertoire S:\developpement\jpublisher\06.planTests\DGXX_FORM\DS_yyyymmdd\*.ds Où DGXX_FORM est le nom du projet yyyymmdd est la date à l'envers TRI est le trigramme du testeur Page 30 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 8.3 DEBUGGING Pour tracer les appels webservice de manière très précise, et volumineuse, il est possible de modifier le fichier logging.properties inclus dans jilpages.jar dans WEBINF/lib du war produit par l'opération de packaging. Cette modification peut être faite avec un utilitaire comme 7zip avant le déploiement du war. La modification revient à ajouter en fin de fichier httpclient.wire.header.level=FINE et modifier la ligne : java.util.logging.FileHandler.level= INFO par la ligne : java.util.logging.FileHandler.level= ALL De la sorte les header produit lors de l'appel du webservice apparaîtront dans le fichier de log. Il est possible d'ajouter également en fin de fichier : httpclient.wire.content.level=FINE De la sorte le contenu de l'échange apparaîtra également. Attention ! Les logs ainsi générés sont très volumineux mais également très explicites. Ils peuvent donc convenir pour des tests mais leur usage doit être très limité. ***** Page 31 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 9. Déploiement sur serveur 9.1 LISTE Serveur DES SERVEURS Webserveur DNS Remarque : accessibilité eWBS production Tomcat 6 forms6.wallonie.be validation Tomcat 6 forms6.valid.wallonie.be non accessible en direct test Tomcat 6 forms6.test.wallonie.be 9.2 PROCÉDURE Cette • • • accessible en lecture uniquement accessible à eWBS DE MISE EN TEST ET VALIDATION procédure concerne les cas suivants : Test qualité Validation par l'administration d'une version prototype Validation finale par l'administration Procédure : 1. Publier l'environnement sous le nom DGXX_FORM_version.Lxx.FPx.eID.war 2. Pour tester le pré-remplissage, la sauvegarde, l'adjonction de documents (upload), les courriels d'accusé d'envoi ou de notification à l'administration, la signature papier, la signature eID ou la non signature, la soumission, la nouvelle demande, etc. : ◦ transférer le war sur forms6.test.wallonie.be, via la console Tomcat ou via un transfert FTP (ou transmettre le war à quelqu'un qui a accès au serveur forms6.test.wallonie.be) ◦ identifier le slot défini pour chaque formulaire du war --> par exemple, le 10985 ◦ pour le test du formulaire électronique ouvrir le lien http://espacepersonnel.wallonie.be/download? FORMULAIRE_ID=10985&LANG_ID=FR&TYPE=PEL ◦ pour le test du formulaire pdf vierge ouvrir le lien http://espacepersonnel.wallonie.be/download? FORMULAIRE_ID=10985&LANG_ID=FR&TYPE=PDF ◦ modifier le courriel de destination du courriel de notification (ou demander à quelqu'un qui a accès à la DB de test) : y placer le courriel du testeur ou un courriel auquel le testeur aura accès --> champ FORMULAIRE_EMAIL_DEST de la table FORMULAIRE ◦ NB : ce champ surcharge le champ FORMULAIRE_IDUSER_DEST de la table USERS, donc après le test, il faut vider ce champ Page 32 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 FORMULAIRE_EMAIL_DEST dans la table FORMULAIRE 3. Envoyer un courriel avec les liens ◦ au testeur si test qualité, ◦ à l'analyste spécialisé si envoi en validation ou en test à l'extérieur. Informer le testeur qu'après clic sur le lien, il devra entrer un login et un mot de passe valides. Lui suggérer d'utiliser son propre compte de test. 9.3 PROCÉDURE DE MISE EN PRODUCTION Cette procédure concerne uniquement le cas de la mise en production. Procédure : 1. Publier l'environnement sous le nom DGXX_FORM_version.Lxx.FPx.eID 2. Renommer le nom du fichier .war en : DGXX_FORM_version.war, c'està-dire qu'on supprime Lxx (layout), Jpxx (version de Jpublisher), et l'éventuel eID Cette étape est importante : ◦ pour pouvoir distinguer les wars en prod des wars en chantier, ◦ pour le fonctionnement des scripts CGI qui produisent un tableau des wars sur chaque serveur 3. Déposer le war DGXX_FORM_version.war sur forms6.test.wallonie.be dans /home/sites/forms6/appl/ 4. [obligatoire] Enregistrer l'xsd et le déposer dans S:\xterne\jpublisher\fait\XXX\DICO_aaaammjj\ pour un dépôt ultérieur et définitif dans S:\developpement\jpublisher\06.tests xsd dicos datastores\DGXX_FORM\DICO_aaaammjj\ NB : aaaammjj = année – mois - date 5. [facultatif] Enregistrer le dictionnaire *.html et le déposer dans S:\xterne\jpublisher\fait\XXX\DICO_aaaammjj\ pour un dépôt ultérieur et définitif dans S:\developpement\jpublisher\06.tests xsd dicos datastores\DGXX_FORM\DICO_aaaammjj\ 6. Encoder la demande de mise en production dans l'outil de la DEX qui s'appelle BMC, en y ajoutant la demande de modification du slot (champ FICHIER_URL de la table FICHIER) : ◦ http://helpdesk.intra.spw.wallonie.be, login = ..., pwd = ... 7. Vérifier les contenus des courriels de retour et vérifier le contenu des Page 33 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 fiches descriptives Nostra sur le portail Wallonie. 9.4 PRISE EN COMPTE DES CARACTÈRES SPÉCIAUX PAR FOP La prise en compte des caractères spéciaux (lettres grecques, ou symboles mathématiques, par exemples) dans le PDF est assurée par l'installation correcte de FOP à la fois sur la machine de publication (PC) et sur le serveur de formulaires. Attention ! FormPublisher ne détectera pas une mauvaise prise en compte et la publication se déroulera normalement. Il faut donc vérifier le résultat sur le pdf. /!\ Sur le PC (pour la fabrication du pdf vierge) et sur le serveur des formulaires (pour la fabrication du pdf dynamique). 9.4.1 Sur le PC Ajouter les lignes suivantes (si elles n'y figurent pas) dans le fichier suivant : C:\Documents and Settings\user\.jway\fop.xconf dans la balise <fonts>. Attention de bien vérifier les chemins (path) par rapport à la machine. <fonts> <font metrics-url="C:\Applications\jwayFP22\fop-1.0\MyMetrics\arial.xml" kerning="yes" embed-url="file:///C:\WINDOWS\Fonts\ARIAL.TTF"> <font-triplet name="Arial" style="normal" weight="normal"/> </font> <font metrics-url="C:\Applications\jwayFP22\fop-1.0\MyMetrics\arialBold.xml" kerning="yes" embed-url="file:///C:\WINDOWS\Fonts\ARIALBD.TTF"> <font-triplet name="Arial" style="normal" weight="bold"/> </font> <font metrics-url="C:\Applications\jwayFP22\fop1.0\MyMetrics\arialItalic.xml" kerning="yes" embedurl="file:///C:\WINDOWS\Fonts\ARIALI.TTF"> <font-triplet name="Arial" style="italic" weight="normal"/> </font> <font metrics-url="C:\Applications\jwayFP22\fop1.0\MyMetrics\arialBoldItalic.xml" kerning="yes" embedurl="file:///C:\WINDOWS\Fonts\ARIALBI.TTF"> <font-triplet name="Arial" style="italic" weight="bold"/> </font> </fonts> Recommandation : Toujours revérifier l'installation des Metrics lors d'une mise à jour de FormPublisher !!! 9.4.2 Sur le serveur de formulaires Copier les quatre fichiers dans le répertoire « MyMetrics » de l'installation fop : Page 34 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 sur forms.test.wallonie.be : /opt/fop/mymetrics/arial.xml /opt/fop/mymetrics/arialBold.xml /opt/fop/mymetrics/arialBoldItalic.xml /opt/fop/mymetrics/arialItalic.xml /opt/fop-1.0/conf/fop.xconf ***** Page 35 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 10. Règles de nommage des variables 10.1 PRINCIPES Une bonne structure du datastore dépend du nommage correct des variables des champs. Quelques règles sont à suivre obligatoirement, soit pour éviter les bugs, soit pour obtenir une structure cohérente, et lisible par un humain. Recommandations : 1. pas deux fois le même nom de variable !!! 2. pas de caractères spéciaux dans le nom de la variable 3. surtout pas de chiffre au début du nom de la variable !!! 4. utilisation correcte des « pipe » (« | ») pour construire un arbre xml pertinent, en regroupant les variables, en groupes, sous-groupes, etc. (cf. exemple ci-dessous) 5. ne pas oublier les <Customizer> pour TOUS les include et les gosub 6. toujours nommage en notation « java », c'est-à-dire une minuscule au début du nom, avec les mots accolés (pas de « _ ») et séparés simplement par la majuscule du mot suivant 7. toujours nommage avec des mots lisibles par un humain 8. nommage avec des mots en anglais de préférence1 Exemples : Le nommage des variables successivement comme suit : Name="demandeur|identification|nom" Name="demandeur|identification|prenom" Name="demandeur|adresse|rue" Name="demandeur|adresse|codePostal" Name="demandeur|adresse|localite" Name="demandeur|telecom|tel" Name="demandeur|telecom|mail" Name="objetDeLaDemande" permet d'obtenir un datastore dont l'arbre xml est le suivant : <datastore> <demandeur> <identification> <nom/> Attention ! Cette recommandation fait partie des bonnes pratiques générales de la programmation informatique, mais l'usage du français a été fort répandu dans la plupart des projets de formulaires (raison historique antérieure à cette recommandation), notamment dans les blocs communs. Cette recommandation de nommage en anglais est donc de facto difficile à suivre, sauf pour tout nouveau formulaire. 1 Page 36 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 <prenom/> </identification> <adresse> <rue/> <codePostal/> <localite/> </adresse> <telecom> <tel/> <mail/> </telecom> </demandeur> <objetDeLaDemande/> </datastore> 10.2 DICTIONNAIRE Le dictionnaire des variables d'un formulaire est l'ensemble des variables des champs du formulaire, avec leur type, leur taille, leur format, etc. Le dictionnaire peut être obtenu au moyen d'une xslt qui permet de produire un tableau html via, par exemple, les applications XALAN ou XSLTPROC. Pour XALAN : 1. copier XALAN en C:\apps\xalan-j_2_7_1 2. ajouter ce répertoire dans le path 3. zParseQuest4.xsl doit bien se trouver dans S:\developpement\jpublisher\xslt_extract_from_jpublisher Dans FormPublisher Studio, le dictionnaire est disponible via l'onglet « Data Dictionary », tout en bas à gauche. 10.3 GRAMMAIRE XSD La grammaire des variables d'un formulaire est la description des règles qui régissent le schéma xml du datastore. Cette grammaire est matérialisée par un fichier xsd, format xml particulier. Dans FormPublisher Studio, la grammaire est disponible via l'onglet « Schema » à côté de « Preview|Edit|Flow|XML ». NB : Si l'onglet n'apparaît pas, il faut aller dans « Tools > Preferences > General » et cocher « Show Document Schema ». Depuis FormPublisher 3.3, les schémas XSD sont produits automatiquement et sauvegardés dans le war. http://ENV/DGOX_NOM_vxx.xx.xx.L3.FP33/XSDs/documentId.xsd http://ENV/DGOX_NOM_vxx.xx.xx.L3.FP33/XSDs/signed/documentId.xsd où ENV est soit forms6.test.wallonie.be, soit forms6.valid.wallonie.be, soit forms6.wallonie.be Pour retrouver l'XSD, il faut donc connaître le documentId. Page 37 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 10.4 PROBLÈME XSD Certains éléments ou attributs d'éléments ne sont pas émis correctement ou complètement. 10.4.1 pour les RadioBox séparés. Si on sépare les <Option> d'un <RadioBox>, cela peut produire une XSD où certaines options manquent. Exemple : <Content IsVisible="($(demande|objet)=='etablissementHotelier')"> <Paragraph> <Question> <Label>Vous sollicitez une autorisation pour porter la dénomination suivante</Label> <RadioBox Name="demande|denomination" IsRequired="true" DataType="string"> <Option Value="hotel">Hôtel</Option> <Option Value="appartHotel">Appart-hôtel</Option> <Option Value="hostellerie">Hostellerie</Option> <Option Value="motel">Motel</Option> <Option Value="pension">Pension</Option> <Option Value="relais">Relais</Option> <Option Value="auberge">Auberge</Option> </RadioBox> </Question> </Paragraph> </Content> <Content IsVisible="($(demande|objet)=='camping')"> <Paragraph> <Question> <Label>Vous sollicitez une autorisation pour porter la dénomination suivante</Label> <RadioBox Name="demande|denomination" IsRequired="true" DataType="string"> <Option Value="campingTouristique">Terrain de camping touristique</Option> <Option Value="campingFerme">Terrain de camping à la ferme</Option> </RadioBox> </Question> </Paragraph> </Content> Dans cet exemple, l'xsd produite sera : <xs:element name="denomination" minOccurs="0"> <xs:complexType> <xs:simpleContent> <xs:restriction base="String"> <xs:enumeration value="campingTouristique" /> <xs:enumeration value="campingFerme" /> </xs:restriction> </xs:simpleContent> </xs:complexType> </xs:element> Pour assurer une liste complète d'options, il faut adopter l'une des trois solutions : Page 38 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 1. Utiliser une liste complète d'options pour chaque instance de la <Question> et exploiter l'attribut IsVisible sur les <Option> de sorte à n'afficher que celles demandées à un endroit donné. 2. Utiliser une <Question> avec toutes les <Options> qui seraient toujours en IsVisible = false en fin de formulaire. 3. Mettre les instances de cette même <Question> dans un seul <Content> et n'afficher que l'instance qui est acceptable à un moment donné. Dans l'exemple, si on peut regrouper les <Paragraph>, la solution 3 convient et donne le code suivant : <Content> <Paragraph IsVisible="($(demande|objet)=='etablissementHotelier')"> <Question> <Label>Vous sollicitez une autorisation pour porter la dénomination suivante</Label> <RadioBox Name="demande|denomination" IsRequired="true" DataType="string"> <Option Value="hotel">Hôtel</Option> <Option Value="appartHotel">Appart-hôtel</Option> <Option Value="hostellerie">Hostellerie</Option> <Option Value="motel">Motel</Option> <Option Value="pension">Pension</Option> <Option Value="relais">Relais</Option> <Option Value="auberge">Auberge</Option> </RadioBox> </Question> </Paragraph> <Paragraph IsVisible="($(demande|objet)=='camping')"> <Question> <Label>Vous sollicitez une autorisation pour porter la dénomination suivante</Label> <RadioBox Name="demande|denomination" IsRequired="true" DataType="string"> <Option Value="campingTouristique">Terrain de camping touristique</Option> <Option Value="campingFerme">Terrain de camping à la ferme</Option> </RadioBox> </Question> </Paragraph> </Content> Dans ce cas, l'XSD sera : <xs:element name="denomination" minOccurs="0"> <xs:complexType> <xs:simpleContent> <xs:restriction base="String"> <xs:enumeration value="hotel" /> <xs:enumeration value="appartHotel" /> <xs:enumeration value="hostellerie" /> <xs:enumeration value="motel" /> <xs:enumeration value="pension" /> <xs:enumeration value="relais" /> <xs:enumeration value="auberge" /> <xs:enumeration value="campingTouristique" /> <xs:enumeration value="campingFerme" /> </xs:restriction> </xs:simpleContent> </xs:complexType> Page 39 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 </xs:element> Par contre, la solution 2 est nécessaire si on ne peut pas regrouper facilement les <Paragraph>, par exemple, lorsque les <Question> sont dans une <Table>. Alors, le code suivant s'impose : <Content IsVisible="($(demande|objet)=='etablissementHotelier')"> <Paragraph > <Question> <Label>Vous sollicitez une autorisation pour porter la dénomination suivante</Label> <RadioBox Name="demande|denomination" DataType="string"> <Option Value="hotel">Hôtel</Option> <Option Value="appartHotel">Appart-hôtel</Option> <Option Value="hostellerie">Hostellerie</Option> <Option Value="motel">Motel</Option> <Option Value="pension">Pension</Option> <Option Value="relais">Relais</Option> <Option Value="auberge">Auberge</Option> </RadioBox> </Question> </Paragraph> </Content> <Content IsVisible="($(demande|objet)=='camping')"> <Paragraph > <Question> <Label>Vous sollicitez une autorisation pour porter la dénomination suivante</Label> <RadioBox Name="demande|denomination" DataType="string"> <Option Value="campingTouristique">Terrain de camping touristique</Option> <Option Value="campingFerme">Terrain de camping à la ferme</Option> </RadioBox> </Question> <Question IsVisible="false"> <RadioBox Name="demande|denomination" DataType="string"> <Option Value="hotel">Hôtel</Option> <Option Value="appartHotel">Appart-hôtel</Option> <Option Value="hostellerie">Hostellerie</Option> <Option Value="motel">Motel</Option> <Option Value="pension">Pension</Option> <Option Value="relais">Relais</Option> <Option Value="auberge">Auberge</Option> <Option Value="campingTouristique">Terrain de camping touristique</Option> <Option Value="campingFerme">Terrain de camping à la ferme</Option> </RadioBox> </Question> </Paragraph> </Content> </Section> Dans la solution 2, l'XSD est identique à celui de la solution 3. Page 40 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 10.4.2 signature Jusque FormPublisher 3.1, il faut ajouter un fragment XSD pour inclure la signature standard dsig utilisée par eSignBox dans l’XSD du formulaire voici quelques étapes à suivre : 0) Pas de CDATA 1) Ajouter la partie jaune dans le header du formulaire 2) Importer le namespace lié au fichier XSD standard W3C : http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-coreschema.xsd (partie bleue) – pas besoin de la schemalocation vu que c’est un XSD standard W3C 3) Ajouter la partie verte à l’endroit où se trouve la signature dans le suite des éléments de vos formulaires 4) Valider les XMLs des formulaires signés avec ce nouvel XSD <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" elementFormDefault="qualified" attributeFormDefault="unqualified" vc:minVersion="1.1"> <xs:import namespace="http://www.w3.org/2000/09/xmldsig#"/> <xs:element name="FormulaireMIRE"> <xs:annotation> <xs:documentation>Comment describing your root element</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="Element 1"/> <xs:element name="Element 2"/> ... <xs:element ref="ds:Signature"/> <xs:element name="Element n"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 10.4.3 decimal-integer Jusque FormPublisher 3.1, il faut ajouter un fragment XSD pour le problème decimalinteger. Dans un dataStore, FormPublisher produit deux formats pour les Doubles (qui sont déclarés Decimal dans le XSD) : • le format avec le séparateur de décimales sous forme d'un « . », • le format associé aux currency : un point de séparation pour les milliers et une virgule pour les décimales. Pour pouvoir prendre en compte cela, il faut une redéfinition du type Decimal couvrant ces deux formats, en ajoutant le fragment suivant à l'XSD produite par le Studio : <!-- NEW DECIMAL DEFINITION--> <!-- Added new decimal type --> <xs:complexType name="Decimal"> <xs:simpleContent> <xs:extension base="all_decimal"> <xs:attribute ref="class" use="required" /> Page 41 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 </xs:extension> </xs:simpleContent> </xs:complexType> <xs:simpleType name="all_decimal"> <xs:union memberTypes="xs:decimal decimal_currency" /> </xs:simpleType> <xs:simpleType name="decimal_currency"> <xs:restriction base="xs:string"> <xs:pattern value="[-+]?(\d{1,3}([.]\d{3})*)([,/-]\d{1,2}[€]?)?" /> </xs:restriction> </xs:simpleType> ***** Page 42 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 11. Pré-remplissage 11.1 MÉCANISME Au début du document jxml, on place l'appel au bloc commun include_preremplissage_profil.jxml qui permet de faire le lien entre les variables de l'un des profils (citoyen ou entreprise) et les variables du formulaire. Le customizer [jwc] est libre : par exemple « demandeur » est souvent utilisé. Par contre, derrière, il faut veiller à respecter le nommage repris ci-dessous dans le mapping de préremplissage : par exemple, une adresse sera toujours nommée [jwc]| adresse|*. Le choix entre les 2 profils se fait également dans include_preremplissage_profil.jxml en analysant la variable du profil $(TYPESOC). Recommandation : Utiliser le bloc commun include_preremplissage_profil.jxml 11.2 MAPPING DE PRÉREMPLISSAGE 11.2.1 Profil citoyen Table portail Variable portail Type variable PERSPHYS CIV PERSPHYS Valeurs Variable Jway Valeurs VARCHAR2 mr / mme [jwc]|identification|civilite monsieur / madame CP NUMBER [jwc]|adresse|cp PERSPHYS EMAIL VARCHAR2 [jwc]|telecom|mail PERSPHYS FAX VARCHAR2 [jwc]|telecom|fax PERSPHYS GSM VARCHAR2 [jwc]|telecom|telGsm PERSPHYS IDUSER NUMBER PERSPHYS LOCALITE VARCHAR2 [jwc]|adresse|localite PERSPHYS NOM VARCHAR2 [jwc]|identification|nom PERSPHYS NUM VARCHAR2 [jwc]|adresse|numero PERSPHYS PRENOM VARCHAR2 [jwc]|identification|prenom PERSPHYS RUE VARCHAR2 [jwc]|adresse|rue PERSPHYS TEL VARCHAR2 [jwc]|telecom|tel1 Page 43 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 11.2.2 Profil entreprise Table portail Variable portail Type variable SOCIETE BANQUE_COMPTE VARCHAR2 [jwc]|banque| numBancaireBE SOCIETE BANQUE_TITUL VARCHAR2 [jwc]|banque|titulaire| intitule SOCIETE BILAN_DERNIER_EXERCICE NUMBER SOCIETE CA_DERNIER_EXERCICE NUMBER SOCIETE CODE_TYPE_ENTR VARCHAR2 SOCIETE DATE_CESSATION DATE SOCIETE DATE_ETAT DATE SOCIETE DATE_IMMATRICULATION_R C DATE SOCIETE DENOM_ABREV VARCHAR2 [jwc]|identification| denominationAbrev SOCIETE DENOM_LONG VARCHAR2 [jwc]|identification| denomination SOCIETE DT_CLOTURE DATE SOCIETE DT_DEB_ACT DATE SOCIETE DT_DEMARRAGE DATE SOCIETE ENSEIGN VARCHAR2 SOCIETE ETAT VARCHAR2 SOCIETE FORM_JUR_ABRE VARCHAR2 [jwc]|identification| formeJuridiqueAbrev SOCIETE FORM_JUR_LONG VARCHAR2 [jwc]|identification| formeJuridique SOCIETE IDUSER NUMBER SOCIETE LIEU_IMMATRICULATION_RC VARCHAR2 SOCIETE MOTIF_CESSATION VARCHAR2 SOCIETE NACE_PRINCIPAL VARCHAR2 SOCIETE NACE_SECONDAIRE VARCHAR2 SOCIETE NBRE_PERS_ONSS NUMBER SOCIETE NUM_BCE_ENTR VARCHAR2 SOCIETE NUM_IMMATRICULATION_RC VARCHAR2 SOCIETE NUM_ONSS VARCHAR2 Valeurs Variable Jway Valeurs [jwc]|identification| enseigneCommerciale [jwc]|identification|numBCE [jwc]|onss|numero Page 44 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 SOCIETE NUM_TVA VARCHAR2 SOCIETE SIEGE_COMPLT VARCHAR2 SOCIETE SIEGE_SOC_BTE VARCHAR2 [jwc]|adresse|boite SOCIETE SIEGE_SOC_CD_INS VARCHAR2 [jwc]|adresse|ins SOCIETE SIEGE_SOC_CD_PAYS VARCHAR2 SOCIETE SIEGE_SOC_CD_POST VARCHAR2 [jwc]|adresse|cp SOCIETE SIEGE_SOC_COMMUNE VARCHAR2 [jwc]|adresse|localite SOCIETE SIEGE_SOC_EMAIL VARCHAR2 [jwc]|telecom|mail SOCIETE SIEGE_SOC_FAX VARCHAR2 [jwc]|telecom|fax SOCIETE SIEGE_SOC_GSM VARCHAR2 [jwc]|telecom|telGsm SOCIETE SIEGE_SOC_NUM VARCHAR2 [jwc]|adresse|numero SOCIETE SIEGE_SOC_RUE VARCHAR2 [jwc]|adresse|rue SOCIETE SIEGE_SOC_TEL VARCHAR2 [jwc]|telecom|tel1 SOCIETE SITE_INTERNET VARCHAR2 [jwc]|telecom|url SOCIETE STATUT_ACTUEL VARCHAR2 SOCIETE TVA_DATE DATE SOCIETE TVA_LIEU VARCHAR2 SOCIETE TVA_N VARCHAR2 SOCIETE TYPESOC VARCHAR2 pers_m or / pers_ph ys [jwc]|identification|nature personneMorale/in dependant Variable Jway Valeurs 11.2.3 Profil enseignement Table portail Variable portail Type variable Valeurs ENSEIGNE MENT IDUSER NUMBER ENSEIGNE MENT TYPE VARCHAR2 [jwc]|commune|type ENSEIGNE MENT DENOMINATION VARCHAR2 [jwc]|commune| denomination ENSEIGNE MENT RUE VARCHAR2 [jwc]|adresse|rue ENSEIGNE MENT NUM VARCHAR2 [jwc]|adresse|numero Page 45 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 ENSEIGNE MENT BTE VARCHAR2 [jwc]|adresse|boite ENSEIGNE MENT CP NUMBER [jwc]|adresse|cp ENSEIGNE MENT LOCALITE VARCHAR2 [jwc]|adresse|localite ENSEIGNE MENT PAYS VARCHAR2 [jwc]|adresse|pays ENSEIGNE MENT TEL VARCHAR2 [jwc]|telecom|tel1 ENSEIGNE MENT FAX VARCHAR2 [jwc]|telecom|fax ENSEIGNE MENT EMAIL VARCHAR2 [jwc]|telecom|mail ENSEIGNE MENT CONTACT_NOM VARCHAR2 [jwc]|contact|identification| nom ENSEIGNE MENT CONTACT_PRENOM VARCHAR2 [jwc]|contact|identification| prenom ENSEIGNE MENT CONTACT_FONCTION VARCHAR2 [jwc]|contact|employeur| fonction ENSEIGNE MENT CONTACT_TEL VARCHAR2 [jwc]|contact|telecom|tel1 ENSEIGNE MENT CONTACT_FAX VARCHAR2 [jwc]|contact|telecom|fax ENSEIGNE MENT CONTACT_GSM VARCHAR2 [jwc]|contact|telecom| telGsm ENSEIGNE MENT CONTACT_EMAIL VARCHAR2 [jwc]|contact|telecom|mail ENSEIGNE MENT CONTACT_CIV VARCHAR2 mr / mme [jwc]|contact|identification| civilite ENSEIGNE MENT NUM_BCE_ENTR VARCHAR2 [jwc]|identification|numBCE ENSEIGNE MENT DENOM_LONG VARCHAR2 [jwc]|identification| denomination ENSEIGNE MENT DENOM_ABREV VARCHAR2 [jwc]|identification| denominationAbrev ENSEIGNE MENT FORM_JUR_LONG VARCHAR2 [jwc]|identification| formeJuridique ENSEIGNE MENT FORM_JUR_ABRE VARCHAR2 [jwc]|identification| formeJuridiqueAbrev monsieur / madame Page 46 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 11.2.4 Profil secteur non marchand Table portail Variable portail Type variable Valeurs Variable Jway ASBL IDUSER NUMBER ASBL TYPE VARCHAR2 [jwc]|commune|type ASBL DENOMINATION VARCHAR2 [jwc]|commune| denomination ASBL RUE VARCHAR2 [jwc]|adresse|rue ASBL NUM VARCHAR2 [jwc]|adresse|numero ASBL BTE VARCHAR2 [jwc]|adresse|boite ASBL CP NUMBER [jwc]|adresse|cp ASBL LOCALITE VARCHAR2 [jwc]|adresse|localite ASBL PAYS VARCHAR2 [jwc]|adresse|pays ASBL TEL VARCHAR2 [jwc]|telecom|tel1 ASBL FAX VARCHAR2 [jwc]|telecom|fax ASBL EMAIL VARCHAR2 [jwc]|telecom|mail ASBL CONTACT_NOM VARCHAR2 [jwc]|contact|identification| nom ASBL CONTACT_PRENOM VARCHAR2 [jwc]|contact|identification| prenom ASBL CONTACT_FONCTION VARCHAR2 [jwc]|contact|employeur| fonction ASBL CONTACT_TEL VARCHAR2 [jwc]|contact|telecom|tel1 ASBL CONTACT_FAX VARCHAR2 [jwc]|contact|telecom|fax ASBL CONTACT_GSM VARCHAR2 [jwc]|contact|telecom| telGsm ASBL CONTACT_EMAIL VARCHAR2 [jwc]|contact|telecom|mail ASBL CONTACT_CIV VARCHAR2 mr / mme [jwc]|contact|identification| civilite ASBL NUM_BCE_ENTR VARCHAR2 [jwc]|identification|numBCE ASBL DENOM_LONG VARCHAR2 [jwc]|identification| denomination ASBL DENOM_ABREV VARCHAR2 [jwc]|identification| denominationAbrev ASBL FORM_JUR_LONG VARCHAR2 [jwc]|identification| formeJuridique ASBL FORM_JUR_ABRE VARCHAR2 [jwc]|identification| formeJuridiqueAbrev Valeurs monsieur / madame Page 47 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 11.2.5 Profil pouvoir local Table portail Variable portail Type variable Valeurs Variable Jway LOC IDUSER NUMBER LOC TYPE VARCHAR2 [jwc]|commune|type LOC DENOMINATION VARCHAR2 [jwc]|commune| denomination LOC RUE VARCHAR2 [jwc]|adresse|rue LOC NUM VARCHAR2 [jwc]|adresse|numero LOC BTE VARCHAR2 [jwc]|adresse|boite LOC CP NUMBER [jwc]|adresse|cp LOC LOCALITE VARCHAR2 [jwc]|adresse|localite LOC PAYS VARCHAR2 [jwc]|adresse|pays LOC TEL VARCHAR2 [jwc]|telecom|tel1 LOC FAX VARCHAR2 [jwc]|telecom|fax LOC EMAIL VARCHAR2 [jwc]|telecom|mail LOC CONTACT_NOM VARCHAR2 [jwc]|contact|identification| nom LOC CONTACT_PRENOM VARCHAR2 [jwc]|contact|identification| prenom LOC CONTACT_FONCTION VARCHAR2 [jwc]|contact|employeur| fonction LOC CONTACT_TEL VARCHAR2 [jwc]|contact|telecom|tel1 LOC CONTACT_FAX VARCHAR2 [jwc]|contact|telecom|fax LOC CONTACT_GSM VARCHAR2 [jwc]|contact|telecom| telGsm LOC CONTACT_EMAIL VARCHAR2 [jwc]|contact|telecom|mail LOC CONTACT_CIV VARCHAR2 mr / mme [jwc]|contact|identification| civilite LOC NB_HABITANTS NUMBER [jwc]|commune|nbHabitants LOC NUM_BCE_ENTR VARCHAR2 [jwc]|identification|numBCE LOC DENOM_LONG VARCHAR2 [jwc]|identification| denomination LOC DENOM_ABREV VARCHAR2 [jwc]|identification| denominationAbrev LOC FORM_JUR_LONG VARCHAR2 [jwc]|identification| formeJuridique Valeurs monsieur / madame Page 48 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 LOC FORM_JUR_ABRE VARCHAR2 [jwc]|identification| formeJuridiqueAbrev 11.2.6 Profil tiers Table portail Variable portail Type variable Valeurs Variable Jway TIERS IDUSER NUMBER TIERS TYPE VARCHAR2 [jwc]|commune|type TIERS DENOMINATION VARCHAR2 [jwc]|commune| denomination TIERS CONTACT_NOM VARCHAR2 [jwc]|contact|identification| nom TIERS CONTACT_PRENOM VARCHAR2 [jwc]|contact|identification| prenom TIERS CONTACT_FONCTION VARCHAR2 [jwc]|contact|employeur| fonction TIERS CONTACT_TEL VARCHAR2 [jwc]|contact|telecom|tel1 TIERS CONTACT_FAX VARCHAR2 [jwc]|contact|telecom|fax TIERS CONTACT_GSM VARCHAR2 [jwc]|contact|telecom| telGsm TIERS CONTACT_EMAIL VARCHAR2 [jwc]|contact|telecom|mail TIERS CONTACT_CIV VARCHAR2 mr / mme [jwc]|contact|identification| civilite TIERS NUM_BCE_ENTR VARCHAR2 [jwc]|identification|numBCE TIERS DENOM_LONG VARCHAR2 [jwc]|identification| denomination TIERS DENOM_ABREV VARCHAR2 [jwc]|identification| denominationAbrev TIERS SIEGE_SOC_RUE VARCHAR2 [jwc]|adresse|rue TIERS SIEGE_SOC_NUM VARCHAR2 [jwc]|adresse|numero TIERS SIEGE_SOC_BTE VARCHAR2 [jwc]|adresse|boite TIERS SIEGE_COMPLT VARCHAR2 TIERS SIEGE_SOC_CD_PAYS VARCHAR2 TIERS SIEGE_SOC_CD_POST VARCHAR2 [jwc]|adresse|cp TIERS SIEGE_SOC_COMMUNE VARCHAR2 [jwc]|adresse|localite TIERS SIEGE_SOC_CD_INS VARCHAR2 [jwc]|adresse|ins TIERS SIEGE_SOC_PAYS VARCHAR2 [jwc]|adresse|pays Valeurs monsieur / madame Page 49 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 TIERS SIEGE_SOC_TEL VARCHAR2 [jwc]|telecom|tel1 TIERS SIEGE_SOC_FAX VARCHAR2 [jwc]|telecom|fax TIERS SIEGE_SOC_EMAIL VARCHAR2 [jwc]|telecom|mail TIERS FORM_JUR_ABRE VARCHAR2 [jwc]|identification| formeJuridiqueAbrev TIERS FORM_JUR_LONG VARCHAR2 [jwc]|identification| formeJuridique TIERS TYPESOC VARCHAR2 [jwc]|identification|nature 11.2.7 Profil fonctionnaire Table portail Variable portail Type variable Valeurs Variable Jway AGENT AGENT_IDUSER NUMBER AGENT AGENT_NOM VARCHAR2 [jwc]|identification|nom AGENT AGENT_PRENOM VARCHAR2 [jwc]|identification|prenom AGENT AGENT_DETAIL VARCHAR2 AGENT AGENT_TEL_PRO VARCHAR2 AGENT AGENT_ID_ADMIN VARCHAR2 AGENT AGENT_CIVILITE VARCHAR2 mr / mme [jwc]|identification|civilite AGENT AGENT_GRADE VARCHAR2 [jwc]|identification|grade AGENT AGENT_STATUT VARCHAR2 [jwc]|identification|statut AGENT AGENT_FONCTION VARCHAR2 [jwc]|identification|fonction AGENT AGENT_INSTITUTION VARCHAR2 [jwc]|employeur|institution AGENT AGENT_DIR_GEN VARCHAR2 [jwc]|employeur|dg AGENT AGENT_DIRECTION VARCHAR2 [jwc]|employeur|direction AGENT AGENT_DEPARTEMENT VARCHAR2 [jwc]|employeur| departement AGENT AGENT_SERVICE VARCHAR2 [jwc]|employeur|employeur AGENT AGENT_EMAIL_PRO VARCHAR2 [jwc]|employeur|telecom| mail AGENT AGENT_TEL_PERSO VARCHAR2 [jwc]|telecom|tel1 AGENT AGENT_EMAIL_PERSO VARCHAR2 [jwc]|telecom|mail AGENT AGENT_COMPTE VARCHAR2 [jwc]|banque| numBancaireBE Valeurs [jwc]|employeur|telecom| tel1 monsieur / madame Page 50 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 11.3 TABLEAU RÉCAPITULATIF DU MAPPING SELON LES 7 PROFILS Tiers Pouvoir public Citoyen Enseignement Asbl Agent Entreprise AGENT_CIVILITE x [jwc]|identification|civilite AGENT_COMPTE x [jwc]|banque|numBancaireBE AGENT_DEPARTEMENT x [jwc]|employeur|departement AGENT_DETAIL x AGENT_DIR_GEN x [jwc]|employeur|dg AGENT_DIRECTION x [jwc]|employeur|direction AGENT_EMAIL_PERSO x [jwc]|telecom|mail AGENT_EMAIL_PRO x [jwc]|employeur|telecom|mail AGENT_FONCTION x [jwc]|identification|fonction AGENT_GRADE x [jwc]|identification|grade AGENT_ID_ADMIN x AGENT_IDUSER x AGENT_INSTITUTION x [jwc]|employeur|institution AGENT_NOM x [jwc]|identification|nom AGENT_PRENOM x [jwc]|identification|prenom AGENT_SERVICE x [jwc]|employeur|employeur AGENT_STATUT x [jwc]|identification|statut AGENT_TEL_PERSO x [jwc]|telecom|tel1 AGENT_TEL_PRO x [jwc]|employeur|telecom|tel1 DENOMINATION x x x NB_HABITANTS x x TYPE x x BTE x x CIV x x x x [jwc]|commune|denomination [jwc]|commune|nbHabitants x [jwc]|commune|type [jwc]|adresse|boite [jwc]|identification|civilite CP x x x x [jwc]|adresse|cp EMAIL x x x x [jwc]|telecom|mail FAX x x x x [jwc]|telecom|fax GSM LOCALITE NOM x x x x x [jwc]|telecom|telGsm x [jwc]|adresse|localite [jwc]|identification|nom Page 51 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Enseignement Citoyen Pouvoir public x x x x [jwc]|adresse|numero PAYS x x x x [jwc]|adresse|pays PRENOM Tiers Asbl Agent Entreprise NUM x [jwc]|identification|prenom RUE x x x x [jwc]|adresse|rue TEL x x x x [jwc]|telecom|tel1 BANQUE_COMPTE x [jwc]|banque|numBancaireBE BANQUE_TITUL x [jwc]|banque|titulaire|intitule BILAN_DERNIER_EXERCICE x CA_DERNIER_EXERCICE x CODE_TYPE_ENTR x CONTACT_CIV x x x x x [jwc]|contact|identification|civilite CONTACT_EMAIL x x x x x [jwc]|contact|telecom|mail CONTACT_FAX x x x x x [jwc]|contact|telecom|fax CONTACT_FONCTION x x x x x [jwc]|contact|employeur|fonction CONTACT_GSM x x x x x [jwc]|contact|telecom|telGsm CONTACT_NOM x x x x x [jwc]|contact|identification|nom CONTACT_PRENOM x x x x x [jwc]|contact|identification|prenom CONTACT_TEL x x x x x [jwc]|contact|telecom|tel1 DATE_CESSATION x DATE_ETAT x DATE_IMMATRICULATION_RC x DENOM_ABREV x x x x x [jwc]|identification| denominationAbrev DENOM_LONG x x x x x [jwc]|identification|denomination DT_CLOTURE x DT_DEB_ACT x DT_DEMARRAGE x ENSEIGN x ETAT x FORM_JUR_ABRE x x x x x [jwc]|identification| formeJuridiqueAbrev FORM_JUR_LONG x x x x x [jwc]|identification|formeJuridique [jwc]|identification| enseigneCommerciale Page 52 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Pouvoir public Tiers Enseignement x Citoyen Asbl Agent Entreprise x x x LIEU_IMMATRICULATION_RC x MOTIF_CESSATION x NACE_PRINCIPAL x NACE_SECONDAIRE x NBRE_PERS_ONSS x NUM_BCE_ENTR x NUM_IMMATRICULATION_RC x NUM_ONSS x NUM_TVA x SIEGE_COMPLT x x SIEGE_SOC_BTE x x [jwc]|adresse|boite SIEGE_SOC_CD_INS x x [jwc]|adresse|ins SIEGE_SOC_CD_PAYS x x SIEGE_SOC_CD_POST x x [jwc]|adresse|cp SIEGE_SOC_COMMUNE x x [jwc]|adresse|localite SIEGE_SOC_EMAIL x x [jwc]|telecom|mail SIEGE_SOC_FAX x x [jwc]|telecom|fax SIEGE_SOC_GSM x SIEGE_SOC_NUM x x [jwc]|adresse|numero SIEGE_SOC_PAYS x x [jwc]|adresse|pays SIEGE_SOC_RUE x x [jwc]|adresse|rue SIEGE_SOC_TEL x x [jwc]|telecom|tel1 SITE_INTERNET x STATUT_ACTUEL x TVA_DATE x TVA_LIEU x TVA_N x TYPESOC x IDUSER x [jwc]|identification|numBCE [jwc]|onss|numero [jwc]|telecom|telGsm [jwc]|telecom|url x x x x x [jwc]|identification|nature x ***** Page 53 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 12. Layout 12.1 DÉFINITION Le layout en cours est appelé « L3 » (3e version du layout web+pdf des formulaires électroniques chez eWBS, après « L1 » et « L2A »). Il est complètement inclus dans les templates, donc dans @COMMUN. Recommandation : Il ne faut pas vouloir modifier les aspects graphiques de présentation de façon ponctuelle sur un projet de formulaire. → Toujours laisser faire le layout. C'est malgré tout très faisable (au moyen de l'APPLI.REF), mais cela engendre beaucoup de problèmes d'efficacité de développement ou de mise à jour, et surtout, de cohérence pour l'usager. Règle d'or L'usage d'un layout particulier défini dans l'APPLI.REF est à éviter au maximum. 12.2 LAYOUT DES RADIOBOX Les RadioBox doivent être alignés verticalement <RadioBox OptionsPerLine="1"> ➔ Pour éviter la confusion : si les libellés des options sont sur la même ligne, on peut hésiter entre le bouton à gauche du libellé et le bouton à droite. ➔ Pour une question ergonomique : rapidement associer visuellement le nombre d'options, qui doivent donc être les plus rapprochées possible pour former un groupe. Exemples : O oui O non Confus pour le « oui » : doit-on cocher à droite ou à gauche du « oui » ? O oui O non Plus clair Page 54 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 O habitation O appartement O tente O caravane O O O O O habitation appartement chalet tente caravane O chalet On ne voit pas d'un coup d’œil qu'il y a 5 options On associe directement d'un coup d'oeil les 5 options dans un seul groupe Recommandation : Pour les RadioBox, on utilise <RadioBox OptionsPerLine="1">. ***** Page 55 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 13. Nouveau projet 13.1 COMMENT DÉMARRER UN NOUVEAU PROJET ? Recommandation : Utiliser EASI_ZeroVierge dans Subversion qui contient toutes les rubriques possibles. ***** Page 56 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 14. Rubriques de renseignements 14.1 PRINCIPE Les rubriques de renseignements sont censées fournir les informations utiles à l'usager lors du remplissage en ligne. Groupe Titre Description MetaContent / MetaField / fichier Pour quoi ? <MetaContent Type="subject"> Public Pour qui ? <MetaContent Type="target"> Avantages Combien ? <MetaContent Type="advantages"> Conditions Comment ? <MetaContent Type="conditions"> Description Objet Aide Réglementation Base légale <MetaContent Type="legal"> Administration émettrice Administration responsable du formulaire <MetaFields Name="organisation"> Contacts Qui contacter à l'administration responsable du formulaire ? <MetaContent Type="contact"> Instructions Page menu rassemblant toutes les instructions (BC) xinstructions_default.jxml Instructions pour le remplissage Instructions pendant le remplissage du formulaire (BC) xinstructions_remplissage_defaul t Instructions pour l'Enregistremen t Instructions après avoir cliqué sur le bouton « Valider » de la dernière page du formulaire (BC) xinstructions_enregistrement_def ault.jxml Instructions pour la Signature Instructions après avoir cliqué sur le bouton « Enregistrer » (BC) xinstructions_signature_default Instructions pour la Instructions après avoir choisi la (BC) xinstructions_finalisation_defau Page 57 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Groupe Titre Description MetaContent / MetaField / fichier Finalisation signature lt Formulaire papier (formulaire.pdf) Glossaire index_glossary.jxml FAQ xfaq.jxml Traitement Procédure administrative Vie privée Recours Recours particulier Médiateur <MetaContent Type="process"> comment sont traitées les données par l'administration, (BC) xvie_privee.jxml jusqu'à la décision, notamment dans le respect de la Loi Vie privée après la décision, <MetaContent Type="appeal"> que peut-on faire si on n'est pas (BC)xmediateur.jxml d'accord Une rubrique est la page de validation en fin du processus de remplissage du formulaire électronique. Le contenu de cette page correspond exactement au contenu de la page Description Page de validation MetaContent / MetaField / fichier Page contenant le bouton « Valider » (BC)xvalidation_default.jxml Certaines de ces rubriques sont reprises dans la première page du pdf. Description MetaContent / MetaField / fichier Introduction pour le contact <MetaContent Type="contactintroduction"> Instructions pour le papier <MetaContent Type="instructionsfor-paper"> Adresse postale dans le cadre si celle-ci doit être <MetaContent Type="PostReturnAddress"> différente de l'administration émettrice (<MetaFields Name="organisation">) en bleu → dans le fichier xatoms.jxml Page 58 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 en vert → dans le fichier xcommon.jxml Recommandation à propos de la personne de contact : Il faut toujours faire figurer les renseignements suivants lorsqu'on mentionne une personne de contact : → civilité : « M. » ou « Mme » car il est possible que le prénom ne permette pas de fixer le genre de la personne, ce qui peut mettre mal à l'aise l'usager → prénom en minuscules, nom en majuscule pour distinguer les noms qui ressemblent à des prénoms → téléphone, marqué « Tél. : » et le numéro en notation IBPT On peut y ajouter : → un titre (Directeur par exemple) → une adresse courriel → le fax → le site web → etc. ***** Page 59 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 15. Ordre des sections 15.1 ORDRE STANDARD eWBS impose de respecter au mieux l'ordre standard des sections. Objectif de la standardisation de l'ordre des sections Permettre aux usagers qui utiliseront plusieurs formulaires différents de retrouver toujours la même trame, le même ordre, la même structure, autant que possible. Éviter que le rédacteur traite les contenus similaires de façon trop hétéroclite. Une de ces sections peut être facultative, mais l'ordre et l'intitulé doivent être respecté, sauf si contre-indication spécifique et explicite de l'équipe des experts en lisibilité. N° Titre exact de la section 1 « Coordonnées du demandeur » 1.1 « Identification du demandeur » Explication il s'agit • soit du N° national ou nomprénom pour une personne, • soit du numéro d'entreprise 1.2 « Adresse du demandeur » ou « Siège social » 1.3 « Unités d'établissement » uniquement s'il s'agit d'une entreprise 1.4 « Contact » 1.5 « Compte bancaire » 2 Objet(s) de la demande (travaux, données techniques, etc.) 3 ... n n+1 « Liste des documents à joindre » n+2 « Déclaration sur l'honneur et signature » n+3 « Protection de la vie privée et voies de (gosub_mediateur_vie_privee.jxml) – Page 60 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 recours » Si la mention « médiateur » ne doit pas être placée (rare!), on utilise le titre « Protection de la vie privée » (gosub_vie_privee.jxml) n+4 « Enquête de satisfaction » 15.2 TYPES (gosub_enquete_satisfaction.jxml) DE SECTION Les types de <Section> possibles sont : Type="standard", Type="appendice", Type="article", Type="landscape". • • • • Type="preface", "preface" = section non numérotée en début de formulaire, à mettre avant toute section "appendice" = section non numérotée en fin de formulaire, à mettre après toute section "article" = ??? "landscape" = section sur une page en mode paysage Si titre <Title> trop long dans une <Section> → problème scroll horizontal ET/OU de MAP → si problème de scroll horizontal → raccourcir le titre (lisibilité ou administration responsable) + ajouter un paragraphe introductif de description reprenant le titre long en entier → si problème de MAP → pour éviter cela, mettre un titre plus court en utilisant un <ShortTitle> ***** Page 61 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 16. Liste des documents à joindre 16.1 PRINCIPE Tout est dans le MY.REF : on utilise 4 blocs communs et on pose la variable « uploadable » dans APPLI.REF/publication.properties. easi.form.uploadable=ENABLED Pour que tous les documents à joindre soient sans la possibilité d'uploader, il faut mettre easi.form.uploadable=DISABLED et ne rien changer d'autre dans le formulaire identique. Recommandation : Il FAUT que le <Title> de la section appelante soit « Liste des documents à joindre ». Recommandation importantissime !!! Il FAUT que l'Id de la section appelante soit "depotDocuments", au caractère près. NB : L'Id de la section d'où sont uploadés les document à joindre est envoyé par une fonction du portail dans la DB des demandes soumises, variable « CONTEXT ». Une erreur dans cet Id peut entraîner que les usagers ne retrouvent pas leurs documents joints. 16.2 ATTACHMENTBOX L'objet <AttachmentBox> prévu dans FormPublisher n'est pas encore utilisé. Et n'est pas à utiliser. 16.3 BLOCS COMMUNS UTILISÉS include_folder/include_annexe_DEBUT.jxml include_folder/include_annexe_FIN.jxml include_folder/include_annexe_LIGNE.jxml include_folder/include_annexe_CIBLE.jxml 16.4 CUSTOMIZERS Ces customizers sont obligatoires. include_annexe_DEBUT.jxml Page 62 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 • [label] pour l'intitulé avant les annexe • [annexeMaxNumber] pour le nombre maximum d'annexes, permet de charger autant de variables anx01, anx02, anx03, anx04, etc. → si annexeMaxNumber="3" alors cela crée les variables suivantes : anx01, anx02, anx03. Même si c'est pour n'utiliser que anx01 et anx03... dans l'onglet XML <Include NewPage="none" DocumentId="include_annexe_DEBUT"> <Customizer Name="[annexeMaxNumber]" Value="15" /> <Customizer Name="[label]" Value=" " /> </Include> include_annexe_FIN.jxml • [annexeMaxNumber] idem que pour le DEBUT dans l'onglet XML <Include NewPage="none" DocumentId="include_annexe_FIN"> <Customizer Name="[annexeMaxNumber]" Value="15" /> </Include> include_annexe_LIGNE.jxml • [jwc] pour le nommage des variables (exemple : [jwc]="anx04") • [mandatory] =true pour un document obligatoire ; = false sinon • [label] pour l'intitulé du document demandé ATTENTION ! le label ne peut pas contenir de balise, donc par exemple, pas de gras, ou d'hyperlien. Se reporter à la section « Cas d'un label spécial » cidessous. dans l'onglet XML <Include NewPage="none" DocumentId="include_annexe_LIGNE"> <Customizer Name="[label]" Value="Document à annexer" /> <Customizer Name="[mandatory]" Value="false" /> <Customizer Name="[jwc]" Value="anx12" /> </Include> include_annexe_CIBLE.jxml • [label] pour l'intitulé du groupe cible dans l'onglet XML <Include NewPage="none" DocumentId="include_annexe_CIBLE"> <Customizer Name="[label]" Value="Pour tous (personnes physiques ET morales)" /> </Include> Page 63 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 16.5 EXEMPLE Rem : les customizers anx01, anx02, anx03, etc. ne doivent pas nécessairement être dans l'ordre, ni même être tous utilisés. <section id="depotDocuments" newpage="true"> <title>Liste des documents à joindre</title> <Include NewPage="none" DocumentId="include_annexe_DEBUT"> <Customizer Name="[annexeMaxNumber]" Value="3" /> <Customizer Name="[label]" Value=" " /> </Include> <Include NewPage="none" DocumentId="include_annexe_CIBLE" IsVisible="$ (constitutionEntreprise)=='PHYSIQUE'"> <Customizer Name="[label]" Value="Pour les personnes physiques" /> </Include> <Include NewPage="none" DocumentId="include_annexe_LIGNE" IsVisible="$ (constitutionEntreprise)=='PHYSIQUE'"> <Customizer Name="[label]" Value="Copie du contrat" /> <Customizer Name="[mandatory]" Value="false" /> <Customizer Name="[jwc]" Value="anx01" /> </Include> <Include NewPage="none" DocumentId="include_annexe_CIBLE" IsVisible="$ (constitutionEntreprise)=='MORALE'" mode="report"> <Customizer Name="[label]" Value="Pour les personnes physiques" /> </Include> <Include NewPage="none" DocumentId="include_annexe_LIGNE" IsVisible="$ (constitutionEntreprise)=='MORALE'"> <Customizer Name="[label]" Value="Copie du contrat" /> <Customizer Name="[mandatory]" Value="false" /> <Customizer Name="[jwc]" Value="anx02" /> </Include> <Include NewPage="none" DocumentId="include_annexe_LIGNE" IsVisible="$ (constitution Entreprise)=='MORALE'"> <Customizer Name="[label]" Value="Copie du contrat" /> <Customizer Name="[mandatory]" Value="false" /> <Customizer Name="[jwc]" Value="anx03" /> </Include> <Include NewPage="none" DocumentId="include_annexe_FIN"> <Customizer Name="[annexeMaxNumber]" Value="3" /> </Include> </section> Remarque 1 : mode report sur les CIBLEs. Remarque 2 : test sur un document à joindre 16.6 CAS D'UN LABEL SPÉCIAL Le [label] étant un customizer, donc la valeur d'un attribut xml, il n'est pas possible de lui passer un hyperlien ou un style (bold ou italic). Nous sommes alors dans le cas d'un « label spécial ». Pour contourner le problème, il faut diviser le libellé du document à joindre en deux : Page 64 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 1. une expression courte sans hyperlien, sans style bold, va dans le customizer, 2. une explication complémentaire est placée dans un petit paragraphe explicatif dans un <td type="emphase">. Cette explication complémentaire doit être placée dans un petit tableau de mise en disposition dont les colonnes ont les mêmes largeurs que dans le bloc commun include_annexe_LIGNE, càd 3% et 97%. Il ne faut pas oublier de reprendre la condition éventuelle de l'<include> sur le <Content>. Dans l'exemple ci-dessous, l'hyperlien en rouge ne peut pas être placé dans le customizer [label]. On doit donc ajouter un <Content>. <include customizer="anx02" edoc="commun/include_annexe_LIGNE.png" test="$( travaux|realisationSansEntrepreneur )=='non'"> <customizer name="[label]">Le document « Annexe technique 1 Isolation du toit d'un bâtiment » à faire remplir par l'entrepreneur.</customizer> <customizer name="[mandatory]">true</customizer> </include> <Content test="$( travaux|realisationSansEntrepreneur )=='non'"> <table type="sansBordures"> <columnDefinitions> <columnDefinition width="3%" /> <columnDefinition width="97%" /> </columnDefinitions> <tr> <td></td> <td type="emphase"> <p>Ce document est disponible en ligne sur le site <url relation="external" url="http://energie.wallonie.be"> http://energie.wallonie.be</url> ou au <dlink codoc="annexe01" ids="draftData" mode="Report" relation="external" type="pdf" usage="court">format papier</dlink>.</p> </td> </tr> </table> </Content> ***** Page 65 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 17. Enquête de satisfaction 17.1 PRINCIPE DE BASE Le questionnaire de satisfaction a été révisé par la lisibilité en août 2011 (pour mieux prendre en compte les aspects informatisation/dématérialisation). Recommandation L'enquête de satisfaction doit figurer dans TOUS les formulaires, SAUF exceptions précisées dans la liste ci-dessous 17.2 EXCEPTIONS • si le formulaire qui ne fait qu'une seule page, c'est-à-dire ceux de la liste exhaustive suivante : Examen de chasse • les formulaires pour lesquels l'administration (ou l'expert en lisibilité) a explicitement exigé qu'il ne figure pas, c'est-à-dire ceux de la liste exhaustive suivante : Déclaration des mandats exigence de la Cellule de déclaration des mandats (M. Nicole MATAGNE) Pôle de compétitivité formulaires annexes un peu particuliers (car coexistence formulaire word avec annexes électroniques) dans lesquel il n'est pas opportun d'ajouter l'enquête Test Kafka pas vraiment un formulaire mais un outil de décision Envoi recommandé Questionnaire évaluant la pertinence de l'utilisation d'un envoi recommandé ***** Page 66 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 18. Voies de recours et vie privée 18.1 BLOCS COMMUNS À UTILISER xvie_privee pour l'affichage de la mention « Vie privée » dans les onglets de Renseginement <Include NewPage="none" DocumentId="xvie_privee"> <Customizer Name="[labelDirection]" Value="Direction générale opérationnelle de l'Aménagement du Territoire, du Logement, du Patrimoine et de l'Énergie" /> </Include> include_mediateur pour l'affichage de la mention « Voie de recours » dans les onglets de Renseginement <Include NewPage="none" DocumentId="xmediateur" /> gosub_mediateur_vie_privee pour l'affichage des 2 mentions en pdf <Section OutputMode="report" NewPage="both" Type="standard"> <Title>Protection de la vie privée et voies de recours</Title> <Include NewPage="none" DocumentId="gosub_mediateur_vie_privee"> <Customizer Name="[labelDirection]" Value="Direction générale opérationnelle de l'Aménagement du Territoire, du Logement, du Patrimoine et de l'Énergie" /> </Include> </Section> gosub_vie_privee pour l'affichage en pdf si la mention médiateur n'est pas exigée <Section OutputMode="report" NewPage="screen" Type="standard"> <Title>Protection de la vie privée</Title> <Include NewPage="none" DocumentId="gosub_vie_privee"> <Customizer Name="[labelDirection]" Value="Direction Générale de l'Agriculture, des Ressources naturelles et de l'Environnement" /> </Include> </Section> Recommandation : Le titre de la section contenant l'appel au gosub doit être « Protection de la vie privée et voies de recours » (ou « Protection de la vie privée » dans le second cas) ***** Page 67 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 19. Typographie 19.1 PRINCIPE eWBS impose le respect strict de règles typographiques. Objectifs des règles typographiques Montrer une image sérieuse de la Wallonie, de respect de la langue utilisée. Garantir une certaine harmonie et une cohérence dans la présentation pour l'usager. 19.2 TABLEAU SYNTHÉTIQUE DES RECOMMANDATIONS Ce tableau reprend une partie des règles de typographie. Cette liste n'est pas exhaustive : elle a simplement pour but d'attirer l'attention du rédacteur sur les points les plus importants et/ou les plus courants. Pour l'exhaustivité, cf. section 19.3 cidessous. N° Recommandation / convention 1 Pas de titre en toutes majuscules, ce sont les feuilles de style qui gèrent la mise en majuscule éventuelle. Exemples Réf. Titre comme ceci TITRE PAS COMME CELA **** 2 Selon les règles de la typographie française, pour « Une citation les guillemets français, toujours « et » jamais " et valide » ". Au clavier ALT+0171 et ALT+0187 et non "Comme ceci" * 3 Par convention, on écrira toujours « € » (dans un 200 € tableau) ou « euro » et « euros » (dans du texte), 200 euros dans du mais pas « EUR » ou « EURO » ou « Euro » texte et non 200 EUR ou 200 Euros **** 4 Selon les règles de la typographie française, toujours les accents sur les majuscules !!! ALT+0201 * Étant donné que... À l'avenir, ils... Page 68 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 N° Recommandation / convention 5 Par convention, on remplace les blancs par un « blanc insécable » (en théorie une « espace fine insécable ») devant certains caractères de ponctuation ou dans certains cas pour éviter un saut de ligne intempestif devant ces caractères. En l'occurrence : • avant les «_: » et les «_; », • entre la date et le mois, • dans un nombre comme séparateur de milliers, • sauf en dessous de 10 000, • entre un nombre et les unités de mesure, • dans les numéros de téléphone En pratique, on insère un CTRL+SPACE en mode « FLOW » dans FormPublisherStudio, et (non breaking space) en mode texte. Exemples Réf. > Voici la liste_: > le 25_février 2007 > 4_500_000,00 * **** * > 1987, 5165,67 * > 35_km, 450_euros * > 081_11_22_33 *** 6 Listes à puce ou listes numérotées (3 cas distincts, majuscule ou minuscule après la puce, « , » ou « ; » ou « . » à la fin de la puce) : • énumération de mots (substantifs) → minuscule et « , » • énumération de phrases seules avec verbe → minuscule et « ; » • énumération de paragraphes (groupes de phrases) → majuscule et « . » Il n'est pas cohérent d'avoir une liste à puces avec un mélange de mots d'une part, et de phrases ou de paragraphes d'autre part. Si des phrases seules et des paragraphes sont dans la même liste à puces, on considère le cas « paragraphe » → majuscule et « . » 7 Pour les numéros de téléphone, on sépare par 081_11_22_33 des « blancs insécables » (CTRL+SPACE en mode et non « FLOW » dans FormPublisherStudio,) entre les 081/11.22.33 nombres, et non des « . », des « - » ou des « / ». * ** Pour les numéros de téléphone internationaux, on +32_81_11_22_33 note le « + » devant le code du pays. *** Page 69 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 N° Recommandation / convention 8 TOUJOURS écrire les url de la même manière, avec le protocole en tête. TOUJOURS écrire les adresses courriel, on écrit sans aucune majuscule. 9 Par convention les sigles abrégés en majuscules, sans point. Selon les règles de la typographie française, ATTENTION aux sigles en toutes lettres, pas de majuscules pour un adjectif. Exemples Réf. http://www.wallonie. **** be et non www.wallonie.be **** prenom.nom@machi n.be et non Prenom.Nom@Machi n.be OCDE ou SPW et non O.C.D.E. ou S.P.W. * SPW = Service public de Wallonie avec petit « p » ASE = Agence de Stimulation économique 10 Par convention, nom de famille en majuscules M. Michel FRANÇOIS (pour éviter la confusion nom-prénom éventuelle) et non et ne jamais mettre un nom sans la civilité (M. ou M. Michel François Mme). **** 11 Selon les règles de la typographie française, en abrégé, on écrit Monsieur = M. Madame = Mme Mademoiselle = Mlle Messieurs = MM. Docteur = Dr premiers = 1ers deuxièmes = 2es etc. M., Mme, MM., Mlle, Dr, 1ers, 2es, etc. et non Mr, 2èmes, etc. * 12 Par convention, nom de ville en minuscules. Liège et non LIÈGE **** 19.3 SOURCES DES RECOMMANDATIONS TYPOGRAPHIQUES Les recommandations sont : • soit reprises des règles de la typographie française (*), http://www.dsi.univparis5.fr/typo.html, extraites du Manuel de typographie française élémentaire d'Yves Perrousseaux, lui-même inspiré des Règles typographiques en usage à Page 70 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 • • • l'Imprimerie nationale (ISBN 2-11-081075-0) ou du Dictionnaire des règles typographiques de Louis Géry, CFPJ Editions ; soit reprises du Code de rédaction interinstitutionnel, obligatoire pour tout intervenant dans l'élaboration de tout type de document (papier ou électronique) au sein des institutions, organes et services de l'Union européenne (**) ; soit reprises de la norme IBPT (***) ; soit le fruit d'une convention interne chez eWBS, dans un soucis de bon sens et de cohérence (****). ***** Page 71 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 20. Dénominations et logos officiels Recommandation : En accord avec la Direction de la Communication, les dénominations et logos officiels doivent être utilisés. Jamais les raccourcis DGO1, etc. 20.1 DÉNOMINATIONS OFFICIELLES Comme convenu avec la Direction de la Communication (réunion du 22 juin 2009 et charte graphique publiée sur son site, cf. http://chartegraphique.wallonie.be), TOUJOURS écrire les DG de la même manière dans le texte, c'est-à-dire en toutes lettres et JAMAIS en abrégé : toujours remplacer ... par ... SG → Secrétariat général DGT → Direction générale transversale du Budget, de la Logistique et des Technologies de l’information et de la communication et en allemand, par ... Secretariat-Generaal Ressortübergreifende Generaldirektion für Haushalt, Logistik und Informationsund Kommunikationstechnologie DGO1 → Direction générale opérationnelle des Routes et des Bâtiments Operative Generaldirektion für Strassen und Gebäude DGO2 → Direction générale opérationnelle de la Mobilité et des Voies hydrauliques Operative Generaldirektion für Mobilität und Wasserweg DGO3 → Direction générale opérationnelle de l'Agriculture, des Ressources naturelles et de l'Environnement Operative Generaldirektion für Landwirtschaft Naturschätze und Umwel DGO4 → Direction générale opérationnelle de l'Aménagement du Territoire, du Logement, du Patrimoine et de l'Énergie Operative Generaldirektion für Raumordnung, Wohnungswesen, Erbe und Energie DGO5 → Direction générale opérationnelle des Pouvoirs locaux, de l'Action sociale et de la Santé Operative Generaldirektion für Lokale Behörden, Soziale Massnahmen und Gesundheit DGO6 → Direction générale opérationnelle Operative Generaldirektion für de l'Économie, de l'Emploi et de la Unternehmen, Beschäftigung und Recherche Forschung Page 72 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 DGO7 → Direction générale opérationnelle de la Fiscalité Operative Generaldirektion für Steuerwesen En xml, pour l'adresse du formulaire dans le cadre à droite (première page du formulaire), on mettra : <MetaFields Name="organisation"> <MetaField Name="name">Service public de Wallonie</MetaField> <MetaField Name="department1">Direction générale opérationnelle de l'Agriculture des Ressources naturelles et de l'Environnement</MetaField> <MetaField Name="department2">Département de la Nature et des Forêts</MetaField> <MetaField Name="department3">Direction de la Chasse et de la Pêche</MetaField> <MetaField Name="department4">Servie Untel</MetaField> <MetaField Name="address-line1">Chaussée de Charleroi, 83 B</MetaField> <MetaField Name="zip-code">5000</MetaField> <MetaField Name="city">Salzinnes (Namur)</MetaField> </MetaFields> Attention, c'est « O » comme « opérationnelle » et non zéro ! 20.2 LOGOS OFFICIELS Comme convenu avec la Direction de la Communication (réunion du 22 juin 2009 et charte graphique, cf. http://chartegraphique.wallonie.be/CHARTE_SPW_1_7.pdf), • le logo de la Wallonie se place en haut à gauche, • le logo de l'entité (SPW pour le Service public de Wallonie, logo spécifique pour les OIP) se place en haut à droite. ***** Page 73 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 21. Recommandations de lisibilité Recommandation : Suivre les 10 règles d'or de la lisibilité. Ce document est disponible sur demande. ***** Page 74 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 22. Principes de mise en page Principe général Minimiser la mise en page, laisser faire les feuilles de style au maximum. En particulier : 1. Essayer de regrouper les éléments en <Content> et en <Paragraph> pour structurer les données d'après leur sens et non pas pour mettre en page. ATTENTION ! <Content> ajoute un interligne avant et après, <Paragraph> pas. 2. Utiliser les <Content> StyleName="warning" StyleName="remark" StyleName="important" pour remplacer des phrases du type « Remarque » ou « Attention, vous trouverez l'info ... ». Ce type de <Content> peut ajouter (ou pas) un logo adéquat, mais de toute façon, ce logo doit être fixé par les templates et les feuilles de style. 3. Pour insérer un interligne supplémentaire, si vraiment c'est indispensable. Où ? À la fin d'un <Content> et non au début. Comment ? <Content> <Paragraph </Content > Spacing="x-large">blablabla</Paragraph> 4. Éviter les <table> autant que possible pour faire de la mise en page ; par exemple, pour faire une liste, on utilise préférentiellement <List MarkerStyle="number"> pour une liste numérotée ou <List MarkerStyle="bullet"> pour une liste à puces. C'est en principe au layout à mettre en page correctement la liste. 5. Pour la mise en évidence d'un texte ou d'une partie de texte, on utilise TOUJOURS d'abord le style gras <Style Type="bold">. On n'utilise par conséquent presque jamais les styles italique <Style Type="italic"> ou souligné <Style Type="underline"> dans les formulaires wallons ou les couleurs <Style Type="red">. Recommandation : La mise en évidence d'un texte se fait en gras. On ne multiplie pas les types de mise en évidence. Par exemple, le rouge n'est pas recommandé : 1. Ce n’est pas dans la charte graphique des formulaires papier. Pas non plus dans celle des formulaires web (couleurs de l’arc-en-ciel de la charte « Ensemble simplifions »). 2. Le rouge en ergonomie doit être réservé aux erreurs, c’est important de garder cette signification 3. Si on diversifie trop les moyens de mise en évidence, plus rien ne ressort du lot. → en résumé : trop de mise en évidence tue la mise en évidence … et l’identité graphique. Page 75 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 6. Utiliser le gras <Style Type="bold"> pour mettre en évidence le mot significatif dans une liste à puce <List MarkerStyle="bullet"> ou une liste numérotée <List MarkerStyle="number"> ou encore une série de <RadioBox>. 7. En cas de phrase orpheline (phrase qui se retrouve seule à la page suivante), remplacer <Paragraph> par <Paragraph Spacing="x-small"> peut essayer de la replacer sur la page précédente. ATTENTION !!! À n'utiliser que très rarement et surtout en toute fin de fabrication, au moment du réglage final des sauts de page pdf. ***** Page 76 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 23. Tableaux 23.1 PRINCIPES Les tableaux peuvent servir dans 3 cas : • le tableau réel de données avec une liste d'objets en vertical (ordonnée) et une liste de caractéristiques en horizontal (abscisse) • le tableau de mise en disposition (à éviter autant que possible), • le tableau de choix multiples avec contenu dynamique. Recommandation Il faut garder le plus possible la structure xml du formulaire conforme à la structure réelle des données. Les tableaux ne peuvent pas servir à mettre en page dans les autres cas. Par exemple, pour faire une liste, on utilise obligatoirement une liste numérotée <List MarkerStyle="number"> ou une liste à puces <List MarkerStyle="bullet">. C'est en principe au layout (et non au tableau !) à faire la mise en page correcte. 23.2 TABLEAU RÉEL DE DONNÉES Exemple : on a une liste de n objets (Isolants) et leur caractéristiques en tête de colonne Type d'isolant Marque Valeur λ Épaisseur d Coefficient R Isolant 1 Isolant 2 Isolant 3 Isolant 4 23.3 TABLEAU DE MISE EN DISPOSITION Pour gagner de la place et grouper les champs qui ont un sens sémantique commun (ce qui est le cas, par exemple, pour la rue, le numéro, etc. dans l'adresse), au lieu de placer les champs d'interrogation en enfilade, comme suit : Rue Numéro Boîte Page 77 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Code postal Localité … on préférera les disposer plus groupés, comme suit : Rue Numéro Code postal 23.4 TABLEAU Boîte Localité DE CHOIX MULTIPLE AVEC CONTENU DYNAMIQUE Un radio bouton avec, par exemple 3 choix. Si on coche le premier, un cadre (filet tableau="border") s'ouvre avec plusieurs questions (dans des <Paragraph> et des <Table>) Si on coche un autre, le premier cadre se ferme, et le suivant s'ouvre... Etc. Question posée toto ou fifi ou ruru ? : □ Toto □ □ □ M. Nom Prénom Mme Fifi Numéro d'entreprise □ Ruru Autre question <Content> <Paragraph>Question posée toto ou fifi ou ruru ?</Paragraph> <Table StyleName="noBorder"> <ColumnDefinitions> <ColumnDefinition Width="3%" /> Page 78 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 <ColumnDefinition Width="97%" /> </ColumnDefinitions> <TableBody> <Tr> <Td Colspan="2" Rowspan="1" VerticalAlignment="middle"> <Paragraph> <Question> <RadioBox Name="choix"> <Option Value="toto">Toto</Option> </RadioBox> </Question> </Paragraph> </Td> </Tr> <Tr IsVisible="$(choix)=='toto'"> <Td><Paragraph></Paragraph></Td> <Td Colspan="2" Rowspan="1" StyleName="border"> <Paragraph> <Question> <Label>Question 1 si toto</Label> <TextBox Name="choix1question1" /> </Question> </Paragraph> <Paragraph> <Question> <Label>Question 2 si toto</Label> <TextBox Name="choix1question2" /> </Question> </Paragraph> <Table StyleName="noBorder" /><!-- avec des <Paragraph> et des <Question> --> </Td> </Tr> <Tr IsVisible="$(choix)=='toto'"> <Td><Paragraph></Paragraph></Td> <Td><Paragraph></Paragraph></Td> </Tr> <Tr> <Td Colspan="2" Rowspan="1"> <Paragraph> <Question> <RadioBox Name="choix"> <Option Value="fifi">Fifi</Option> </RadioBox> </Question> </Paragraph> </Td> </Tr> <Tr IsVisible="$(choix)=='fifi'"> <Td><Paragraph></Paragraph></Td> <Td Colspan="2" Rowspan="1" StyleName="border"> <Paragraph> <Question> <Label>Question 1 si fifi</Label> <TextBox Name="choix2question1" /> </Question> </Paragraph> <Paragraph> <Question> Page 79 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 <Label>Question 2 si fifi</Label> <TextBox Name="choix2question2" /> </Question> </Paragraph> </Td> </Tr> <Tr IsVisible="$(choix)=='fifi'"> <Td><Paragraph></Paragraph></Td> <Td><Paragraph></Paragraph></Td> </Tr> <Tr> <Td Colspan="2" Rowspan="1"> <Paragraph> <Question> <RadioBox Name="choix"> <Option Value="ruru">Ruru</Option> </RadioBox> </Question> </Paragraph> </Td> </Tr> <Tr IsVisible="$(choix)=='ruru'"> <Td><Paragraph></Paragraph></Td> <Td Colspan="2" Rowspan="1" StyleName="border"> <Paragraph> <Question> <Label>Question 1 si ruru</Label> <TextBox Name="choix3question1" /> </Question> </Paragraph> </Td> </Tr> </TableBody> </Table> </Content> 23.5 LARGEUR DES COLONNES Ne jamais fixer la taille d'une cellule via <td width="50%">. Toujours utiliser les balises <columnDefinitions> et <columnDefinition>. Exemple : <Paragraph> <Table OutputMode="all" HorizontalAlignment="left"> <ColumnDefinitions> <ColumnDefinition Width="25%" /> <ColumnDefinition Width="25%" /> <ColumnDefinition Width="50%" /> </ColumnDefinitions> <TableHeader> <Tr> <Th Colspan="1" Rowspan="1" VerticalAlignment="top"> <Paragraph OutputMode="all" HorizontalAlignment="left" Spacing="normal">¤</Paragraph> </Th> <Th Colspan="1" Rowspan="1" VerticalAlignment="top"> <Paragraph OutputMode="all" HorizontalAlignment="left" Spacing="normal">¤</Paragraph> Page 80 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 </Th> <Th Colspan="1" Rowspan="1" VerticalAlignment="top"> <Paragraph OutputMode="all" HorizontalAlignment="left" Spacing="normal">¤</Paragraph> </Th> </Tr> </TableHeader> <TableBody> <Tr> <Td Colspan="1" Rowspan="1" VerticalAlignment="middle"> <Paragraph OutputMode="all" HorizontalAlignment="left" Spacing="normal">¤</Paragraph> </Td> <Td Colspan="1" Rowspan="1" VerticalAlignment="middle"> <Paragraph OutputMode="all" HorizontalAlignment="left" Spacing="normal">¤</Paragraph> </Td> <Td Colspan="1" Rowspan="1" VerticalAlignment="middle"> <Paragraph OutputMode="all" HorizontalAlignment="left" Spacing="normal">¤<Question><Label>Libellé question¤</Label><TextBox Name="nom_variable" RefreshOnExit="false" DataType="string" NumberOfVisibleCharacters="15" IsRequired="false" /></Question></Paragraph> </Td> </Tr> </TableBody> </Table> 23.6 LES TABLEAUX ET FOP Quand on a un <Table> avec plusieurs <Tr> tous AVEC condition, si aucun des conditions n'est true, alors on a un <Table> vide de <Tr>. Fop ne tolère pas ça lors de transformation du fichier .fo en .pdf. Ce problème est très difficile à détecter... Il faudrait dans l'idéal que Jway puisse faire un test sur ça à la compilation, mais c'est très complexe... Exemple : <Table> <ColumnDefinitions/> <TableHeader/> <TableBody> <Tr IsVisible="($(item|actionnaire)=='physique')"> ... </Tr> <Tr IsVisible="($(item|actionnaire)=='morale')"> ... </Tr> </TableBody> </Table> Dans cet exemple, dès que la variable ne vaut ni "physique", ni "morale", on a un problème de fabrication du fo2pdf... avec fop dynamique (donc bien après la publication). Le problème peut se poser également lorsqu'une cellule est vide. Il faut donc éviter le cas de figure suivant : Page 81 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 <Table> <ColumnDefinitions/> <TableHeader/> <TableBody> <Tr IsVisible="($(item|actionnaire)=='physique')"> <Td> <Paragraph IsVisible="($(a)=='toto')"> ... </Paragraph> </Td> </Tr> </TableBody> </Table> Car si la variable a est différente de "toto", alors le <Td> sera vide. Autrement dit, dans nos tests : • calcul du pdf vierge lors de la publication ---> bug indétectable car les conditions sont annihilées • calcul du pdf lorsqu'on clique sur "Aperçu pdf" ---> bug indétectable car les conditions sont annihilées • calcul du pdf lorsqu'on clique sur "Aperçu pdf" sur la dernière page du formulaire (après "Valider") ---> bug détectable mais uniquement si les variables se "mettent mal"... donc il faut tester avec des valeurs "idiotes" pour espérer faire planter... Recommandation Le développeur de formulaire doit être très attentif en codant une table avec des conditions sur les cellules <Td>. Soit on évite absolument de mettre une condition sur toutes les lignes <Tr> Soit il faut s'assurer que toutes les conditions couvrent l'ensemble des valeurs possibles pour la variable de test dans la condition IsVisible. Ne jamais placer de condition sur un <Paragraph> seul dans une cellule. ***** Page 82 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 24. Formattage des champs 24.1 TYPES Integer – String – Double – Boolean 24.2 ARRONDIS pour faire un arrondi d'une valeur 24.3 QUAND UTILISER ASNUMBER ? a=asNumber(zzzzz) b=asNumber(gggg) faut-il c=a+b ou c=asnumber(a) + asnumber(b) ? 24.4 FORMAT COMME ATTRIBUT ATTENTION !!! vérifer formattage format="####" ; exemple format="#.##", alors « 99,4 » devient « 9.94 » dans un formulaire de FMO (formulaire Entreprise d'Insertion) Regarder la doc sur University 24.5 FORMAT DANS JIL dans une commande JIL, comment fait-on le formattage ? ***** Page 83 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 25. Libellés des questions 25.1 PRINCIPE Recommandations Toujours utiliser un <Label> pour le libellé d'un champ, dans une <Question>. Ne jamais mettre « : » à la fin du libellé. 25.2 EXCEPTION POUR L'UTILISATION DU <LABEL> Dans un tableau réel de données (cf. recommandation n° 23, page 77, pour la définition d'un tableau réel de données), le label est le titre de la colonne (dans le header, c'est-à-dire un label par cellule du header <TH>). Par contre, dans un tableau de mise en disposition (cf. recommandation n° 23, page 77, pour la définition d'un tableau de mise en disposition), il faut toujours utiliser <Label>. 25.3 LABELS TROP LONGS Si le label est trop long : 1. raccourcir approximativement à la taille visuelle du champ (pas indispensable, mais esthétique et c'est un travail de lisibilité nécessaire, car un libellé de question trop long n'est pas lisible) 2. sauf si c'est un champ mémo (sauf qu'un libellé trop long est par définition toujours à proscrire si pas lisible) ***** Page 84 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 26. Blocage de l'accès direct 26.1 PRINCIPE Pour bénéficier des interactions avec le portail (pré-remplissage, sauvegarde, upload d'annexes, soumission), il faut que l'usager aie une session avec le portail. Il faut donc éviter qu'il aille directement sur le formulaire sur le serveur Tomcat des formulaires. Recommandation Pour éviter que les usagers accèdent directement à un formulaire sans session, on bloque l'accès en direct. Ceci se fait pour tous les formulaires sauf exception explicite, dans la liste des formulaires suivants : Déclaration des mandats exigence de la Cellule de déclaration des mandats (M. Nicole MATAGNE) 26.2 TECHNIQUE Le blocage de l'accès en direct sur le formulaire (et l'obligation pour l'usager de passer par le site formulaires.wallonie.be) est matérialisé par 3 éléments indispensables : • l'adaptation paramétrée des templates dynamique dans le MY.REF et plus particulièrement MYREF/dynamic_templates/form.xhtml, notamment via les quelques lignes suivantes : <?variable easi.form.direct=getProperty('easi.form.direct') ?> <?if (($(easi.server.prod)=='YES') && ($(existPortal)=='false') && ($ (easi.form.direct)!='ENABLED')) ?> <body> <!--header--> <object classid="jway.applyxslt"> <param name="jway.xsl" value="ref/xslt/pubHTML/formHeader" /> </object> <!-- CONTAINER --> <div class="container"> <object classid="jway.applyxslt"> <param name="jway.xsl" value="ref/xslt/pubHTML/contentSpecial" /> <param name="jway.resourceId" value="redirect.jxml$" /> </object> </div> </body> • la variable easi.server.prod (YES/NO) dans .jway/jPublisherConfig.properties, variable liée donc au serveur Page 85 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 • la variable easi.form.direct (ENABLED/DISABLED) dans APPLI.REF/ publication.properties de l'environnement du formulaire, variable liée donc au formulaire 26.3 CAS DE BLOCAGE Il est clair que le blocage n'est utile que sur le serveur de production. Donc, le paramètre easi.server.prod n'est positionné à YES que sur le serveur de production, pas sur les autres. serveurs easi.serve blocage accès direct r.prod easi.form.direct=ENABL easi.form.direct=DISAB ED LED forms6.test.wallonie.be NO NON NON forms6.wallonie.be YES NON bloqué ***** Page 86 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 27. Accès DB en lecture 27.1 FICHIER DE CONFIGURATION Dans APPLI.REF/publication.properties # -- MYSQL database local-#jway.remote.db.jdbcdriver=com.mysql.jdbc.Driver #jway.remote.db.url=jdbc:mysql://localhost/test_db #jway.remote.db.user=root #jway.remote.db.password=*********** # -- ORACLE database de PRODUCTION (DEX) -#jway.remote.db.jdbcdriver=oracle.jdbc.driver.OracleDriver #jway.remote.db.url=jdbc:oracle:thin:@157.164.138.97:1521:tora101 #jway.remote.db.user=FORMS #jway.remote.db.password=********** # -- ORACLE database de VALIDATION (DEX) -jway.remote.db.jdbcdriver=oracle.jdbc.driver.OracleDriver jway.remote.db.url=jdbc:oracle:thin:@157.164.138.97:1521:tora101 jway.remote.db.user=FORMS jway.remote.db.password=********** 27.2 EXEMPLE DE « PROCESSING INSTRUCTIONS » DANS LE FORMULAIRE L'appel dans le formulaire (exemple dans ce cas ci-dessous : médiation de dettes) <Content> <Paragraph OutputMode="interview">*** DEBUG : AVANT DB *** : demandeur| num_agrementOld=<Data Expression="$(demandeur|num_agrementOld)" /></Paragraph> <Paragraph OutputMode="interview">*** DEBUG *** : demandeur|num_agrement =<Data Expression="$(demandeur|num_agrement)" /></Paragraph> <!-- *** PRE-REMPLISSAGE ORIGINAL *** --> <?if-exist $(demandeur|num_agrement)?> <?if $(demandeur|num_agrement) != null?> <?if $(demandeur|num_agrement) != $(demandeur|num_agrementOld) ?> <Variable Name="demandeur|num_agrementOld" Expression="$(demandeur| num_agrement)" /> <?if $(DB_RequestDone) == null ?> <Variable Name="args[0]" Expression=""request"" /> <?variable args[1]="SELECT * FROM institutions WHERE Agr='"+$(demandeur| num_agrement)+"'"?> <Variable Name="res" Expression="JilExtension("lu.jway.util.jilextension.JdbcConnector",$ (args))" /> <Variable Name="DB_RequestDone" Expression="1" /> <?end-if?> <?if (getSize($(res))==0)?> <?setInterviewErrorOnField demandeur|num_agrement : "Numéro d'agrément non valide."?> <?end-if?> <?if ( getSize($(res))==1 ) ?> <Variable Name="demandeur|identification|denomination" Expression="$ (res[0]|denomination)" /> Page 87 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 <Variable Name="demandeur|identification|institution|adresse|rue" Expression="$(res[0]|adr_rue)" /> <Variable Name="demandeur|identification|institution|adresse|numero" Expression="$(res[0]|adr_numero)" /> <Variable Name="demandeur|identification|institution|adresse|boite" Expression="$(res[0]|adr_boite)" /> <Variable Name="demandeur|identification|institution|adresse|cp" Expression="$(res[0]|adr_cp)" /> <Variable Name="demandeur|identification|institution|adresse|localite" Expression="$(res[0]|adr_localite)" /> <Variable Name="demandeur|secteur" Expression="$(res[0]|secteur)" /> <Variable Name="demandeur|statutJuridique" Expression="$(res[0]|statut)" /> <Variable Name="demandeur|detailConventionCpas" Expression="$(res[0]| convetion)" /> <?if $(demandeur|detailConventionCpas) == null ?> <Variable Name="demandeur|conventionCpas" Expression=""NON"" /> <?else?> <Variable Name="demandeur|conventionCpas" Expression=""OUI"" /> <?end-if?> <?variable VarTemp = format ( '#######' , $(res[0]|population) ) ?> <Variable Name="demandeur|population" Expression="asNumber( $ (VarTemp) )" /> <!-- *** DEBUG : MARCHE ??? *** --> <Variable Name="demandeur|smd|adresse|rue" Expression="$(res[0]| smd_rue)" /> <Variable Name="demandeur|smd|adresse|numero" Expression="$(res[0]| smd_numero)" /> <Variable Name="demandeur|smd|adresse|boite" Expression="$(res[0]| smd_boite)" /> <Variable Name="demandeur|smd|adresse|cp" Expression="$(res[0]|smd_cp)" /> <Variable Name="demandeur|smd|adresse|localite" Expression="$(res[0]| smd_localite)" /> <?variable VarTemp = format ( '####' , $(res[0]|agrement_annee) ) ?> <Variable Name="demandeur|agrement|anneePremierAgrement" Expression="asNumber( $(VarTemp) )" /> <!-- *** DEBUG : MARCHE ??? *** --> <?variable demandeur|agrement|dateDebut = afficheDate( getDate( $(res[0]| agrement_debut) , "dd/MM/yyyy") , "dd/MM/yyyy") ?> <?variable demandeur|agrement|dateFin = afficheDate( getDate( $(res[0]| agrement_fin) , "dd/MM/yyyy") , "dd/MM/yyyy") ?> <Variable Name="demandeur|banque|numBancaireBE" Expression="$(res[0]| compte_financier)" /> <!-- *** PRE-REMPLISSAGE POUR LES CHAMPS Modifiables *** --> <Variable Name="demandeur|identification|denominationOrig" Expression="$ (demandeur|identification|denomination)" /> <Variable Name="demandeur|identification|institution|adresse|rueOrig" Expression="$(demandeur|identification|institution|adresse|rue)" /> <Variable Name="demandeur|identification|institution|adresse|numeroOrig" Expression="$(demandeur|identification|institution|adresse|numero)" /> <Variable Name="demandeur|identification|institution|adresse|boiteOrig" Expression="$(demandeur|identification|institution|adresse|boite)" /> <Variable Name="demandeur|identification|institution|adresse|cpOrig" Expression="$(demandeur|identification|institution|adresse|cp)" /> <Variable Name="demandeur|identification|institution|adresse|localiteOrig" Expression="$(demandeur|identification|institution|adresse|localite)" /> <Variable Name="demandeur|banque|numBancaireBEOrig" Expression="$ (demandeur|banque|numBancaireBE)" /> <Variable Name="demandeur|conventionCpasOrig" Expression="$(demandeur| conventionCpas)" /> Page 88 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 <Variable Name="demandeur|detailConventionCpasOrig" Expression="$ (demandeur|detailConventionCpas)" /> <Variable Name="demandeur|populationOrig" Expression="$(demandeur| population)" /> <Variable Name="demandeur|smd|adresse|rueOrig" Expression="$(demandeur|smd| adresse|rue)" /> <Variable Name="demandeur|smd|adresse|numeroOrig" Expression="$(demandeur| smd|adresse|numero)" /> <Variable Name="demandeur|smd|adresse|boiteOrig" Expression="$(demandeur| smd|adresse|boite)" /> <Variable Name="demandeur|smd|adresse|cpOrig" Expression="$(demandeur|smd| adresse|cp)" /> <Variable Name="demandeur|smd|adresse|localiteOrig" Expression="$ (demandeur|smd|adresse|localite)" /> <?end-if?> <!-- FIN From DB --> <?else?> <Paragraph OutputMode="interview">||| DEBUG *** $(demandeur|num_agrement) = $(demandeur|num_agrementOld) ! ***</Paragraph> <?end-if?> <?else?> <Paragraph OutputMode="interview">||| DEBUG *** $(demandeur|num_agrement) = null ! ***</Paragraph> <?end-if?> <?else?> <Paragraph OutputMode="interview">||| DEBUG *** $(demandeur|num_agrement) n'existe pas ! ***</Paragraph> <?end-if?> <Paragraph OutputMode="interview">*** ERROR*** : ERROR=<Data Expression="$ (res[0])" /></Paragraph> <Paragraph> <Variable Name="demandeur|num_agrementOld" DataType="string" Submit="true" Expression="$(demandeur|num_agrementOld)" /> </Paragraph> </Content> 27.3 CLASSES À AJOUTER Fichiers à rajouter dans le APPLI.REF APPLI.REF\jpublisher_extension\wstx_lgpl_3_2_1.jar APPLI.REF\jpublisher_extension\stax_api_1_0_1.jar APPLI.REF\jpublisher_extension\ojdbc14.jar APPLI.REF\jpublisher_extension\ojdbc14\oracle\[...] APPLI.REF\jpublisher_extension\lu\jway\util\DBConnector.java APPLI.REF\jpublisher_extension\lu\jway\util\jilextension\JdbcConnector.java ***** Page 89 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 28. Utilisation des champs mémo 28.1 UTILISATION GÉNÉRALE DU CHAMP MÉMOR Le champs mémo ne permet pas à l'usager de rédiger un texte riche (gras, souligné, puces, images, etc.) Ceci le bride dans son expression et lui empêche également de faire facilement des copier-coller. Pour toutes les parties purement textuelles, descriptives, des formulaires (données collectées qui sont rarement intégrées et exploitées dans un back-office ; par ex. : un rapport d’activités, un descriptif de fonction, une fiche projet, etc.), il est préférable de recourir à un document annexe, type word formaté, dans lequel les usagers peuvent recourir au copier-coller, utiliser une mise en page travaillée, éventuellement insérer un schéma ou une image, etc. Recommandation : D'une manière générale, l'utilisation du champ mémo n'est pas recommandée. Il faut toujours préférer proposer de joindre un fichier word, permettant de rédiger en texte riche. 28.2 TAILLE AFFICHÉE Pour fixer les dimensions du champs mémo, on compte en nombre de lignes (NumberOfVisibleRows) et de caractères par ligne (NumberOfVisibleCharacters). Dans l'exemple ci-dessous, c'est 3×15. <MemoBox Name="item|avantagesNature|descriptif" RefreshOnExit="false" NumberOfVisibleRows="3" NumberOfVisibleCharacters="15" AutoSize="true" IsRequired="false"> <Control ErrorType="error" Type="rangeChar"> <Parameter Name="min" /> <Parameter Name="max" Value="75" /> </Control> </MemoBox> La taille de la largeur de la page pdf est de 88 caractères (NumberOfVisibleCharacters="88"). Pour limite la taille à 1 page ou 1/2 page ou 1/4 page, il faut également fixer le nombre de ligne à NumberOfVisibleRows="45" (1 page), NumberOfVisibleRows="22" (1/2 page) ou NumberOfVisibleRows="11" (1/4 page). Recommandation Si on utilise les champs mémo malgré la première recommandation, toujours essayer de limiter la taille des champs, et en particulier celle des champs mémo. Utiliser le compteur de caractère OBLIGATOIREMENT dès lors qu'il y a une limite sur la taille d'un champ mémo. Page 90 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 28.3 TAILLE DE LA RÉPONSE DE L'USAGER Pour limiter la réponse de l'usager (minimum et maximum) dans un champs mémo, on compte en nombre de caractères. Dans l'exemple ci-dessous, c'est 10 caractères minimum et 100 maximum. En dehors de ces limites, le champs sera mis en erreur. <Question> <Label IsTooltipOnly="false">Minimum 10, maximum 100</Label> <MemoBox Name="field1" RefreshOnExit="false" NumberOfVisibleRows="4" NumberOfVisibleCharacters="88" AutoSize="false" IsRequired="false"> <Control ErrorType="error" Type="rangeChar"> <Parameter Name="min" Value="10" /> <Parameter Name="max" Value="100" /> </Control> </MemoBox> </Question> 28.4 COMPTEUR DE CARACTÈRES Pour informer l'usager de la limite maximum de sa dans un champs mémo, on utiliser le type rangeCharWithCounter. <Question> <Label IsTooltipOnly="false">Minimum 10, maximum 100</Label> <MemoBox Name="field1" RefreshOnExit="false" NumberOfVisibleRows="4" NumberOfVisibleCharacters="88" AutoSize="false" IsRequired="false"> <Control ErrorType="error" Type="rangeCharWithCounter"> <Parameter Name="min" Value="10" /> <Parameter Name="max" Value="100" /> </Control> </MemoBox> </Question> ***** Page 91 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 29. Recalcul des totaux 29.1 PRINCIPE Le rafraîchissement d'une page se fait en passant à une autre page. Ceci peut être gênant pour l'usager lorsqu'il y a un calcul sur les valeurs que l'usager a déjà encodé sur cette page et que le résultat de ce calcul doit apparaître sur cette même page. Par exemple, le calcul de la somme des valeurs d'un tableau. Recommandation : Lorsqu'il y beaucoup de données sur une page, avec un calcul sur ces données, il faut ajouter un petit bouton pour que l'usager puisse « Cliquer pour recalculer les totaux ». 29.2 CODE EXEMPLE <Content OutputMode="interview" NewPage="none" StyleName="remarque"> <Paragraph OutputMode="all" HorizontalAlignment="left" Spacing="normal"> <Question> <Label IsTooltipOnly="false">Cliquez ici pour recalculer les totaux <Variable Name="afficherTotaux" Expression="'non'" Submit="false" DataType="string" /></Label> <CheckBox Name="afficherTotaux" RefreshOnExit="true" DataType="string" ValueWhenChecked="oui" ValueWhenUnchecked="non" /> </Question> </Paragraph> </Content> L'élément important est le RefreshOnExit="true". ***** Page 92 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 30. Liste de paires codes libellés 30.1 PRINCIPE Recommandation : On utilise cette technique lorsque l'usager doit pouvoir faire une recherche sur base d'une paire codes-libellés, c'est-à-dire rechercher un libellé sur base d'un code ou l'inverse, et lorsque cette liste de paires codes-libellés est peu variable dans le temps, c'est-à-dire pas de modification plus fréquentes que les mises à jour du formulaire correspondant. 30.2 PAR DÉFAUT Le fichier ./MY.REF/javascript/assistant_codelib.js contient 4 tables statiques (par opposition à un accès à une table dynamique, dans une base de données par exemple). matrice rang [x][0] rang [x][1] nombre d'éléments T[][] code postal commune nb=2901 T1[][] 1 … 10 un … dix (pas le zéro !) nb1=10 T2[][] code INS commune nb2=262 T3[][] code NACE libellé nb3=1925 30.3 FICHIER À MODIFIER POUR AJOUTER UNE LISTE NOUVELLE Pour ajouter une nouvelle liste (T4 dans l'exemple ici), il faut modifier le fichier suivant : ./APPLI.REF/javascript/assistant_codelib.js et y ajouter les lignes suivantes pour former la nouvelle table de codes (colonne 0) et libellés (colonne 1): var nb4 = 500; var T4 = new Array(nb4); for(var cpt=0;cpt<nb4;cpt++) T4[cpt] = new Array(2); //--- remplissage T4[0][0] = "010101"; T4[0][1] = "D\u00e9chets"; T4[1][0] = "010304"; T4[1][1] = "St\u00e9riles acidog\u00e8nes"; T4[2][0] = "010305"; T4[2][1] = "Autres st\u00e9riles"; T4[3][0] = "010307"; T4[3][1] = "Autres d\u00e9chets"; [...] T4[498][0] = "140728"; T4[498][1] = "Autres filtres"; Page 93 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 T4[499][0] = "140727"; T4[499][1] = "Filtres \u00e0 huile"; Attention ! Les caractères accentués doivent être codés selon http://alis.isoc.org/codage/iso10646/rang_00.htm remplacer également dans le même fichier, tout à la fin : return T1; par if (format.substr(0,4) == "codespecial") { return T4; } else { return T1; } Dans le formulaire appelant, il faut <Paragraph> <Question class="String" required="yes" select="code"> <txt control="controlCode" format="codespecial" group="groupcodespecial" size="10" type="assist"></txt> </Question> </Paragraph> <Paragraph> <Question class="String" select="agrement|dechets|dangereux|codes[$(k)]| libelle"> <txt control="controlLib" format="codespecial" group="groupcodespecial" size="40" type="assist"></txt> </Question> </Paragraph> ***** Page 94 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 31. Itérations Recommandation : Utiliser le DataIterator sur l'objet à multiplier. 31.1 EXEMPLE DE CODE D'UN TABLEAU ITÉRATIF <Table OutputMode="all" HorizontalAlignment="left" StyleName="sansBordures"> <ColumnDefinitions> <ColumnDefinition Width="5%" WidthPaper="5%" /> <ColumnDefinition Width="85%" WidthPaper="95%" /> <ColumnDefinition Width="10%" WidthPaper="0%" /> </ColumnDefinitions> <TableHeader> <Tr> <Th Colspan="1" Rowspan="1" VerticalAlignment="top"> <Paragraph OutputMode="all" HorizontalAlignment="center" Spacing="normal">N°</Paragraph> </Th> <Th Colspan="1" Rowspan="1" VerticalAlignment="top"> <Paragraph OutputMode="all" HorizontalAlignment="center" Spacing="normal">Dénomination de la filiale</Paragraph> </Th> <Th Colspan="1" Rowspan="1" VerticalAlignment="top"> <Paragraph OutputMode="all" HorizontalAlignment="left" Spacing="normal">¤</Paragraph> </Th> </Tr> </TableHeader> <TableBody> <DataIterator InternalName="filiale" DataPath="filiales" MinItemToPrint="3" /> <Tr> <Td Colspan="1" Rowspan="1" VerticalAlignment="top"> <Paragraph OutputMode="all" HorizontalAlignment="center" Spacing="normal"> <Question> <TextBox Name="filiale|numero" RefreshOnExit="false" DataType="string" NumberOfVisibleCharacters="2" IsRequired="true" AutoSize="false"> <Control ErrorType="error" Type="default" /> </TextBox> </Question> </Paragraph> </Td> <Td Colspan="1" Rowspan="1" VerticalAlignment="top"> <Paragraph OutputMode="all" HorizontalAlignment="center" Spacing="normal"> <Question> <TextBox Name="filiale|identification|denomination" RefreshOnExit="false" DataType="string" NumberOfVisibleCharacters="82" IsRequired="true" AutoSize="false"> <Control ErrorType="error" Type="default" /> </TextBox> </Question> </Paragraph> Page 95 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 </Td> <Td Colspan="1" Rowspan="1" VerticalAlignment="top"> <IteratorControlButton Type="insertBefore" /> <IteratorControlButton Type="delete" /> <IteratorControlButton Type="insertAfter" /> </Td> </Tr> </TableBody> </Table> 31.2 COMMENTAIRES Tout ce qui est placé après le dataIterator sera dupliqué lorsque l'utilisateur cliquera sur le bouton « + » et sera supprimé lorsque l'utilisateur cliquera sur le bouton « - ». Les boutons n'apparaitront que pour la partie web (10%) et non pour la partie papier (0%). Valeurs pour fixer le nombre maximum et minimum d'éléments : minItemToPrint en pdf vierge nombre de lignes affichées (ici 3) en pdf rempli nombre de lignes affichées (ici 3) en web ne sert pas car on affiche toujours 1 ligne minimum ***** Page 96 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 32. Ensemble de questions FormPublisher permet de regrouper des <Question> dans un ensemble <QuestionSet>. Cependant, la charte graphique eWBS ne le prévoit pas, et donc les templates correspondants n'ont pas été définis, ni en html, ni en pdf. Recommandation : Ne pas utiliser l'objet <QuestionSet>. ***** Page 97 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 33. Notifications multiples Recommandation : Utiliser le code approprié pour la notification courriels multiples. Lors de la soumission d'un formulaire à un compte GE, et éventuellement à une application métier, un courriel de notification est envoyé à l'adresse courriel liée au compte GE. Cette adresse courriel est fixe pour un formulaire et est précisée dans la DB. Par contre, il est possible de rajouter 0..N adresses courriels auxquelles le système envoie le même courriel en BCC. Ces adresses sont précisées dans le datastore. où les données xml doivent avoir la structure suivante : <SYST_agents> <item><email class="String">[email protected]</email></item> <item><email class="String">[email protected]</email></item> <item><email class="String">[email protected]</email></item> </SYST_agents> Il peut s'agir : • soit de un ou plusieurs champs libres (en nombre fixé, ici par exemple 2) que l'usager remplit lui-même. Attention ! Il y a un contrôle sur le champs courriel, mais si l'usager encode une adresse valide avec une erreur, le courriel n'arrivera pas, et il ne le saura pas. <Paragraph> <Question> <Label>Destinataire notification premier courriel</Label> <TextBox Name="SYST_agents[0]|email" DefaultValue="[email protected]" /> </Question> <Question> <Label>Destinataire notification second courriel</Label> <TextBox Name="SYST_agents[1]|email" /> </Question> </Paragraph> • soit de une ou plusieurs adresses fixes (en nombre fixé également, ici par exempel 3) précisées sous forme de « variable » NB : pour être reprises dans le datastore, il faut positionner l'attribut « Submit » à « True » : <Variable Name="SYST_agents[0]|email" Expression="[email protected]" Submit="True" DataType="string" /> <Variable Name="SYST_agents[1]|email" Expression="[email protected]" Submit="True" DataType="string" /> <Variable Name="SYST_agents[2]|email" Expression="[email protected]" Submit="True" DataType="string" /> • Soit d'un nombre variable de champs libres : <TableBody> <DataIterator InternalName="item" DataPath="SYST_agents" /> <Tr> Page 98 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 <Td Colspan="1" Rowspan="1" VerticalAlignment="top"> <Paragraph> <Question> <Label>Destinataire notification courriel</Label> <TextBox Name="item|email" /> </Question> </Paragraph> </Td> <Td> <Paragraph> <IteratorControlButton Type="insertBefore" /> <IteratorControlButton Type="delete" /> <IteratorControlButton Type="insertAfter" /> </Paragraph> </Td> </Tr> </TableBody> ***** Page 99 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 34. Problèmes de session Tous les problèmes de session semblent avoir trouvé une solution avec la mise en place de la page « ecola », en FormPublisher 3.0 : • perte de session formulaire si l'usager reste sur la même page du formulaire pendant plus de 30 minutes • perte de session portail si l'usager utilise son formulaire plus de 30 minutes sans sauvegarder ou soumettre • session invalidée si double clic sur le bouton « Enregistrer » • session permettant l'ouverture de 2 formulaires, avec conflit. Néanmoins, malgré cette solution, il n'est pas inutile de recommander aux rédacteurs de limiter la taille des pages du formulaire. Recommandation : Pages de longueur raisonnable dans les formulaires Ne pas fabriquer une page avec trop long tableau ou trop de champs mémo. Le cas échéant, toujours essayer de les subdiviser. Si on fabrique un formulaire web avec une page très longue à remplir, ça prendra forcément plus de 30 minutes à l'usager... même s'il ne baille pas aux corneilles. Exemple édifiant : le formulaire d'accompagnement des chômeurs, v01.02.01 : http://forms6.test.wallonie.be/FOREM_AccompagnementChomeurs_v01.02.01/formul aire.html, cf. page « Objectifs et moyens prévus » : cette page contient 8 champs mémo de 2800 caractères. Si l'usager ne fait pas des copier-coller, ça lui prendra pas mal de temps pour taper 22 400 caractères. Il faudrait donc que nous puissions imposer de subdiviser ce genre de page. Dans cet l'exemple du Forem, il conviendrait de couper la page de 8 champs mémo en 8 pages avec un seul champ chacune. C'est à retenir dans les bonnes pratiques, lors du découpage du formulaire en sections et sous-sections. ***** Page 100 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Recommandation n° 35. Calcul du pdf avec FOP FormPublisher fait appel à FOP pour calculer le pdf. manières, en mode client ou en mode serveur. Son paramétrage se fait comme suit. FOP peut être appelé de deux Recommandation Il faut utiliser le mode serveur de FOP. 35.1 EN FORMPUBLISHER 3.1 ET PLUS ANCIEN Dans MY.REF\common\publication.properties, il faut poser : jway.param.pdfMode=server Attention, il faut bien écrire « pdfMode » et non « pdfmode » Vérifier que les paramètres jway.param.pdfMode et jway.transformer.fopass.transport ne sont pas dans les autres publication.properties (APPLI.REF, MY.REF, , common, desktop, mobile) Sur le serveur, dans .jway/formPublisherConfig.properties, il faut poser : Pour activer la génération en mode serveur, il faut poser les 3 paramètres suivants : jway.transformer.fopass.transport=http://fop1.wallonie.be/jwayServicesHub/pdfSe rver jway.transformer.fopass.mimetype= application/octet-stream jway.transformer.fopass.ext=pdf Pour activer la génération en mode ligne de commande (commenter la ligne, ne pas la laisser vide) : #jway.transformer.fopass.transport=http://fop1.wallonie.be/jwayServicesHub/pdfS erver jway.transformer.fopass.mimetype= application/octet-stream jway.transformer.fopass.ext=pdfMY.REF/ 35.2 EN FORMPUBLISHER 3.3 ET APRÈS Il faut supprimer jway.param.pdfMode=server du MY.REF\common\publication.properties, et le poser dans .jway/formPublisherConfig.properties. De la sorte, l'e-form fabriqué en FP3.1 avec le paramètre de mode sera figé dans le mode choisi jusqu'à republication. Tandis que l'e-form fabriqué en FP3.3 utilisera le paramètre du serveur qu'on peut modifier si besoin. Page 101 sur 102 Fabrication de formulaires Cahier de recommandations Juillet 2016 Si on veut imposer le mode client, il suffit de poser (par convention) : jway.param.pdfMode=local dans .jway/formPublisherConfig.properties. 35.3 POINTS D'ATTENTION • • • Si les 3 paramètres sont absents, la génération repasse en mode ligne de commande. Si le serveur fop est indisponible, apache renvoie un code 503 (Service Unavailable) et ◦ en FormPublisher 3.1 et plus ancien : l'e-form renvoie un fichier nommé « .pdf » qui est en réalité le fichier .fo correspondant ; il faut renommer le .pdf en .fo et lui appliquer fop fichier.fo fichier.pdf pour connaître les messages d'erreur ; ◦ en FormPublisher 3.3 et après : fop en mode client est utilsé. Idem si apache est indisponible, l'e-form s'en rend compte presque instantanément. 35.4 NOTES EN BAS DE PAGE Il faut à tout prix éviter le recours aux notes en bas de page lors de la conception des formulaires ! Recommandation Jusqu’à nouvel avis : remplacer les notes en bas de page par un glossaire. Si l’on peut comprendre le souci de l’administration d’apporter une aide aux usagers au travers des notes en bas de page, force est de constater que ces notes provoquent des problèmes répétés pour la construction des PDF dynamiques (= le PDF édité au départ d’un formulaire complété en ligne). En effet, elles sont prévues pour apparaître sur une page précise du formulaire et sont incompressibles. Dans les formulaires où l’usager peut compléter des champs en texte libre, on ne peut, le plus souvent, contrôler le nombre de lignes maximum qu’il y aura par page. Il peut venir un moment où la taille du texte saisi par l’usager entre en conflit avec ces notes dont l’encombrement sur la page est figé. Résultat : le PDF ne peut être généré ! Dans le formulaire électronique, il est possible de remplacer la fonctionnalité des notes en bas de page par d’autres aides : glossaire, FAQ, … Les notes en bas de page sont essentiellement utiles à l’usager qui complète son formulaire au format papier. Elles pourraient donc être prévues pour la conception du PDF statique (= le PDF vierge, qui comporte toutes les questions et est mis en page pour être « propre » en présentation papier). Mais nous tendons à supprimer autant que possible ce PDF statique. Autant dès lors éviter les notes en bas de page. Le remplacement de FOP1.0 par FOP2.1 est une très sérieuse piste de solution. ***** Page 102 sur 102