Modifié par Nicolas Schreiber le 2025/08/05 09:57

Afficher les derniers auteurs
1 {{box title="**Sommaire**"}}
2 {{toc/}}
3 {{/box}}
4
5
6 = A savoir avant de commencer =
7
8 L'export de données muséologiques vers un tableur (format csv ou excel natif) met en évidence la particularité de leur organisation technique.
9
10 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.
11
12 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**
13
14 == //Comprendre les blocs répétables et les champs multivalués// ==
15
16 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).
17 Historiquement on appelait cela des bases de données XML, aujourd'hui (entre informaticiens) on parlerait plutôt de NoSql
18
19 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.
20
21 (% class="box infomessage" %)
22 (((
23 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
24 )))
25
26 //Exemple ~://
27
28 [[image:1698219762510-708.png]]
29
30
31 (% class="wikigeneratedid" %)
32 __**Dans un export CSV pour excel ou calc,:**__
33
34 * 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
35 ** 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
36 * 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**
37 ** 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
38
39 = Paramètres généraux d'un modele etp =
40
41 dans l'entête du fichier etp les paramétres suivants pourront etre défini
42
43 **<table**
44
45 **name="MUS_STRATIGRAPHIE"**
46 //nom interne de la table à exporter//
47
48 **charset="ISO-8859-1" **
49 //jeu de caractere du fichier résultat
50 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//
51
52 **separator="\t"**
53 //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**//
54
55 **compressChar=" ; "**
56 //caracteres utilisé lors de concaténation automatiques de données dans des blocs répétables//
57
58 **newLine="\r\n"**
59 //caracteres délimitant les changement d'enregistrement  \r=chr(13)  |n=chr(10)//
60
61 **multiValueSeparator=', '**
62 //caracteres utiliser pour concaténer les données des champs multivaluées virgule+espace//
63
64 **valueDelimiter='"'>**
65 //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é//
66
67
68 //Exemple ~://
69 [[image:1698143160183-538.png||class="img-thumbnail"]]
70
71
72 = Export d'un champ =
73
74 Les exemples ci aprés sont issus de l'export CSV de la table Stratigraphie, mais sont transposables dans toutes les tables de Flora
75
76 == Formatage automatique selon le mode de saisie ==
77
78 Par défaut, Flora mettra en forme l'export des champs en fonction de leur mode de saisie de la manière suivante
79
80 === Champs texte libre sur une seule ligne ===
81
82 //Exemple ~://
83
84 [[image:1698221408368-344.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
85
86 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
87
88 **<field name='TYPE_UE'  label='Type Unité d_enregistrement '/> **
89
90 (% class="box warningmessage" %)
91 (((
92 //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)//
93 )))
94
95 * **name :** nom interne du champ dans la table Flora
96 * **label : **intitulé qu'aura la colonne dans le fichier csv
97
98 [[image:1698233535559-410.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
99
100 === Champs texte libre multiligne (avec retours à la ligne) ===
101
102 [[image:1698220705279-359.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
103
104 **<field name='PRECISION_UE'  label='Précisions UE '/> **aura pour résultat
105
106 [[image:1698220966238-507.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
107
108 === Champs multivalués liés à des listes, thésaurus ou table d'autorité ===
109
110 [[image:1698220773700-234.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
111
112 **<field name='INTERPRETATION'  label='Interpretation'/> **aura pour résultat
113
114 [[image:1698221043701-405.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
115
116 (% class="box infomessage" %)
117 (((
118 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.
119 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
120 <field name='INTERPRETATION'  label='Interpretation '** display='false"/> **
121 )))
122
123
124 == Formatages personnalisés sur un champ ==
125
126 * **dataBefore :** separateur avant la donnee du champ, répété en cas de multivaluation     (Chaine vide si non defini)
127 * **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)
128 * **dataAfter : **separateur apres la donnee du champ répété en cas de multivaluation   (Chaine vide si non defini)
129
130 **Exemple : <field name='INTERPRETATION'  label='Interpretation'  dataBefore="texte avant " dataAfter=" texte aprés" dataMultiValueSeparator=" ; "/>**
131
132 [[image:1698221647528-156.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
133
134 (% class="box infomessage" %)
135 (((
136 **Truc et astuce : **utiliser des retours lignes comme séparateur **avec \n **peut améliorer la lisibilité des données dans le tableur
137 )))
138
139 **<field name='INTERPRETATION'  label='Interpretation'  dataBefore="texte avant : " dataAfter=" (texte aprés)" dataMultiValueSeparator="\n"/>**
140
141 [[image:1698221798735-336.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
142
143 == Exporter une valeur constante ==
144
145 Toutes les lignes auront la même valeur dans la colonne
146
147 **<constant name="C1" label="Constante1"  dataDefValue="myConstante1" />**
148
149 [[image:1698229509017-535.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
150
151 == Exporter un ou plusieurs champs d'une table d'autorité liée ==
152
153 (% class="wikigeneratedid" %)
154 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).
155 De facto, tout se retrouve dans une seule et même colonne
156
157 (% class="wikigeneratedid" %)
158 **Exemple avec le champ qui lie la Table Stratigraphie à la Table Opération**
159
160 (% class="box infomessage" %)
161 (((
162 pour la table Opération le link-digest est composé des champs suivants
163 <concat param1="TYPE_OPERATION,30/NOM,50, : /NUM_IDENTIFIANT,20, - /OPERATEUR,60,- /DATE_OPERATION_DEBUT,20, du /DATE_OPERATION_FIN,20, au  "/>
164 )))
165
166 (% class="wikigeneratedid" %)
167 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
168
169 (% class="wikigeneratedid" %)
170 **<field name='DISPLAY_OPERATION'  label='Opération1'/> **
171
172 (% class="wikigeneratedid" %)
173 [[image:1698222516214-545.png]]
174
175 (% class="wikigeneratedid" %)
176 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
177
178 (% class="wikigeneratedid" %)
179 **<linked_field name='DISPLAY_OPERATION'>
180 <field name='NUM_IDENTIFIANT' label="Identifiant Opération"  />
181 <field name='TYPE_OPERATION' label="Type opération" dataBefore="(" dataAfter=")" />
182 </linked_field>**
183
184 (% class="wikigeneratedid" %)
185 [[image:1698222350876-551.png]]
186
187
188 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
189 Dans ce cas, le découpage sera respecté dans chacune des colonnes, mais il ny' aura toujours que 2 colonnes
190
191 **<linked_field name='OPERATION'>
192 <field name='NUM_IDENTIFIANT' label="Identifiant(s) Opération"  />
193 <field name='TYPE_OPERATION' label="Type opération(s)" dataBefore="(" dataAfter=")" />
194 </linked_field>**
195
196 [[image:1698222944107-105.png]]
197
198
199 (% class="box infomessage" %)
200 (((
201 **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 ?
202 **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**
203
204 [[image:1698226080684-439.png||data-xwiki-image-style-alignment="center" height="478" width="1071"]]
205
206 **Rappel : **
207 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//
208 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//
209
210
211 [[image:1698226465622-838.png||data-xwiki-image-style-alignment="center" height="285" width="966"]]
212
213
214 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
215 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
216 )))
217
218 = Concaténation libre de champs dans une seule colonne =
219
220 Dans de nombreux  cas il sera nécéssaire de regrouper différents champs de la table dans une seule et même colonne
221
222 //Exemple : concaténer tous les champs de Données intrinsèque d'une notice Stratigraphie dans une seule colonne//
223
224 [[image:1698234060502-846.png||data-xwiki-image-style-alignment="center"]]
225
226 De facto il sera judicieux
227
228 * de ne pas perdre les libellés de champs (on les indiquera dans **dataBefore**)
229 * 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**)
230
231 == A minima ==
232
233 on va donc créer une "boite" qui va assembler les données de la colonne en concaténant les champs cités
234
235 **<concat name="donnees_descr_intr label="Données descriptives intrinsèques">**
236 <field name='TEXTURE'  dataBefore='Texture '/> 
237 <field name='STRUCTURE' dataBefore='Structure ' dataJoinSeparator=" ; "/> 
238 <field name='COULEUR'  dataBefore='Couleur ' dataJoinSeparator=" ; "/> 
239 <field name='RISQUE_INTRUSION'  dataBefore='Risque d_intrusion ' dataJoinSeparator=", " />
240 <field name='DESCRIPTION_INTRINSEQUE'  dataJoinSeparator="\n"/>
241 **</concat>**
242
243
244 [[image:1698234916860-664.png]]
245
246 == Ajout de données avant - aprés ==
247
248 Cette "boite" concat est vue comme un "groupe" de données. a ce titre il est possible de lui adjoindre les paramétres suivants
249
250 * **groupDataBefore **: donnee avant le groupe
251 * **groupDataAfter **: donnee apres le groupe
252
253 **<concat name="donnees_descr_intr label="Données descriptives intrinsèques"**
254
255 **~ groupDataBefore="texte avant le groupe\n"**
256
257 **~ groupDataAfter="\ntexte aprés le groupe"**
258
259 **>**
260 <field name='TEXTURE'  dataBefore='Texture '/> 
261 <field name='STRUCTURE' dataBefore='Structure ' dataJoinSeparator=" ; "/> 
262 <field name='COULEUR'  dataBefore='Couleur ' dataJoinSeparator=" ; "/> 
263 <field name='RISQUE_INTRUSION'  dataBefore='Risque d_intrusion ' dataJoinSeparator=", " />
264 <field name='DESCRIPTION_INTRINSEQUE'  dataJoinSeparator="\n"/>
265 **</concat>**
266
267 //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//
268
269 [[image:1698235351939-869.png]]
270
271 == Ajout de données par défaut entre les champs du groupe ==
272
273 Dans l'exemple ci-aprés, on a positionnés les séparateurs de champs dans chacun des champs avec le DataJoinSeparator
274
275 on pourrait aussi définir une valeur par défaut pour tous les champs du groupe, le **subGroupDataSeparator** ce qui simplifie le paramétrage
276
277 <concat name="donnees_descr_intr" label="Données descriptives intrinsèques"
278 groupDataBefore="texte avant le groupe\n"
279 groupDataAfter="\ntexte aprés le groupe"
280
281 **subGroupDataSeparator=" - champ suivant - "**
282
283 **~ >
284 **<field name='TEXTURE'  dataBefore='Texture '/> 
285 <field name='STRUCTURE' dataBefore='Structure ' /> 
286 <field name='COULEUR'  dataBefore='Couleur ' /> 
287 <field name='RISQUE_INTRUSION'  dataBefore='Risque d_intrusion '  />
288 <field name='DESCRIPTION_INTRINSEQUE'  **dataJoinSeparator="\n"/>**
289 **</concat>**
290
291 //**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//
292
293 //**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é.
294 Dans notre jargon technique on dira que le field dans un concat est un sous-groupoe//
295
296 [[image:1698235881598-485.png]]
297
298 (% class="box infomessage" %)
299 (((
300 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
301 )))
302
303 = Export des champs d'un bloc répétable =
304
305 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
306
307 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
308
309 (% class="box infomessage" %)
310 (((
311 On peut se representer cela comme une boucle d'éxécution qui tournera tant qu'il existe encore un bloc répété à exporter
312 )))
313
314 //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)//
315
316 [[image:1698249410427-526.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
317
318 le paramétrage de l'export sera défini tel que :
319
320 **~ <group_field name="INTERVENANT"
321 groupDataType              = "group"
322 label                      = "Intervenants"
323 groupDataSubGroupSeparator = "\n\n"
324 \\>  **
325
326 **~ <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
327 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
328 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"/> 
329 </group_field>**
330
331 et génerera la colonne ci dessous
332
333 [[image:1698249964685-586.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
334
335 (% class="box infomessage" %)
336 (((
337 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)
338 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
339 )))
340
341 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)
342
343 (% class="box infomessage" %)
344 (((
345 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
346 )))
347
348 Il est possible de choisir un** type= "sous groupe"**
349
350 <group_field name="INTERVENANT"
351 **groupDataType   ** = **"SubGroup"**
352 label                      = "Intervenants"
353 ~> 
354
355 <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
356 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
357 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"/> 
358 </group_field>
359
360 (% class="wikigeneratedid" %)
361 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
362
363
364 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
365
366 [[image:1698308536947-443.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
367
368
369 == Paramétrages complémentaires pour les blocs répétables ==
370
371 il est possible d'inclure aussi dans un group_field
372
373 * une concaténation formalisée des champs du bloc répétable courant via le tag concat
374 * des champs des notices liées a un des champs du bloc via le tag 'linked_field'
375 * 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
376
377 === Ajout de données avant - après chaque sous-groupe ===
378
379 * **subGroupDataBefore **: séparateur avant les données d'un sous-groupe   (Chaine vide si non défini)
380 * **subGroupDataSeparator **: séparateur entre les données d'un sous-groupe   (Espace si non défini)
381 * **subGroupDataAfter **: séparateur après les donnes d'un sous-groupe    (Chaine vide si non défini)
382
383 === Ajout de données avant - après le groupe ===
384
385 Uniquement si groupDataType="group" car la colonne unique contiendra une concaténation de tous les  sous-groupes en un seul groupe
386
387 * **groupDataBefore **: séparateur avant les données du groupe    (Chaine vide si non défini)
388 * **groupDataSubGroupSeparator **: séparateur entre les sous-groupes   (' / ' espace slash espace si non défini)
389 * **groupDataAfter **: séparateur après les données du groupe   (Chaine vide si non défini)
390
391 === Exemple global ===
392
393 <**group_field **name="INTERVENANT"
394 groupDataType              = "**group**"
395 label                      = "Intervenants"
396 groupDataBefore            = "- texte avant le groupe -\n"
397 groupDataSubGroupSeparator = "\n{séparateur par défaut entre les sous groupe}\n"
398 groupDataAfter             = "\n-texte aprés le groupe"
399 subGroupDataBefore         = "- texte avant le sousgroupe - "
400 subGroupDataSeparator      = " {séparateur par défaut dans le sous groupe} "
401 subGroupDataAfter          = " - texte aprés avant le sousgroupe -"
402 \\>
403 \\ <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
404 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
405 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"/> 
406 </group_field>
407
408 [[image:1698310122900-966.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
409
410 == Filtre sur les données du groupe ==
411
412 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
413
414 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
415
416 === Masquer des sous-groupes ===
417
418 //Exemple : je voudrais n'exporter que les blocs Intervenants dont le champ Fonction est rempli//
419
420 <**group_field **name="INTERVENANT"
421 groupDataType              = "**group**"
422 label                      = "Intervenants"
423 **subGroupDataFilter         **= "(FONCTION_INTERVENANT != null)"
424 groupDataBefore            = "- texte avant le groupe -\n"
425 groupDataSubGroupSeparator = "\n{séparateur par défaut entre les sous groupe}\n"
426 groupDataAfter             = "\n-texte aprés le groupe"
427 subGroupDataBefore         = "- texte avant le sousgroupe - "
428 subGroupDataSeparator      = " {séparateur par défaut dans le sous groupe} "
429 subGroupDataAfter          = " - texte aprés avant le sousgroupe -"
430 \\>
431 <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
432 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
433 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"/> 
434 </group_field>
435
436
437 Seul le bloc n° 2 est exporté
438
439 [[image:1698310843667-475.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
440
441 === Masquer des champs dans un sous-groupe ===
442
443 //Exemple : je voudrais n'exporter que les blocs Intervenants dont le champ Fonction est rempli//
444
445 <group_field name="INTERVENANT"
446 groupDataType              = "**group**"
447 label                      = "Intervenants"
448 groupDataBefore            = "- texte avant le groupe -\n"
449 groupDataSubGroupSeparator = "\n{séparateur par défaut entre les sous groupe}\n"
450 groupDataAfter             = "\n-texte aprés le groupe"
451 subGroupDataBefore         = "- texte avant le sousgroupe - "
452 subGroupDataSeparator      = " {séparateur par défaut dans le sous groupe} "
453 subGroupDataAfter          = " - texte aprés avant le sousgroupe -"
454 \\>
455 \\ <field name='PERSONNE_INTERVENANT'  label='Intervenant'/> 
456 <field name='FONCTION_INTERVENANT'  label='Fonction ' dataBefore=" (" dataAfter=")"/> 
457 <field name='PRECISION_INTERVENANT'  label='Précisions intervenant ' dataJoinSeparator="\n"  **inputGroupFieldFilter="(FONCTION_INTERVENANT is null)**"/> 
458 </group_field>
459
460 dans le lLoc n° 2  le cchamp PRECISIONS_INTERVENANT n'est pas exporté
461
462 [[image:1698311103593-686.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
463
464 === Limiter le nombre de sous-groupe exportés ===
465
466 (% class="wikigeneratedid" %)
467 **subGroupDataMultMaxi**="1" fera en sorte que seul le premier bloc sera exporté
468
469 (% class="wikigeneratedid" %)
470 **subGroupDataMultMaxi**="4" fera en sorte que seuls les 4 premiers blocs seront exportés
471
472 == Imbrication de groupes ==
473
474 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
475
476 Exemple avec les lots archéo
477
478 <group_field name="LOT_ELEMENT"
479 groupDataType              = "group"
480 label                      = "Archéo - lot"
481 groupDataSubGroupSeparator = "\n\n"
482 subGroupDataSeparator      = ""
483 >
484 <field name='DOMAINE_ELEMENT' />
485 <field name='DENOMINATION_ELEMENT' dataJoinSeparator=" ; " />
486 <field name='APPELLATION_ELEMENT' dataJoinSeparator=" ; " />
487 <field name='TYPOLOGIE_ELEMENT'  dataJoinSeparator=" ; " />
488
489 <group_field name="LOT_DENOMBREMENT"
490 groupDataType              = "group"
491 label                      = "Element - lot"
492 groupDataBefore ="\n"
493 groupDataSubGroupSeparator = " ; "
494 subGroupDataSeparator      = ""
495 >
496 <field name='LOT_TYPE_ELEMENT' dataBefore="" />
497 <field name='LOT_NB_FRAGMENTS' dataBefore=" (" dataAfter=")"/>
498 <field name='LOT_QTE_ESTIMEE' dataBefore=" (" dataAfter=")"/>
499 </group_field>
500
501 <field name='ELEMENT_NB_FRAGMENT'  dataJoinSeparator="\nNb Tot. " />
502 <field name='ELEMENT_NMI'  dataJoinSeparator="\nNMI " />
503 <field name='ELEMENT_POIDS'  dataJoinSeparator="\nPoids " dataAfter=" g" />
504 <field name='ELEMENT_PRECISION'  dataJoinSeparator="\n" />
505 </group_field>
506
507 [[image:1719328382500-862.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
508
509 = Export des via des liens par héritage (référence) =
510
511 Des notices qui référencent la notice courante : tag 'reference'
512
513 Actuellement ce tag s'appuie sur l'index Q des liens inverses entre table (sans précision du champ qui établit le lien).
514
515 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
516
517 (% class="box infomessage" %)
518 (((
519 A noter c'est **compressChar **en entete qui est utilisé comme séparateur  de notices liées
520 )))
521
522 il permettra par exemple de
523
524 == lister les notices récolement ou constat d'état liées à un bien dans un export des biens ==
525
526 <?xml version="1.0" encoding="ISO-8859-1"?>
527 <export-conf>
528 <table name="MUS_BIEN" charset="ISO-8859-1" separator="\t"** compressChar="\n" **newLine="\r\n" multiValueSeparator=', ' valueDelimiter='"'>
529 \\<field name='UNIQUE_KEY'  label='Unique Key'/> 
530 <field name='MUSEE'  label='Préfixe'/>
531 <field name='NUM_INVENTAIRE'  label='Numéro D'inventaire'/>
532
533 **<reference source='musee' table='MUS_RECOLEMENT'**
534 groupDataType         = "subGroup"
535 label                 = "Récolements et localisations"
536 subGroupDataBefore    = ""
537 subGroupDataSeparator = ", "
538 subGroupDataAfter     = "" >
539
540 <field name='ETAT_MODIFIE_LE'  label='Réalisé le/> 
541 <field name='ETAT_MODIFIE_PAR'  label='Réalisé par/> 
542 **<linked_field name='EMPLACEMENT' label='Emplacement théorique'>**
543 <field name='LABEL_PARENT' label='Empl. référence hiéra' display='true'/>
544 </linked_field>
545
546 **~ <linked_field name='EMPLACEMENT_NOUVEAU' label='Emplacement nouveau'>**
547 <field name='LABEL_PARENT' label='Empl. référence hiéra' display='true'/>
548 </linked_field>
549 </reference>
550
551
552 Il serait théoriquement possible de filtrer récolement
553
554 **subGroupDataFilter         **= "(ETAT_AVANCE_RECOL != '6')"
555
556 et relocalisations
557
558 **subGroupDataFilter         **= "(ETAT_AVANCE_RECOL = '6')"
559
560 == lister les notices exemplaires liées à une notice bib ==
561
562 <?xml version="1.0" encoding="ISO-8859-1"?>
563 <export-conf>
564 <table name="UNIMARC" charset="ISO-8859-1" separator="\t" compressChar="||" newLine="\r\n" >
565
566 ....
567
568 <linked_field name='712a'>
569 <field name='210a' label='712a-Nom' display='true'/>
570 <field name='210b' label='712a-Subdivision' display='true'/>
571 </linked_field>
572 \\ <reference source='system' table='ICOMM_ITEM'
573 groupDataType         = "subGroup"
574 label                 = "Exemplaires"
575 subGroupDataBefore    = "{ "
576 subGroupDataSeparator = ", "
577 subGroupDataAfter     = "}" >
578 <field name='STATUS' label='EX-STATUS_DISPLAY' display='true'/>
579 <field name='CODE'   label='Ex-CODE' display='false'/>
580 <field name='SITE'   label='Ex-Bibliothèque' display='true'/>
581 </reference>
582
583
584 == lister les biens liés à un colis ==
585
586 (% class="box infomessage" %)
587 (((
588 A noter : le tag reference peut imbrique des linked_field, ce qui permet de remonter jusqu'à MUS_BIEN en passant par MUS_JOIN_COLIS
589 )))
590
591 <?xml version="1.0" encoding="ISO-8859-1"?>
592 <export-conf>
593 <table name="MUS_COLIS" charset="ISO-8859-1" separator="\t" **compressChar="\n"** newLine="\r\n" multiValueSeparator=', ' valueDelimiter='"'>
594 \\<field name='ETAT_MODIFIE_LE'  label='Etat modifié le'/>
595 <field name='ETAT_AVANCE_COLIS'  label='Etat d_avancement'/>
596 <field name='UNIQUE_KEY'  label='Numéro de Code'/>
597
598 <linked_field name='LOCATION_REFERENCE' label='Emplacement de référence'>
599 <field name='LABEL_PARENT' label='Empl. référence hiéra' display='true'/>
600 </linked_field>
601 <linked_field name='LOCATION_CURRENT' label='Localisation actuelle '>
602 <field name='LABEL_PARENT' label='Loc. Actuelle hiéra' display='true'/>
603 </linked_field>
604
605 **<reference source='musee' table='MUS_JOIN_COLIS'**
606 groupDataType         = "subGroup"
607 label                 = "Biens liés"
608 subGroupDataBefore    = ""
609 subGroupDataSeparator = ", "
610 subGroupDataAfter     = "" >
611
612 *
613 ** <linked_field name='BIEN' label='Bien'>
614 **~ <field name='DISPLAY' label='Bien' display='true'/>
615 </linked_field>
616 \\</reference>**
617
618 **<reference source='musee' table='MUS_JOIN_COLIS_MOUV'**
619 groupDataType         = "subGroup"
620 label                 = "Biens en mvmnt liés"
621 subGroupDataBefore    = ""
622 subGroupDataSeparator = ", "
623 subGroupDataAfter     = "" >
624 **<linked_field name='MOUVEMENT_BIEN' label='Bien'>**
625 <field name='DISPLAY' label='Bien' display='true'/>
626 </linked_field>
627 </reference>
628
629
630 = Exporter des images (uniquement en format de sortie excel natif) =
631
632 == Première image uniquement ==
633
634 Toutes les options de séparateurs, textes avant et aprés, fonctionnent. tous les cghampsd e IDOCS sont exportables
635
636 C'est l'option **subGroupDataIndex **qui permet de choisir l'image à exporter (premiere, deuxieme, troisieme...)
637
638 **Attention au choix de la résolution. **
639 //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
640 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)
641
642
643 **<linked_records_document_records** name="PHOTO_INV"
644 inputRecordFilter=""
645 linkedRecordFilter=""
646
647 groupDataType=""
648 documentTypes="Document-Photo"
649 subGroupDataFilter="(IDOC_ACCESSIBILITY = 1)"
650 subGroupDataMultMaxi=""
651 **subGroupDataIndex="1">**
652 <!~-~- champ de la table IDOCS ~-~->
653 <field name="LABEL" label="Photo 1 : "/>
654
655 <!~-~- Imagette ~-~->
656 <photo_document_file name="_PHOTO_1"
657 label="Photo 1"
658 inputRecordFilter=""
659 documentTypes="Document-Photo"
660
661 *
662 ** resolution="LOW"
663 dimImageXYInPixels="192"**/>
664 </linked_records_document_records>**
665
666 == Plusieurs images ==
667
668 === sur plusieurs colonnes ===
669
670 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
671
672 Pour cela il suffit de dupliquer le bloc ci dessus et de choisir le bon **subGroupDataIndex="?" **dans chaque colonne
673
674 Pour ne pas compliquer la lecture du fichier excel il est préférable de ne pas exporter le nom du fichier à chaque fois
675
676 Exemple avec 4 images
677
678 <linked_records_document_records name="PHOTO_INV"
679 documentTypes="Document-Photo"
680 subGroupDataFilter="(IDOC_ACCESSIBILITY = 1)"
681 **subGroupDataIndex="1"**>
682
683 **~
684 **<photo_document_file name="**_PHOTO1**"
685 label="**Photo1**"
686 documentTypes="Document-Photo"
687 resolution="LOW"
688 dimImageXYInPixels="192"/>
689 </linked_records_document_records>
690
691 <linked_records_document_records name="PHOTO_INV"
692 documentTypes="Document-Photo"
693 subGroupDataFilter="(IDOC_ACCESSIBILITY = 1)"
694 **subGroupDataIndex="2"**>
695
696 **~
697 **<photo_document_file name="**_PHOTO2**"
698 label="**Photo2**"
699 documentTypes="Document-Photo"
700 resolution="LOW"
701 dimImageXYInPixels="192"/>
702 </linked_records_document_records>
703
704 <linked_records_document_records name="PHOTO_INV"
705 documentTypes="Document-Photo"
706 subGroupDataFilter="(IDOC_ACCESSIBILITY = 1)"
707 **subGroupDataIndex="3"**>
708
709 **~
710 **<photo_document_file name="**_PHOTO3**"
711 label="**Photo3**"
712 documentTypes="Document-Photo"
713 resolution="LOW"
714 dimImageXYInPixels="192"/>
715 </linked_records_document_records>
716
717 <linked_records_document_records name="PHOTO_INV"
718 documentTypes="Document-Photo"
719 subGroupDataFilter="(IDOC_ACCESSIBILITY = 1)"
720 **subGroupDataIndex="4"**>
721
722 **~
723 **<photo_document_file name="**_PHOTO4**"
724 label="**Photo4**"
725 documentTypes="Document-Photo"
726 resolution="LOW"
727 dimImageXYInPixels="192"/>
728 </linked_records_document_records>
729
730 === sur plusieurs lignes ===
731
732 Avec les options ci dessous déclarés dans un seul bloc
733
734 <linked_records_document_records name="PHOTO_INV"
735 documentTypes="Document-Photo"
736 subGroupDataFilter="(IDOC_ACCESSIBILITY = 1)"
737
738 *
739 ** subGroupDataMultMaxi="4"
740 subGroupDataIndex="">
741
742 **<photo_document_file name="_PHOTO"
743 label="Photo"
744 documentTypes="Document-Photo"
745 resolution="LOW"
746 dimImageXYInPixels="192"/>
747 </linked_records_document_records>**
748
749 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=
750
751 Cette disposition complique un peu la manipulation et la lecture des données dans excel à cause des lignes vides
752
753 == (% id="cke_bm_1281128S" style="display:none" %) (%%)Export des liens ark vers les images ==
754
755 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
756
757 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
758
759 Il st donc possible de publier les images via des liens ark
760
761 la colonne devra  etre paramétrée ainsi
762
763 **name="PHOTO_INV" **=nom du champ contenant le lien vers la phototheque (si l'export concerne MUS_PHOTO on indiquera UNIQUE_KEY)
764
765 **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)
766
767 **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)
768
769 **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
770
771 **dataAfter="/low" **renverra l'imagette,
772
773 * si on met** /medium **on aura un fichier de 800 pixels,
774 * si on met **/high** on aura l'image originale non redimensionnées (mais pas la THDEF)
775
776 <linked_field name="PHOTO_INV"
777 label="Image"
778 inputRecordFilter=""
779 groupDataType="group"
780 subGroupDataSeparator=" ~~ "
781 subGroupdataMultiValueSeparator="|"
782 subGroupDataMultMaxi="1"
783 >
784
785 <class_extractor
786 extractorClassName="com.ezida.services.musee.extractor.MusPhotoArkExtractor"
787 name="PHOTO_INV_ARK"
788 label=""
789 inputRecordFilter=""
790
791 dataJoinSeparator="|"
792 dataMultiValueSeparator="|"
793 dataMultMaxi="1"
794 dataBefore="${flora-url}/ark:"
795 dataDefValue=""
796 dataAfter="/low"/>
797 </linked_field>
798
799
800 résultat obtenu.. avec un clic sur le lien ark exporté
801
802 [[image:1698400681257-169.png]]
803
804
805 = Autres paramétrages =
806
807 == Conversions de dates et datations ==
808
809 **dataDateFormatDisplay**='yyyy-MM-dd'
810
811 dataDateFormatDisplay='yyyy'
812
813 .....
814
815 //Cela fonctionne pour les champs dates, time et datation//
816
817 time <field name='CREATE_DATE'  label='Saisi le' dataDateFormatDisplay='yyyy-MM-dd'/>
818
819 date <field name='ETAT_MODIFIE_LE'  label='Etat modifié le ' dataDateFormatDisplay='yyyy-MM-dd'/>
820
821 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
822
823 (% class="box infomessage" %)
824 (((
825 Attention Excel applique ensuite ses propres automates de formatage à l'ouverture du fichier
826 )))
827
828 == valeur par défaut ==
829
830 **dataDefValue**="maValeurtextuelle"
831
832 si le field, linked_field, concat, group_feld est vide, c'est cette valeur qui sera exportée
833
834 //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//
835
836 == Données textuelles ajoutées en multilangue ==
837
838 Flora gére des fichiers de mots clés pour la traduction des labels textuels dans les différentes languies (dans les fichiers *.properties)
839
840 [[image:1698311785574-970.png||height="133" width="841"]]
841
842 ces mots clés peuvent etre utilisés dans toutes les valeurs textuelles posées dans les tags
843
844 //Exemple//
845
846 <field name='TYPE_UE'  label='Type Unité d_enregistrement ' dataBefore='**${menu.label.inventory} **: '/>
847
848 [[image:1698311964289-353.png||data-xwiki-image-style-alignment="center" class="img-thumbnail"]]
849
850
851
852
853
854
855
856