Version 4.1 par Nicolas Schreiber le 2025/08/05 09:47

Masquer les derniers auteurs
admin admin 1.1 1 {{box title="**Sommaire**"}}
2 {{toc/}}
3 {{/box}}
4
5 page en cours de construction
6
7 = A savoir avant de commencer =
8
9 L'export de données muséologiques vers un tableur met en évidence la particularité de leur organisation technique.
10
11 Pour pouvoir répondre aux exigence scientifiques de leur description, il n'est pas possible d'utiliser des grilles de saisie de type tableur, avec juste des lignes et des colonnes, il faudrait un nombre inifini de colonnes.
12
13 Les grilles de saisie dans Flora,s'appuient donc sur deux notions extrèmement puissantes : **les blocs répétables et les champs multivalués**
14
15 == //Comprendre les blocs répétables et les champs multivalués// ==
16
17 Ces deux notions sont fondamentales en informatique muséologique. Elles permettent de s'affranchir des limites techniques imposées par les bases de données traditionnelles (tables de jointures).
18 Historiquement on appelait cela des bases de données XML, aujourd'hui (entre informaticiens) on parlerait plutôt de NoSql
19
20 Ces notions sont fonctionnellement très puissantes en saisie, mais elles imposent quelques rêgles** quand on veut remettre  les données "à plat"** pour des affichages, des impressions, des exports.
21
22 (% class="box infomessage" %)
23 (((
24 Ces rêgles peuvent paraitre "exotiques" quand on a l'habitude de manipuler un tableur ou une base de donnée SQL. Cet article wiki a donc pour but d'expliciter tout ce qui peut etre exploité pour une **"remise à plat sans perte de sens" **de données muséologiques dans un tableur en lignes / colonnes
25 )))
26
27 //Exemple ~://
28
29 [[image:1698219762510-708.png]]
30
31
32 (% class="wikigeneratedid" %)
33 __**Dans un export CSV pour excel ou calc,:**__
34
35 * Par défaut **les champs multivaluées seront concaténés avec un séparateur virgule+espace entre chaque valeur.**.. donc ça marche tout seul
36 ** Exemple : si je demande à exporter juste le champ Auteuir-Exécutant, dans une colonne je récupererai les 4 auteurs ci dessus, séparés par virgule+espace, mais sans savoir de quel "type" ils dépendent
37 * Par contre, pour les blocs répétables, comme il n'est pas possible de générer un nombre de colonnes variables dans l'export, en général **on concaténera les champs d'un même blocs, puis les différentes occurences d'un même bloc dans une seule et unique Colonne**
38 ** Exemple : si je demande à exporter Le bloc "Création-exécution" dans une colonne ,je devrai paramétrer le mode de concaténation des différents champs qu'il contient, aisni que le mode de concaténation  de chaque occurence de bloc. de facto j'aurai besoin de pouvoir paramétrer des séparateurs, ajouter des libellés de champs....bref "formater" la conaténation des blocs
39
40 = Paramètres généraux d'un modele etp =
41
42 dans l'entête du fichier etp les paramétres suivants pourront etre défini
43
44 **<table**
45
46 **name="MUS_STRATIGRAPHIE"**
47 //nom interne de la table à exporter//
48
49 **charset="ISO-8859-1" **
50 //jeu de caractere du fichier résultat
51 Attention, il est préférable de conserver ce paramétre car les publications réalisées sont ensuiote déclarées avec un type mime et une extension CSV, de manière a étre ouvertes automatiquement dans Excel par un double clic sur le nom de fichier//
52
53 **separator="\t"**
54 //Le séparateur tabulation est préférable car il est certain qu'il n'a pas été saisi dans une des notices exportées, la publication génére **donc un fichier CSV mais dont les sépareurs de colonnes sont des tabulations**//
55
56 **compressChar=" ; "**
57 //caracteres utilisé lors de concaténation automatiques de données dans des blocs répétables//
58
59 **newLine="\r\n"**
60 //caracteres délimitant les changement d'enregistrement  \r=chr(13)  |n=chr(10)//
61
62 **multiValueSeparator=', '**
63 //caracteres utiliser pour concaténer les données des champs multivaluées virgule+espace//
64
65 **valueDelimiter='"'>**
66 //ne pas modifier, permet d'englober les contenus de colonne contenant des \n ou des apsotrophes pour éviter und écalage à l'oiuverture du fichier csv publié//
67
68
69 //Exemple ~://
70 [[image:1698143160183-538.png||class="img-thumbnail"]]
71
72
73 = Export d'un champ =
74
75 Les exemples ci aprés sont issus de l'export CSV de la table Stratigraphie, mais sont transposables dans toutes les tables de Flora
76
77 == Formatage automatique selon le mode de saisie ==
78
79 Par défaut, Flora mettra en forme l'export des champs en fonction de leur mode de saisie de la manière suivante
80
81 === Champs texte libre sur une seule ligne ===
82
83 //Exemple ~://
84
Nicolas Schreiber 2.1 85 [[image:1698221408368-344.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 86
87 La ligne ci dessous génèrera une colonne dont le titre sera égal au label et les contenus alimentés par le champs cité dans name
88
89 **<field name='TYPE_UE'  label='Type Unité d_enregistrement '/> **
90
91 (% class="box warningmessage" %)
92 (((
93 //Attention ne pas mettre d'apostrophe ou guillemets à l'interieur d'un contenu de la balise label (cela génére une erreur bloquante à la publication)//
94 )))
95
96 * **name :** nom interne du champ dans la table Flora
97 * **label : **intitulé qu'aura la colonne dans le fichier csv
98
Nicolas Schreiber 2.1 99 [[image:1698233535559-410.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 100
101 === Champs texte libre multiligne (avec retours à la ligne) ===
102
Nicolas Schreiber 2.1 103 [[image:1698220705279-359.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 104
105 **<field name='PRECISION_UE'  label='Précisions UE '/> **aura pour résultat
106
Nicolas Schreiber 2.1 107 [[image:1698220966238-507.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 108
109 === Champs multivalués liés à des listes, thésaurus ou table d'autorité ===
110
Nicolas Schreiber 2.1 111 [[image:1698220773700-234.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 112
113 **<field name='INTERPRETATION'  label='Interpretation'/> **aura pour résultat
114
Nicolas Schreiber 2.1 115 [[image:1698221043701-405.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 116
117 (% class="box infomessage" %)
118 (((
119 Par défaut Flora exporte la valeur "affichée" du champ. c'est à dire le même contenu textuel que ce qui s'affiche dans les vues.
120 Il est possible de demander l'export de la valeur "interne" du champ (code pour les listes, unique_key pour les tables d'autorité, recordId pour les thésaurus), dans ce cas il faut spécifier display=''false' dans le champs field
121 <field name='INTERPRETATION'  label='Interpretation '** display='false"/> **
122 )))
123
124
125 == Formatages personnalisés sur un champ ==
126
127 * **dataBefore :** separateur avant la donnee du champ, répété en cas de multivaluation     (Chaine vide si non defini)
128 * **dataMultiValueSeparator : **separateur de champ multivalue (Si non defini c'est celui qui est defini dans l'attribut   multiValueSeparator du tag 'table', ou si non defini c'est '/' slash par defaut)
129 * **dataAfter : **separateur apres la donnee du champ répété en cas de multivaluation   (Chaine vide si non defini)
130
131 **Exemple : <field name='INTERPRETATION'  label='Interpretation'  dataBefore="texte avant " dataAfter=" texte aprés" dataMultiValueSeparator=" ; "/>**
132
Nicolas Schreiber 2.1 133 [[image:1698221647528-156.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 134
135 (% class="box infomessage" %)
136 (((
137 **Truc et astuce : **utiliser des retours lignes comme séparateur **avec \n **peut améliorer la lisibilité des données dans le tableur
138 )))
139
140 **<field name='INTERPRETATION'  label='Interpretation'  dataBefore="texte avant : " dataAfter=" (texte aprés)" dataMultiValueSeparator="\n"/>**
141
Nicolas Schreiber 2.1 142 [[image:1698221798735-336.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 143
144 == Exporter une valeur constante ==
145
146 Toutes les lignes auront la même valeur dans la colonne
147
148 **<constant name="C1" label="Constante1"  dataDefValue="myConstante1" />**
149
Nicolas Schreiber 2.1 150 [[image:1698229509017-535.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 151
152 == Exporter un ou plusieurs champs d'une table d'autorité liée ==
153
154 (% class="wikigeneratedid" %)
155 par défaut, les champs liés à des table d'autorité s'exportent avec la concaténation standard  des champs de la table liée (dans Flora on appelle ça le digest de la table, il est défini dans le fichierconf/local/musee/db/A.musee.xml  digest ou link-digest s'il est défini).
156 De facto, tout se retrouve dans une seule et même colonne
157
158 (% class="wikigeneratedid" %)
159 **Exemple avec le champ qui lie la Table Stratigraphie à la Table Opération**
160
161 (% class="box infomessage" %)
162 (((
163 pour la table Opération le link-digest est composé des champs suivants
164 <concat param1="TYPE_OPERATION,30/NOM,50, : /NUM_IDENTIFIANT,20, - /OPERATEUR,60,- /DATE_OPERATION_DEBUT,20, du /DATE_OPERATION_FIN,20, au  "/>
165 )))
166
167 (% class="wikigeneratedid" %)
168 A minima, l'export sera réalisé ainsi, avec le champ DISPLAY_OPERATION qui n'est pas répété ni multivalué. c'est un champ caché de Flora qui ne contient que la première de toutes les opérations potentiellement liées à la notice stratigraphie
169
170 (% class="wikigeneratedid" %)
171 **<field name='DISPLAY_OPERATION'  label='Opération1'/> **
172
173 (% class="wikigeneratedid" %)
174 [[image:1698222516214-545.png]]
175
176 (% class="wikigeneratedid" %)
177 il est donc possible "d'éclater" les champs de la table liée par colonne via le **linked_field. **Chaque champ exportée de la table liée sera positionné dans un colonne dédiée. de cette manière on n'est p^lus bridé par le digest ou le link-digest
178
179 (% class="wikigeneratedid" %)
180 **<linked_field name='DISPLAY_OPERATION'>
181 <field name='NUM_IDENTIFIANT' label="Identifiant Opération"  />
182 <field name='TYPE_OPERATION' label="Type opération" dataBefore="(" dataAfter=")" />
183 </linked_field>**
184
185 (% class="wikigeneratedid" %)
186 [[image:1698222350876-551.png]]
187
188
189 SI on utilise le champ OPERATION (dans le bloc découverte de la grille de saisie), IL est possible d'y saisir plusieurs Opérations liées
190 Dans ce cas, le découpage sera respecté dans chacune des colonnes, mais il ny' aura toujours que 2 colonnes
191
192 **<linked_field name='OPERATION'>
193 <field name='NUM_IDENTIFIANT' label="Identifiant(s) Opération"  />
194 <field name='TYPE_OPERATION' label="Type opération(s)" dataBefore="(" dataAfter=")" />
195 </linked_field>**
196
197 [[image:1698222944107-105.png]]
198
199
200 (% class="box infomessage" %)
201 (((
202 **Question : **pourquoi y a t'il parfois des virgule et des points virgules entre chaque valeur de la colonne Type opération.. d'ou viennent ces points virgules ?
203 **Réponse : **en fait L**e champ Opération(s) dans la table Stratigraphie n'est pas multivalué mais il est positionné dans un bloc répétable**
204
Nicolas Schreiber 2.1 205 [[image:1698226080684-439.png||data-xwiki-image-style-alignment="center" height="478" width="1071"]]
admin admin 1.1 206
207 **Rappel : **
208 Dans les paramétrages généraux du fichier etp on a défini **compressChar=" ; " **//caracteres utilisés lors de concaténation automatiques de données dans des blocs répétables. c'est donc lui qui est utilisé dans le cas présent . les points virgules marquent donc les séparations de blocs répétables//
209 Et on a aussi défini **multiValueSeparator=', ' **//caracteres utiliser pour concaténer les données des champs multivaluées virgule+espace c'est donc lui qui est utilisé dans le cas présent pour lexport du champ TYpe Opération de la table Opération..champ qui est multivaléu dans ladite table//
210
211
Nicolas Schreiber 2.1 212 [[image:1698226465622-838.png||data-xwiki-image-style-alignment="center" height="285" width="966"]]
admin admin 1.1 213
214
215 Cet exemple illustre la complexité de manipulation des données muséologique car les blocs répétables et champs multivalués y sont légion
216 Mais il faut retenir que le paramétrage par défaut des exports etp gére tout cela de manière transparente avec des réglages par défaut qui rendent les données lisibles à minima
217 )))
218
219 = Concaténation libre de champs dans une seule colonne =
220
221 Dans de nombreux  cas il sera nécéssaire de regrouper différents champs de la table dans une seule et même colonne
222
223 //Exemple : concaténer tous les champs de Données intrinsèque d'une notice Stratigraphie dans une seule colonne//
224
Nicolas Schreiber 2.1 225 [[image:1698234060502-846.png||data-xwiki-image-style-alignment="center"]]
admin admin 1.1 226
227 De facto il sera judicieux
228
229 * de ne pas perdre les libellés de champs (on les indiquera dans **dataBefore**)
230 * de n'avoir des séparateurs de champs que si un au moins des champs précédents est non vide...sinon le contenu de la colonne commencera par un séparateur (on les indiquera dans **dataJoinSeparator**)
231
232 == A minima ==
233
234 on va donc créer une "boite" qui va assembler les données de la colonne en concaténant les champs cités
235
236 **<concat name="donnees_descr_intr label="Données descriptives intrinsèques">**
237 <field name='TEXTURE'  dataBefore='Texture '/> 
238 <field name='STRUCTURE' dataBefore='Structure ' dataJoinSeparator=" ; "/> 
239 <field name='COULEUR'  dataBefore='Couleur ' dataJoinSeparator=" ; "/> 
240 <field name='RISQUE_INTRUSION'  dataBefore='Risque d_intrusion ' dataJoinSeparator=", " />
241 <field name='DESCRIPTION_INTRINSEQUE'  dataJoinSeparator="\n"/>
242 **</concat>**
243
244
245 [[image:1698234916860-664.png]]
246
247 == Ajout de données avant - aprés ==
248
249 Cette "boite" concat est vue comme un "groupe" de données. a ce titre il est possible de lui adjoindre les paramétres suivants
250
251 * **groupDataBefore **: donnee avant le groupe
252 * **groupDataAfter **: donnee apres le groupe
253
254 **<concat name="donnees_descr_intr label="Données descriptives intrinsèques"**
255
256 **~ groupDataBefore="texte avant le groupe\n"**
257
258 **~ groupDataAfter="\ntexte aprés le groupe"**
259
260 **>**
261 <field name='TEXTURE'  dataBefore='Texture '/> 
262 <field name='STRUCTURE' dataBefore='Structure ' dataJoinSeparator=" ; "/> 
263 <field name='COULEUR'  dataBefore='Couleur ' dataJoinSeparator=" ; "/> 
264 <field name='RISQUE_INTRUSION'  dataBefore='Risque d_intrusion ' dataJoinSeparator=", " />
265 <field name='DESCRIPTION_INTRINSEQUE'  dataJoinSeparator="\n"/>
266 **</concat>**
267
268 //A noter les \n qui se transforment en retour à la ligne dans la colonne et le datajoinSeparator qui poermet de choisir si on veut un point virgule ou un retour ligne entre chaque champs//
269
270 [[image:1698235351939-869.png]]
271
272 == Ajout de données par défaut entre les champs du groupe ==
273
274 Dans l'exemple ci-aprés, on a positionnés les séparateurs de champs dans chacun des champs avec le DataJoinSeparator
275
276 on pourrait aussi définir une valeur par défaut pour tous les champs du groupe, le **subGroupDataSeparator** ce qui simplifie le paramétrage
277
278 <concat name="donnees_descr_intr" label="Données descriptives intrinsèques"
279 groupDataBefore="texte avant le groupe\n"
280 groupDataAfter="\ntexte aprés le groupe"
281
282 **subGroupDataSeparator=" - champ suivant - "**
283
284 **~ >
285 **<field name='TEXTURE'  dataBefore='Texture '/> 
286 <field name='STRUCTURE' dataBefore='Structure ' /> 
287 <field name='COULEUR'  dataBefore='Couleur ' /> 
288 <field name='RISQUE_INTRUSION'  dataBefore='Risque d_intrusion '  />
289 <field name='DESCRIPTION_INTRINSEQUE'  **dataJoinSeparator="\n"/>**
290 **</concat>**
291
292 //**A noter : **comme on a conservé un DataJoinSeparator sur le dernier champ (car on voulait un retour ligne dans ce cas),le subGoupDAtaSeparator ne s'y applique pas car ce n'est qu'une valeur par dfaut//
293
294 //**résultat obtenu :** Nous avons mis en rouge le subGoupDataSeparator  pour bien comprendre qu'il s'applique "à chaque champ", mais pas à chaque valeur d'un champ multivalué.
295 Dans notre jargon technique on dira que le field dans un concat est un sous-groupoe//
296
297 [[image:1698235881598-485.png]]
298
299 (% class="box infomessage" %)
300 (((
301 les notions de subGroupDataBefore et subGroupDataAfter peuvent aussi etre paramétrées mais n'ont pas grand intéret dans les concat, elles seront plutôt utilisées dans le cas des blocs répétables
302 )))
303
304 = Export des champs d'un bloc répétable =
305
306 Tout ce qui est décrit ci dessus sera exploitable dans les exports de bloc répétable.Un export de bloc répétable pourra contenir des fields, des linked_field, des concats, des constantes
307
308 Globalement il ressemblera beaucoup à un concat, à la différence prés qu'un concat ne se joue qu'une seule fois, alors que le bloc de champs se jouera dans l'export autant de fois qu'il y a de groupe saisis dans la notice courante
309
310 (% class="box infomessage" %)
311 (((
312 On peut se representer cela comme une boucle d'éxécution qui tournera tant qu'il existe encore un bloc répété à exporter
313 )))
314
315 //Exemple avec un bloc de champ répétable contenant 3 champs avec une saisie lacunaire (il est rare que tous les champs soient remplis dans un bloc)//
316
Nicolas Schreiber 2.1 317 [[image:1698249410427-526.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 318
319 le paramétrage de l'export sera défini tel que :
320
321 **~ <group_field name="INTERVENANT"
322 groupDataType              = "group"
323 label                      = "Intervenants"
324 groupDataSubGroupSeparator = "\n\n"
325 \\>  **
326
327 **~ <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
328 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
329 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"/> 
330 </group_field>**
331
332 et génerera la colonne ci dessous
333
Nicolas Schreiber 2.1 334 [[image:1698249964685-586.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 335
336 (% class="box infomessage" %)
337 (((
338 Les labels des field dans un group_field de type group ne sont pas exportés, nous les conservons pour que le fichier etp soit plus lisible car on ne connait pas toujours les noms internes de champs (name)
339 Dans ce cas, les "Sous groupe" seront alimentés via une boucle tournant sur chaque occurence de bloc, générant au final une seule colonne
340 )))
341
342 La nouveauté ici c'est le **groupDataSubGroupSeparator **qui permet de définir le séparateur qui s'exporte **entre chaque sous-groupe** (deux sauts de ligne \n dans le cas présent)
343
344 (% class="box infomessage" %)
345 (((
346 Un sous-groupe est un ensemble de champs qui appartiennent a la même entite :  au meme bloc de champs (type=set), a la même notice liée ou a la même notice qui référence la notice courante
347 )))
348
349 Il est possible de choisir un** type= "sous groupe"**
350
351 <group_field name="INTERVENANT"
352 **groupDataType   ** = **"SubGroup"**
353 label                      = "Intervenants"
354 ~> 
355
356 <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
357 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
358 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"/> 
359 </group_field>
360
361 (% class="wikigeneratedid" %)
362 Dans ce cas chaque élément du groupe générera sa propre colonne, donc ce n'est pas trés différent d'avoir positionné ces 3 champs directement dans le template etp, sans tenir compte du group_field, ou bien directement dans un concat, mais avec la contrainte de ne pouvoir y inclure que des champs du bloc répétable courant
363
364
365 A noter que pour les type=SUbGroup le label du group_field est ignoré et que ce sont les labels de chaque élément qui sont pris en compte dans les intitulé de colonne
366
Nicolas Schreiber 2.1 367 [[image:1698308536947-443.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 368
369
370 == Paramétrages complémentaires pour les blocs répétables ==
371
372 il est possible d'inclure aussi dans un group_field
373
374 * une concaténation formalisée des champs du bloc répétable courant via le tag concat
375 * des champs des notices liées a un des champs du bloc via le tag 'linked_field'
376 * des notices qui référencent la notice courante : tag 'reference' pour les liens parent/enfants. ce tag est étudié plus loin dans l'article
377
378 === Ajout de données avant - après chaque sous-groupe ===
379
380 * **subGroupDataBefore **: séparateur avant les données d'un sous-groupe   (Chaine vide si non défini)
381 * **subGroupDataSeparator **: séparateur entre les données d'un sous-groupe   (Espace si non défini)
382 * **subGroupDataAfter **: séparateur après les donnes d'un sous-groupe    (Chaine vide si non défini)
383
384 === Ajout de données avant - après le groupe ===
385
386 Uniquement si groupDataType="group" car la colonne unique contiendra une concaténation de tous les  sous-groupes en un seul groupe
387
388 * **groupDataBefore **: séparateur avant les données du groupe    (Chaine vide si non défini)
389 * **groupDataSubGroupSeparator **: séparateur entre les sous-groupes   (' / ' espace slash espace si non défini)
390 * **groupDataAfter **: séparateur après les données du groupe   (Chaine vide si non défini)
391
392 === Exemple global ===
393
394 <**group_field **name="INTERVENANT"
395 groupDataType              = "**group**"
396 label                      = "Intervenants"
397 groupDataBefore            = "- texte avant le groupe -\n"
398 groupDataSubGroupSeparator = "\n{séparateur par défaut entre les sous groupe}\n"
399 groupDataAfter             = "\n-texte aprés le groupe"
400 subGroupDataBefore         = "- texte avant le sousgroupe - "
401 subGroupDataSeparator      = " {séparateur par défaut dans le sous groupe} "
402 subGroupDataAfter          = " - texte aprés avant le sousgroupe -"
403 \\>
404 \\ <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
405 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
406 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"/> 
407 </group_field>
408
Nicolas Schreiber 2.1 409 [[image:1698310122900-966.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 410
411 == Filtre sur les données du groupe ==
412
413 D'un certaine manière un bloc répétable peut être considéré comme une table liée embarquée dans la notice courante
414
415 Il sera donc possible de filtrer les occurences d'un bloc répatable en fonction du contenu d'un ou de plusieurs de ces champs avec une syntaxe de type Sql [NOM_DU_CHAMP] opérateur [VALEUR]. De facto seuls les blocs répondant à cette condition seront exportés , les autres seront ignorés
416
417 === Masquer des sous-groupes ===
418
419 //Exemple : je voudrais n'exporter que les blocs Intervenants dont le champ Fonction est rempli//
420
421 <**group_field **name="INTERVENANT"
422 groupDataType              = "**group**"
423 label                      = "Intervenants"
424 **subGroupDataFilter         **= "(FONCTION_INTERVENANT != null)"
425 groupDataBefore            = "- texte avant le groupe -\n"
426 groupDataSubGroupSeparator = "\n{séparateur par défaut entre les sous groupe}\n"
427 groupDataAfter             = "\n-texte aprés le groupe"
428 subGroupDataBefore         = "- texte avant le sousgroupe - "
429 subGroupDataSeparator      = " {séparateur par défaut dans le sous groupe} "
430 subGroupDataAfter          = " - texte aprés avant le sousgroupe -"
431 \\>
432 <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
433 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
434 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"/> 
435 </group_field>
436
437
438 Seul le bloc n° 2 est exporté
439
Nicolas Schreiber 2.1 440 [[image:1698310843667-475.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 441
442 === Masquer des champs dans un sous-groupe ===
443
444 //Exemple : je voudrais n'exporter que les blocs Intervenants dont le champ Fonction est rempli//
445
446 <group_field name="INTERVENANT"
447 groupDataType              = "**group**"
448 label                      = "Intervenants"
449 groupDataBefore            = "- texte avant le groupe -\n"
450 groupDataSubGroupSeparator = "\n{séparateur par défaut entre les sous groupe}\n"
451 groupDataAfter             = "\n-texte aprés le groupe"
452 subGroupDataBefore         = "- texte avant le sousgroupe - "
453 subGroupDataSeparator      = " {séparateur par défaut dans le sous groupe} "
454 subGroupDataAfter          = " - texte aprés avant le sousgroupe -"
455 \\>
456 \\ <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
457 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
458 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"  **inputGroupFieldFilter="(FONCTION_INTERVENANT is null)**"/> 
459 </group_field>
460
461 dans le lLoc n° 2  le cchamp PRECISIONS_INTERVENANT n'est pas exporté
462
Nicolas Schreiber 2.1 463 [[image:1698311103593-686.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 464
465 === Limiter le nombre de sous-groupe exportés ===
466
467 (% class="wikigeneratedid" %)
468 **subGroupDataMultMaxi**="1" fera en sorte que seul le premier bloc sera exporté
469
470 (% class="wikigeneratedid" %)
471 **subGroupDataMultMaxi**="4" fera en sorte que seuls les 4 premiers blocs seront exportés
472
473 == Imbrication de groupes ==
474
475 Il n'y a pas de limite au nombre de niveaux imbriqués, il est donc possible de "suivre" la strucre hiérarchique d'un bloc répétable
476
477 Exemple avec les lots archéo
478
479 <group_field name="LOT_ELEMENT"
480 groupDataType              = "group"
481 label                      = "Archéo - lot"
482 groupDataSubGroupSeparator = "\n\n"
483 subGroupDataSeparator      = ""
484 >
485 <field name='DOMAINE_ELEMENT' />
486 <field name='DENOMINATION_ELEMENT' dataJoinSeparator=" ; " />
487 <field name='APPELLATION_ELEMENT' dataJoinSeparator=" ; " />
488 <field name='TYPOLOGIE_ELEMENT'  dataJoinSeparator=" ; " />
489
490 <group_field name="LOT_DENOMBREMENT"
491 groupDataType              = "group"
492 label                      = "Element - lot"
493 groupDataBefore ="\n"
494 groupDataSubGroupSeparator = " ; "
495 subGroupDataSeparator      = ""
496 >
497 <field name='LOT_TYPE_ELEMENT' dataBefore="" />
498 <field name='LOT_NB_FRAGMENTS' dataBefore=" (" dataAfter=")"/>
499 <field name='LOT_QTE_ESTIMEE' dataBefore=" (" dataAfter=")"/>
500 </group_field>
501
502 <field name='ELEMENT_NB_FRAGMENT'  dataJoinSeparator="\nNb Tot. " />
503 <field name='ELEMENT_NMI'  dataJoinSeparator="\nNMI " />
504 <field name='ELEMENT_POIDS'  dataJoinSeparator="\nPoids " dataAfter=" g" />
505 <field name='ELEMENT_PRECISION'  dataJoinSeparator="\n" />
506 </group_field>
507
Nicolas Schreiber 2.1 508 [[image:1719328382500-862.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
admin admin 1.1 509
510 = Export des via des liens par héritage (référence) =
511
512 Des notices qui référencent la notice courante : tag 'reference'
513
514 Actuellement ce tag s'appuie sur l'index Q des liens inverses entre table (sans précision du champ qui établit le lien).
515
516 ON ne pourra donc pas l'utiliser pour faire remonter la liste des notices filles liées à une notice méré car dans MUS_BIEN plusieurs champs sont liés à MUS_BIEN
517
518 (% class="box infomessage" %)
519 (((
520 A noter c'est **compressChar **en entete qui est utilisé comme séparateur  de notices liées
521 )))
522
523 il permettra par exemple de
524
525 == lister les notices récolement ou constat d'état liées à un bien dans un export des biens ==
526
527 <?xml version="1.0" encoding="ISO-8859-1"?>
528 <export-conf>
529 <table name="MUS_BIEN" charset="ISO-8859-1" separator="\t"** compressChar="\n" **newLine="\r\n" multiValueSeparator=', ' valueDelimiter='"'>
Nicolas Schreiber 2.1 530 \\<field name='UNIQUE_KEY'  label='Unique Key'/> 
admin admin 1.1 531 <field name='MUSEE'  label='Préfixe'/>
532 <field name='NUM_INVENTAIRE'  label='Numéro D'inventaire'/>
533
534 **<reference source='musee' table='MUS_RECOLEMENT'**
535 groupDataType         = "subGroup"
536 label                 = "Récolements et localisations"
537 subGroupDataBefore    = ""
538 subGroupDataSeparator = ", "
539 subGroupDataAfter     = "" >
540
541 <field name='ETAT_MODIFIE_LE'  label='Réalisé le/> 
542 <field name='ETAT_MODIFIE_PAR'  label='Réalisé par/> 
Nicolas Schreiber 3.1 543 **<linked_field name='EMPLACEMENT' label='Emplacement théorique'>**
admin admin 1.1 544 <field name='LABEL_PARENT' label='Empl. référence hiéra' display='true'/>
545 </linked_field>
546
547 **~ <linked_field name='EMPLACEMENT_NOUVEAU' label='Emplacement nouveau'>**
548 <field name='LABEL_PARENT' label='Empl. référence hiéra' display='true'/>
549 </linked_field>
550 </reference>
551
552
553 Il serait théoriquement possible de filtrer récolement
554
555 **subGroupDataFilter         **= "(ETAT_AVANCE_RECOL != '6')"
556
557 et relocalisations
558
559 **subGroupDataFilter         **= "(ETAT_AVANCE_RECOL = '6')"
560
561 == lister les notices exemplaires liées à une notice bib ==
562
563 <?xml version="1.0" encoding="ISO-8859-1"?>
564 <export-conf>
565 <table name="UNIMARC" charset="ISO-8859-1" separator="\t" compressChar="||" newLine="\r\n" >
566
567 ....
568
569 <linked_field name='712a'>
570 <field name='210a' label='712a-Nom' display='true'/>
571 <field name='210b' label='712a-Subdivision' display='true'/>
572 </linked_field>
Nicolas Schreiber 2.1 573 \\ <reference source='system' table='ICOMM_ITEM'
admin admin 1.1 574 groupDataType         = "subGroup"
575 label                 = "Exemplaires"
576 subGroupDataBefore    = "{ "
577 subGroupDataSeparator = ", "
578 subGroupDataAfter     = "}" >
579 <field name='STATUS' label='EX-STATUS_DISPLAY' display='true'/>
580 <field name='CODE'   label='Ex-CODE' display='false'/>
581 <field name='SITE'   label='Ex-Bibliothèque' display='true'/>
582 </reference>
583
584
585 == lister les biens liés à un colis ==
586
587 (% class="box infomessage" %)
588 (((
589 A noter : le tag reference peut imbrique des linked_field, ce qui permet de remonter jusqu'à MUS_BIEN en passant par MUS_JOIN_COLIS
590 )))
591
592 <?xml version="1.0" encoding="ISO-8859-1"?>
593 <export-conf>
594 <table name="MUS_COLIS" charset="ISO-8859-1" separator="\t" **compressChar="\n"** newLine="\r\n" multiValueSeparator=', ' valueDelimiter='"'>
Nicolas Schreiber 2.1 595 \\<field name='ETAT_MODIFIE_LE'  label='Etat modifié le'/>
admin admin 1.1 596 <field name='ETAT_AVANCE_COLIS'  label='Etat d_avancement'/>
597 <field name='UNIQUE_KEY'  label='Numéro de Code'/>
598
599 <linked_field name='LOCATION_REFERENCE' label='Emplacement de référence'>
600 <field name='LABEL_PARENT' label='Empl. référence hiéra' display='true'/>
601 </linked_field>
602 <linked_field name='LOCATION_CURRENT' label='Localisation actuelle '>
603 <field name='LABEL_PARENT' label='Loc. Actuelle hiéra' display='true'/>
604 </linked_field>
605
606 **<reference source='musee' table='MUS_JOIN_COLIS'**
607 groupDataType         = "subGroup"
608 label                 = "Biens liés"
609 subGroupDataBefore    = ""
610 subGroupDataSeparator = ", "
611 subGroupDataAfter     = "" >
612
Nicolas Schreiber 4.1 613 *
admin admin 1.1 614 ** <linked_field name='BIEN' label='Bien'>
615 **~ <field name='DISPLAY' label='Bien' display='true'/>
616 </linked_field>
Nicolas Schreiber 4.1 617
admin admin 1.1 618 </reference>**
619
620 **<reference source='musee' table='MUS_JOIN_COLIS_MOUV'**
621 groupDataType         = "subGroup"
622 label                 = "Biens en mvmnt liés"
623 subGroupDataBefore    = ""
624 subGroupDataSeparator = ", "
625 subGroupDataAfter     = "" >
Nicolas Schreiber 4.1 626 **<linked_field name='MOUVEMENT_BIEN' label='Bien'>**
admin admin 1.1 627 <field name='DISPLAY' label='Bien' display='true'/>
628 </linked_field>
629 </reference>
630
631
Nicolas Schreiber 3.1 632 = Exporter des images (uniquement en format de sortie excel natif) =
admin admin 1.1 633
Nicolas Schreiber 3.1 634 == Première image uniquement ==
admin admin 1.1 635
Nicolas Schreiber 3.1 636 Toutes les options de séparateurs, textes avant et aprés, fonctionnent. tous les cghampsd e IDOCS sont exportables
admin admin 1.1 637
Nicolas Schreiber 3.1 638 C'est l'option **subGroupDataIndex **qui permet de choisir l'image à exporter (premiere, deuxieme, troisieme...)
admin admin 1.1 639
Nicolas Schreiber 3.1 640 **Attention au choix de la résolution. **
641 //résolution=LOW// (imagette) sera suffisant pour excel. Si vous prenez MEDIUM ou HIGH le poids du fichier excel risque d'etre éxagéréent conséquent, ce qui compliquera la manipulation du document final
642 ne mettez pas une //dimImageXYInPixels// supérieurs à192, cela va ralentir le traitement et détérirore la qualité de l'imagette (192 est sa dimension par défaut dasn Flora)
admin admin 1.1 643
644
Nicolas Schreiber 3.1 645 **<linked_records_document_records** name="PHOTO_INV"
646 inputRecordFilter=""
647 linkedRecordFilter=""
admin admin 1.1 648
Nicolas Schreiber 3.1 649 groupDataType=""
650 documentTypes="Document-Photo"
651 subGroupDataFilter="(IDOC_ACCESSIBILITY = 1)"
652 subGroupDataMultMaxi=""
Nicolas Schreiber 4.1 653 **subGroupDataIndex="1">**
Nicolas Schreiber 3.1 654 <!~-~- champ de la table IDOCS ~-~->
655 <field name="LABEL" label="Photo 1 : "/>
admin admin 1.1 656
Nicolas Schreiber 3.1 657 <!~-~- Imagette ~-~->
658 <photo_document_file name="_PHOTO_1"
659 label="Photo 1"
660 inputRecordFilter=""
661 documentTypes="Document-Photo"
Nicolas Schreiber 4.1 662
663 *
664 ** resolution="LOW"
Nicolas Schreiber 3.1 665 dimImageXYInPixels="192"**/>
Nicolas Schreiber 4.1 666 </linked_records_document_records>**
admin admin 1.1 667
Nicolas Schreiber 3.1 668 == Plusieurs images ==
admin admin 1.1 669
Nicolas Schreiber 3.1 670 === sur plusieurs colonnes ===
admin admin 1.1 671
Nicolas Schreiber 3.1 672 Il est recommandé de positionner autant de colonnes que d'images à exporter, d'indiquer dans chque colonne le numéro de l'image (premiers, deuxieme, troisieme...) et de les positionner à la fin du tableau cara certaines colonnes seront forcéemnt vides
admin admin 1.1 673
Nicolas Schreiber 3.1 674 Pour cela il suffit de dupliquer le bloc ci dessus et de choisir le bon **subGroupDataIndex="?" **dans chaque colonne
admin admin 1.1 675
Nicolas Schreiber 3.1 676 Pour ne pas compliquer la lecture du fichier excel il est préférable de ne pas exporter le nom du fichier à chaque fois
admin admin 1.1 677
Nicolas Schreiber 3.1 678 Exemple avec 4 images
admin admin 1.1 679
Nicolas Schreiber 3.1 680 <linked_records_document_records name="PHOTO_INV"
681 documentTypes="Document-Photo"
682 subGroupDataFilter="(IDOC_ACCESSIBILITY = 1)"
Nicolas Schreiber 4.1 683 **subGroupDataIndex="1"**>
684
685 **~
686 **<photo_document_file name="**_PHOTO1**"
687 label="**Photo1**"
Nicolas Schreiber 3.1 688 documentTypes="Document-Photo"
689 resolution="LOW"
690 dimImageXYInPixels="192"/>
691 </linked_records_document_records>
admin admin 1.1 692
Nicolas Schreiber 3.1 693 <linked_records_document_records name="PHOTO_INV"
694 documentTypes="Document-Photo"
695 subGroupDataFilter="(IDOC_ACCESSIBILITY = 1)"
Nicolas Schreiber 4.1 696 **subGroupDataIndex="2"**>
697
698 **~
699 **<photo_document_file name="**_PHOTO2**"
700 label="**Photo2**"
Nicolas Schreiber 3.1 701 documentTypes="Document-Photo"
702 resolution="LOW"
703 dimImageXYInPixels="192"/>
704 </linked_records_document_records>
admin admin 1.1 705
Nicolas Schreiber 3.1 706 <linked_records_document_records name="PHOTO_INV"
707 documentTypes="Document-Photo"
708 subGroupDataFilter="(IDOC_ACCESSIBILITY = 1)"
Nicolas Schreiber 4.1 709 **subGroupDataIndex="3"**>
710
711 **~
712 **<photo_document_file name="**_PHOTO3**"
713 label="**Photo3**"
Nicolas Schreiber 3.1 714 documentTypes="Document-Photo"
715 resolution="LOW"
716 dimImageXYInPixels="192"/>
717 </linked_records_document_records>
admin admin 1.1 718
Nicolas Schreiber 3.1 719 <linked_records_document_records name="PHOTO_INV"
720 documentTypes="Document-Photo"
721 subGroupDataFilter="(IDOC_ACCESSIBILITY = 1)"
Nicolas Schreiber 4.1 722 **subGroupDataIndex="4"**>
723
724 **~
725 **<photo_document_file name="**_PHOTO4**"
726 label="**Photo4**"
Nicolas Schreiber 3.1 727 documentTypes="Document-Photo"
728 resolution="LOW"
729 dimImageXYInPixels="192"/>
730 </linked_records_document_records>
admin admin 1.1 731
Nicolas Schreiber 3.1 732 === sur plusieurs lignes ===
admin admin 1.1 733
Nicolas Schreiber 3.1 734 Avec les options ci dessous déclarés dans un seul bloc
admin admin 1.1 735
Nicolas Schreiber 3.1 736 <linked_records_document_records name="PHOTO_INV"
737 documentTypes="Document-Photo"
738 subGroupDataFilter="(IDOC_ACCESSIBILITY = 1)"
Nicolas Schreiber 4.1 739
740 *
741 ** subGroupDataMultMaxi="4"
742 subGroupDataIndex="">
743 **~
Nicolas Schreiber 3.1 744 <photo_document_file name="**_PHOTO4**"
Nicolas Schreiber 4.1 745 label=**"**Photo4**"
746 **~ documentTypes="Document-Photo"
Nicolas Schreiber 3.1 747 resolution="LOW"
748 dimImageXYInPixels="192"/>
Nicolas Schreiber 4.1 749 </linked_records_document_records>**
admin admin 1.1 750
Nicolas Schreiber 3.1 751 Flora générera une seule colonne pour les images, et ajoutera ensuite autant de lignes (vides) que nécésssaire pour poistionner au maximum les 3 Images suivantes (total 4 images exportées=
admin admin 1.1 752
Nicolas Schreiber 3.1 753 Cette disposition complique un peu la manipulation et la lecture des données dans excel à cause des lignes vides
admin admin 1.1 754
Nicolas Schreiber 3.1 755 == (% id="cke_bm_1281128S" style="display:none" %) (%%)Export des liens ark vers les images ==
admin admin 1.1 756
Nicolas Schreiber 3.1 757 Il est parfois délicat d'incorporer les images en tant que telles dans une colonne excel  car cela rend enuite le fichier difficile à manipule
admin admin 1.1 758
Nicolas Schreiber 3.1 759 De plus sur de gros volumes cela peut générer des fichiers de trop grande taille, surtout si on intégre les images originales au liue de se contenter des imagettes
760
761 Il st donc possible de publier les images via des liens ark
762
763 la colonne devra  etre paramétrée ainsi
764
admin admin 1.1 765 **name="PHOTO_INV" **=nom du champ contenant le lien vers la phototheque (si l'export concerne MUS_PHOTO on indiquera UNIQUE_KEY)
766
767 **subGroupDataMultMaxi="1" **Nombre de notices photos lues**, **il est recommandé de ne mettre qu'un seul lien ark car de facto le lien sera automatiquemenrt clicable dans excel (aprés avoir cliqué dans la cellule)
768
769 **dataMultMaxi="1" **Nombre de fichiers images lus par notice photo, il est recommandé de ne mettre qu'un seul lien ark car de facto le lien sera automatiquemenrt clicable dans excel (aprés avoir cliqué dans la cellule)
770
771 **dataBefore="${flora-url}/ark:**" reprendra automatiquement la racine de l'url de votre applucation flora. SI cette url est accessible par internet et que vous avecz activé le service ark sur votre application, la visualisation des uimages sera possible sur tout poste de travail connecté à internet
772
773 **dataAfter="/low" **renverra l'imagette,
774
775 * si on met** /medium **on aura un fichier de 800 pixels,
776 * si on met **/high** on aura l'image originale non redimensionnées (mais pas la THDEF)
777
778 <linked_field name="PHOTO_INV"
779 label="Image"
780 inputRecordFilter=""
781 groupDataType="group"
782 subGroupDataSeparator=" ~~ "
783 subGroupdataMultiValueSeparator="|"
784 subGroupDataMultMaxi="1"
785 >
Nicolas Schreiber 4.1 786
admin admin 1.1 787 <class_extractor
788 extractorClassName="com.ezida.services.musee.extractor.MusPhotoArkExtractor"
789 name="PHOTO_INV_ARK"
790 label=""
791 inputRecordFilter=""
792
793 dataJoinSeparator="|"
794 dataMultiValueSeparator="|"
795 dataMultMaxi="1"
796 dataBefore="${flora-url}/ark:"
797 dataDefValue=""
798 dataAfter="/low"/>
799 </linked_field>
800
801
802 résultat obtenu.. avec un clic sur le lien ark exporté
803
Nicolas Schreiber 3.1 804 [[image:1698400681257-169.png]]
admin admin 1.1 805
806
Nicolas Schreiber 3.1 807 = Autres paramétrages =
admin admin 1.1 808
Nicolas Schreiber 3.1 809 == Conversions de dates et datations ==
admin admin 1.1 810
Nicolas Schreiber 3.1 811 **dataDateFormatDisplay**='yyyy-MM-dd'
admin admin 1.1 812
Nicolas Schreiber 3.1 813 dataDateFormatDisplay='yyyy'
admin admin 1.1 814
Nicolas Schreiber 3.1 815 .....
admin admin 1.1 816
Nicolas Schreiber 3.1 817 //Cela fonctionne pour les champs dates, time et datation//
admin admin 1.1 818
Nicolas Schreiber 3.1 819 time <field name='CREATE_DATE'  label='Saisi le' dataDateFormatDisplay='yyyy-MM-dd'/>
admin admin 1.1 820
Nicolas Schreiber 3.1 821 date <field name='ETAT_MODIFIE_LE'  label='Etat modifié le ' dataDateFormatDisplay='yyyy-MM-dd'/>
admin admin 1.1 822
Nicolas Schreiber 3.1 823 datation <field name='DATATION_BIEN_DEBUT' dataDateFormatDisplay='yyyy' /> Pour l'instant les dates Avant Jésus-Christ ne sont pas mentionnées comme telmes quand on applique cette conversion
824
825 (% class="box infomessage" %)
826 (((
827 Attention Excel applique ensuite ses propres automates de formatage à l'ouverture du fichier
828 )))
829
830 == valeur par défaut ==
831
832 **dataDefValue**="maValeurtextuelle"
833
834 si le field, linked_field, concat, group_feld est vide, c'est cette valeur qui sera exportée
835
836 //Exemple : utilisé dans l'export e-recolnat pour avoir par défaut la colonne langue = FR sans devoir la saisir dans toutes les notices. si le champ Langue de  notice est non vide il écrasera la dataDefValue//
837
838 == Données textuelles ajoutées en multilangue ==
839
840 Flora gére des fichiers de mots clés pour la traduction des labels textuels dans les différentes languies (dans les fichiers *.properties)
841
842 [[image:1698311785574-970.png||height="133" width="841"]]
843
844 ces mots clés peuvent etre utilisés dans toutes les valeurs textuelles posées dans les tags
845
846 //Exemple//
847
848 <field name='TYPE_UE'  label='Type Unité d_enregistrement ' dataBefore='**${menu.label.inventory} **: '/>
849
850 [[image:1698311964289-353.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
851
852
853 == ==
854
855
856
857
858
859
860